DAX 語言中的迭代函數——詳細示例

DAX 語言中的迭代函數——詳細示例

對於這篇博文,我想深入探討 LuckyTemplates 中 DAX 語言中的迭代函數。我之所以想花一些時間展示在迭代函數中可以做什麼,是因為這是一個非常重要的概念,您需要好好學習。您可以在本博客底部觀看本教程的完整視頻。

您可能剛剛完成了一些簡單的 SUM 或可能使用了 AVERAGE 函數,但了解如何使用末尾帶有 X 的迭代函數也很重要,例如:SUMX、AVERAGEX 或 COUNTX。

原因是因為與聚合函數相比,您可以在迭代函數中獲得更高級的功能。

目錄

什麼是迭代函數?

如果你還不熟悉迭代函數是什麼,它是 DAX 公式語言中的函數,通常在末尾有一個 X。您還可以使用像 FILTER 或 VALUES 這樣循環訪問表的表函數,但在這種情況下,我們將只處理 SUMX。

如果您查看我們的總銷售額公式,您會發現這是一個迭代函數,因為有 SUMX。迭代意味著遍歷每一行並進行計算。在這種情況下,對於 Sales 表中的每一行,我們將數量乘以當前價格。我們還將使用 RELATED 函數返回到 Product 表以獲取當前價格。

DAX 語言中的迭代函數——詳細示例

我想向您展示如何編寫真正複雜的迭代函數,這些函數可以提取您可能希望從數據中獲得的深刻見解。對於本教程,我想計算我們在特定價格之上的銷售額。在這種情況下,我們將選擇 2,000 美元。

我還想知道我們每月的銷售額超過 2000 美元但有人購買不止一種產品的產品。我們還想看看它與我們的總銷售額相比如何。這種複雜性可以通過僅編寫一個公式並使用迭代函數來實現。

售價大於 2000 美元

讓我們創建一個度量並將其命名為Sale Price > $2000 & Quantity > 1。通常,您必須編寫幾個不同的專欄或幾個不同的度量才能在此處看到答案,但我將向您展示如何只用一個就可以實際做到這一點。我將從 SUMX 開始,它說我們需要輸入一個表,對嗎?

DAX 語言中的迭代函數——詳細示例

因此,我們將通過創建一個表來解決這個Quantity > 1 的挑戰,該表不是整個 Sales 表,而是一個已經過濾掉所有隻看到一次的表。我們將在這裡使用 FILTER,因為它是一個表函數,因此您可以在其中放置任何類型的表。然後我們將使用 Sales 並在此FILTER函數中迭代 Sales 表中的每一行,並過濾掉數量大於 1 的每一行。

DAX 語言中的迭代函數——詳細示例

對於高於 1 的每個銷售額,我還想創建一個額外的邏輯。我要寫一個表達式模式並在這裡使用 SWITCH。我們要說的是,如果銷售的當前價格大於或等於 2000 美元,那麼我想計算總銷售額。如果不是,那麼我根本不想計算它。最後,我將 0 作為備選結果。

DAX 語言中的迭代函數——詳細示例

這就是您如何用 DAX 語言編寫一些非常複雜的迭代公式。關鍵部分只是了解您可以在其中放置什麼樣的表,並了解實際的迭代在做什麼

在這種情況下,對於此過濾表中的每一行,我正在評估大於 2000 美元的當前價格是多少。如果是,我們計算該行的銷售額,如果不是,則為 0。

一旦我將此度量值拖入表中,您將看到結果與我們在第一個圖表中取得的結果相似;唯一的區別是這是每天的。

DAX 語言中的迭代函數——詳細示例

銷售價格大於 500 美元

我們可以通過重用相同的模式在這裡創造更多的洞察力。如果我們想查看 500 美元以上的內容,我們所要做的就是在這裡進行一些小的更改,按回車鍵,然後將其也拖到表格中。

DAX 語言中的迭代函數——詳細示例

顯然,我們可以看到很大的不同,因為我們統計的產品更多。這是因為我們沒有像以前使用 2000 美元時那樣多地淘汰價格更高或價格更低的產品。

DAX 語言中的迭代函數——詳細示例

可視化數據 

但是,我們也可以將其更改為可視化,因為您可以看到圖表看起來有點忙,所以最好保留在表格中,或者我們可以使時間範圍更緊湊,如左側圖表。

DAX 語言中的迭代函數——詳細示例

希望您可以評估並了解在 DAX 語言中使用這些迭代函數可以走多遠。您可以開始真正深入研究數據的任何方面或提取非常具體的見解。實現它的方法是使用此行上下文,它允許您真正進入這些迭代函數的內部。您可以查看單個行,將其置於計算之內或之外,並使用迭代函數,例如 SUMX、AVERAGEX 和 COUNTX。

迭代函數在行級別的計算方面為您提供了更多的靈活性,而聚合只允許您聚合整個列。現在在迭代函數中,您首先需要輸入一個表引用,然後是一個表達式,但肯定會擴展您的想法,了解其中任何一個實際上是什麼。

在迭代函數中,您實際上可以放入任何表或表的任何派生詞……還有任何虛擬表或對錶的引用。如果您只是使用像事務表這樣的整個表來運行某些邏輯,那麼這比您通常擁有的靈活性要大得多。

您輸入的表達式(或度量)也可以非常高級。您可以使用高級 IF 邏輯或 SWITCH 邏輯,或者基本上可以在計算列內的行級別執行的任何操作。您實際上可以將它放在迭代函數的表達式部分中。

結論

這篇文章的主要收穫是,迭代函數對於理解和學習 LuckyTemplates 內部非常重要。

如果你確實學得很好,那麼通過測量在內存中運行內部計算的機會就會變得非常非常強大。

如果您剛剛開始使用 DAX 語言和 LuckyTemplates,請查看在這個免費課程中可以學到很多東西。找到它。


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