嵌套表達式:Power Query 環境

嵌套表達式:Power Query 環境

在本教程中,您將了解Power Query中的嵌套表達式、對象和環境。嵌套表達式和變量將用於討論環境如何工作並幫助生成數據。您還將學習處理轉換嵌套對象時的常見情況。

目錄

創建嵌套表達式

表達式被定義為用於構造值的公式。

嵌套表達式:Power Query 環境

公式欄中的表達式是從子表達式構建的。文字 1 和 2 是父表達式的子表達式。

變量被定義為命名值。這是一個示例記錄。

嵌套表達式:Power Query 環境

如果打開“高級編輯器”窗口,您可以看到查詢中使用的變量。

嵌套表達式:Power Query 環境

變量abc每個代表一個值,該值是您經常在等號後面找到的表達式的結果。父表達式中的所有變量,即記錄本身,構成了該記錄的環境。在該環境中,每個變量都需要是唯一的。

因此,如果您添加另一個名為c的變量,您將在“高級編輯器”窗口下方看到一條錯誤消息。

嵌套表達式:Power Query 環境

嵌套表達式:Power Query 環境

記錄可以使用標識符或變量名訪問它的所有子表達式。但是,對於記錄中的嵌套表達式,每個環境都是不同的,因為它們可以訪問記錄中除自身之外的所有其他變量。

在此示例中,您可以看到變量c正在引用自身。

嵌套表達式:Power Query 環境

如果您按完成,您將收到一條錯誤消息。

嵌套表達式:Power Query 環境

如果您通過添加項目訪問運算符來提取c的值,您將得到一個結果。您也可以使用let表達式獲得相同的結果,因為對它應用了相同的規則。

嵌套表達式:Power Query 環境

了解環境中的嵌套表達式

這是記錄值的另一個例子。

嵌套表達式:Power Query 環境

打開Advanced Editor窗口,可以看到變量ab共享同一個環境,​​也就是最外層環境。您還會看到變量xyz是父表達式a的子表達式。

嵌���表達式:Power Query 環境

每個變量都可以訪問嵌套記錄中除自身之外的所有其他變量。您可以調用存在於不同環境中的變量。在此示例中,您可以看到z正在引用外部環境中的b 。

嵌套表達式:Power Query 環境

變量xyz可以訪問b因為b是它們父表達式環境的一部分。您也可以在不同的環境中使用相同的變量。

在另一個示例中,您可以看到內部和外部記錄都有一個變量x

嵌套表達式:Power Query 環境

變量在它們自己的環境中需要是唯一的。將使用分配給變量的最接近的x 。在此示例查詢中,使用內部x因為從記錄a的角度來看它更近。

嵌套表達式:Power Query 環境

在另一個查詢中,表達式中使用了最接近變量b的x 。

嵌套表達式:Power Query 環境

外部變量b可以使用項訪問運算符引用記錄 a 內的變量x 您需要引用變量a,然後使用一組方括號訪問x 。同理,記錄a可以引用變量b中的變量x

嵌套表達式:Power Query 環境

當嵌套記錄a的環境與父表達式中的變量合併時,會導致衝突,因為x存在兩次並且所有變量在其環境中都必須是唯一的。由於變量不能引用自身,因此通過引用外部x 來解決衝突。

嵌套表達式:Power Query 環境

解決常見場景

一個常見的場景是轉換嵌套對象。為了演示,將使用此表。

嵌套表達式:Power Query 環境

如果要從外部表中檢索一個值並將其放入嵌套表中,有兩種​​方法可以實現。第一種方法是使用“添加自定義列”選項

單擊預覽窗格左上角的表圖標並選擇添加自定義列。

嵌套表達式:Power Query 環境

輸入 Temp 作為列名並在自定義列公式中輸入佔位符。完成後,按確定。

嵌套表達式:Power Query 環境

在公式欄內,通過向嵌套表中添加一列來將每個表達式替換為自定義函數。啟動自定義函數的邏輯並將其稱為OT for outer table。然後,添加 go-to 標誌。

接下來,使用Table.AddColumn函數添加一列。請參閱名稱列中的外部表中的表。然後輸入一個新的列名。

對於此示例,使用的列名稱是Revenue。輸入each函數以獲取 Get Revenue 列中每一行的值。

嵌套表達式:Power Query 環境

如果單擊 Temp 列中某行單元格內的空間,您將在預覽窗格下方預覽嵌套表格。您會看到每一行都有外表的值。

嵌套表達式:Power Query 環境

使用變量存儲值

轉換嵌套對象的第二種方法是使用變量來存儲值。首先,添加自定義列並輸入 Temp2 作為列名。對於公式,使用let表達式將值存儲在變量中。

輸入let然後寫一個變量名。對於此示例,變量名稱是myR。接下來,將該變量與 Get Revenue 列等同起來。之後,輸入in子句並使用Table.AddColumn函數向嵌套表中添加一列。

對於函數的第一個參數,輸入包含嵌套表的名稱列。接下來,將新列命名為 Revenue。使用each調用每一行的變量。

嵌套表達式:Power Query 環境

如果您單擊 Temp2 列中某行單元格內的空間,您將看到它從外表檢索了值。

嵌套表達式:Power Query 環境

另一種常見情況是沒有共享密鑰的查找。對於此場景,將使用 2 個示例表:類別表產品表

嵌套表達式:Power Query 環境

嵌套表達式:Power Query 環境

使用類別表作為登台查詢來補充產品維度表的屬性。由於沒有共享密鑰,因此無法執行合併。要做的第一件事是使用添加自定義列將完整類別表嵌套在產品表查詢中。

添加自定義列並將類別寫為列名。然後在自定義公式中,調用類別查詢。

嵌套表達式:Power Query 環境

之後,您現在已經在產品表的每一行中嵌套了完整的類別表。

嵌套表達式:Power Query 環境

當您單擊“類別”列中某行單元格內的空間時,您可以在每一行中看到完整的類別表。

嵌套表達式:Power Query 環境

檢索單個值

如果您只想檢索單個值,則需要將類別表過濾為一行,其中產品字符串的一部分與類別表中的產品組匹配。

通過按應用步驟窗格中添加的自定義旁邊的齒輪按鈕打開自定義列對話框。

嵌套表達式:Power Query 環境

在公式中,添加Table.SelectRows函數。對於第一個參數,使用類別表。第二個參數使用Text.Contains函數作為條件。對於內部表,此函數檢查文本是否包含外部表中產品字符串的一部分。

嵌套表達式:Power Query 環境

在訪問外表時,您會注意到Power Query在公式欄內添加了each關鍵字。它是一個一元函數,將下劃線 ( _ ) 作為無名變量。但是,由於您只訪問一個列,因此可以將其省略。

嵌套表達式:Power Query 環境

如果您單擊“類別”列中某行單元格內的空間,您現在將在每個嵌套表格中看到一行。

嵌套表達式:Power Query 環境

從那裡,您可以結合行和字段訪問運算符為類別提取值。

返回自定義列對話框並在公式中添加運算符。要獲取表格的第一行,請在一組大括號內輸入0 。然後,在一組方括號內列出字段名稱類別。

嵌套表達式:Power Query 環境

為了讓解決方案面向未來,您可以在末尾添加一個問號 ( ? ),以將未找到的行為從返回錯誤更改為 null。


查詢編輯器在 LuckyTemplates
M 語言中的工作原理和 LuckyTemplates 中的 Power Query Editor

結論

環境和嵌套表達式可幫助您的查詢從代碼中提取某些值以提供理想的結果。在編寫函數時了解它們很重要,因為當您了解它們時,您將能夠解決更高級和更複雜的場景。

梅麗莎


什麼是 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 網關?所有你必須知道的