如何動態合併 Power Query 表中的列

如何動態合併 Power Query 表中的列

上提出的一個有趣問題,該問題涉及如何動態合併 Power Query 表中不斷變化的列數。您可以在本博客底部觀看本教程的完整視頻。

此場景處理導致數據溢出到未知數量的相鄰列中的原始數據導出。當您查看示例時,您可以看到描述已溢出到第 4 列,而描述 2 已拆分為兩個相鄰的列。但情況並非總是如此。在下一個週期中,這個列數可能會改變。

如何動態合併 Power Query 表中的列

在我們進入解決方案之前,讓我們檢查一下合併列時 Power Query 生成的 M 代碼。

目錄

電源查詢表 M 代碼

有幾種方法可以合併列。一種是同時選擇描述列並按下 Shift 鍵或控制鍵,然後同時選擇第 4 列。然後,右鍵單擊並選擇Merge Columns

如何動態合併 Power Query 表中的列

或者,在轉換選項卡上,選擇合併列。並且將出現此對話框,允許您選擇分隔符。

如何動態合併 Power Query 表中的列

在彈出的框中選擇Tab,可以輸入新的列名。在這種情況下,我將其命名為 Description。

如何動態合併 Power Query 表中的列

在公式欄中,我們看到此轉換步驟創建的 M 代碼。

如何動態合併 Power Query 表中的列

如果您的屏幕上看不到編輯欄,請轉到“查看”選項卡並將其打開。

如何動態合併 Power Query 表中的列

所以 Power Query 用來合併列的函數是Table.CombinedColumns。它採用的第一個參數是一個表。該表由我們代碼中的上一步返回,因此在應用步驟中,您會看到它稱為Source

然後,它將列名硬編碼在列表中。在這裡您可以看到列表初始值設定項,以及文本值之間的列名稱描述和列名稱第 4 列。然後,它調用另一個 M 函數來組合這些列中的文本值。

如何動態合併 Power Query 表中的列

最後,它將新列名作為文本傳遞,以便我們進行調整。

如何動態合併 Power Query 表中的列

因此,如果我們希望此函數動態合併不斷變化的列數,我們將不得不更改現在包含硬編碼列名列表的第二個參數值。

合併 Power Query 表中不斷變化的列數

我將回到我的原始數據查詢,如果我們仔細查看列名,我們會發現每個溢出列都是匿名的。它們沒有專有名稱,但它們都以文本列開頭,後跟一個數字。讓我們看看我們是否可以使用它。首先,我將通過右鍵單擊此處並選擇Reference創建一個引用

如何動態合併 Power Query 表中的列

要在公式欄中獲取列名稱,我可以添加Table.ColumnNames。此函數返回一個列表,其中包含該表中的所有列名。讓我們通過單擊To Table將其變回表格。

如何動態合併 Power Query 表中的列

在此彈出框中,單擊“確定”。

如何動態合併 Power Query 表中的列

然後,在“添加列”選項卡上,我將選擇“格式”,然後選擇“修剪”

如何動態合併 Power Query 表中的列

現在,這不是我想要執行的轉換,但它確實為我生成了大部分 M 代碼。我所要做的就是用我自己的邏輯替換那個 trim 函數

如何動態合併 Power Query 表中的列

因此,在公式欄內,我們可以說if Text.StartsWith而不是Text.Trim,然後將其指向我們的Column 1,我會立即復制它。它需要我們正在尋找的文本,所以這將是 Column。因此,如果它以文本列開頭,那麼我們需要“null”——對於其他所有內容,我們需要第 1 列中的任何內容。我們還可以重命名該列,因此在公式欄內,我們將其稱為GroupColumn,而不是 Trim 。

如何動態合併 Power Query 表中的列

現在,我們需要做的就是用這些值填充它們。所以我將右鍵單擊我的標題,選擇FillDown

如何動態合併 Power Query 表中的列

所以下次數據進來時,列數發生了變化,這個組會自動選擇它。

如何動態合併 Power Query 表中的列

讓我們重命名此查詢,我將其稱為列組。

如何動態合併 Power Query 表中的列

讓我們確保它的加載已被禁用,因為這只是一個支持查詢。

如何動態合併 Power Query 表中的列

我可以參考這個支持查詢,稍後我會重命名它。讓我們暫時離開。因此,如果您還記得的話,我們首先合併兩列,然後創建一個包含列名的硬編碼列表,但現在我們可以在 GroupColumn 中過濾 Description

如何動態合併 Power Query 表中的列

因此,如果我們對第 1 列內的描述進行過濾,我們將獲得滿足該條件的列。

如何動態合併 Power Query 表中的列

但是,這是一個表而不是列表。我們需要提取第一列中剩餘的任何內容,因為我們需要將這些列包含在我們的合併操作中。為此,我們可以右鍵單擊 Column 1 標題並選擇Drill Down

如何動態合併 Power Query 表中的列

現在我們得到一個列表。所以讓我們給這個查詢一個合適的名稱(ListDescr),讓我們檢查它是否被禁止加載。

如何動態合併 Power Query 表中的列

現在我們可以回到我們的 Result 查詢並用我們的動態列表替換這裡的第二個參數。所以在這裡,我們可以引用我們的ListDescr

如何動態合併 Power Query 表中的列

我們也對描述 2 重複此操作。我將轉到我的 ColumnGroups 查詢。我將創建另一個參考並選擇我需要的列。然後我將過濾 Description 2,它將返回這三列。我將右鍵單擊我的標題並選擇向下鑽取並重命名此查詢 ( ListDescr2 )。

然後我將返回到我的結果查詢,選擇 Description2 列,然後按下 shift 或 control 以選擇下一列(column2)。我將右鍵單擊標題並選擇Merge Columns

如何動態合併 Power Query 表中的列

在彈出框中,我將選擇 Tab 作為分隔符,並將其命名為 Description2。

如何動態合併 Power Query 表中的列

我將在公式欄上更改此處的列名稱。我將從我們剛剛創建的列表中更改該硬編碼列表。現在,如您所見,這也選取了我們之前排除的第 8 列。

如何動態合併 Power Query 表中的列


如何在 LuckyTemplates 中合併查詢
LuckyTemplates 查詢參數:優化表
在 LuckyTemplates 中對日期表列進行排序

結論

在此博客中,我向您展示瞭如何在 Power Query 中使用 M 代碼來動態合併列。只要您熟悉 Power Query 的工作原理以及使用的 M 代碼,這並不困難。

我希望你喜歡這個。請查看以下鏈接以獲取更多相關內容。

一切順利!

梅麗莎


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的