如何動態合併 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 代碼,這並不困難。

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

一切順利!

梅麗莎


在 Power Automate 中執行直到循環控制

在 Power Automate 中執行直到循環控制

了解有關 Do Until 循環控制如何在 Power Automate 流中工作的基礎過程,並熟悉所需的變量。

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

受限於 LuckyTemplates 中提供的標準視覺效果?學習使用 Deneb 和 Vega-Lite 為 LuckyTemplates 創建自定義視覺對象,提升您的數據可視化能力。

在 Power Automate Desktop 中將日期添加到文件名

在 Power Automate Desktop 中將日期添加到文件名

在此博客中,您將了解如何使用 Power Automate Desktop 自動將日期添加到文件名的開頭或結尾。

Power Query:如何快速添加註釋

Power Query:如何快速添加註釋

找出幾種不同的方法在 Power Query 中添加註釋,這對於不喜歡記筆記的人非常有幫助。

Power Apps – SharePoint 集成指南

Power Apps – SharePoint 集成指南

在此博客中,您將了解 MS Power Apps 界面的基礎知識並了解 Power Apps-SharePoint 集成的過程。

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

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

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

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

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

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

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

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

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

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

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

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

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

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