DAX Language LuckyTemplates 反向TOPN教程

DAX Language LuckyTemplates 反向TOPN教程

在這篇博文中,我們將研究 LuckyTemplates 論壇上提出的一個問題,並使用 DAX 語言 LuckyTemplates 技術來解決它。如果您想跟隨並下載文件,只需訪問 LuckyTemplates 論壇並轉到。您可以在本博客底部觀看本教程的完整視頻。

DAX Language LuckyTemplates 反向TOPN教程

為了解釋我們將要涵蓋的場景,我們以一個簡單的表格為例。在第一列中,我們有Financial level 1。在第二列中,我們有一個名為 Completed 的日期。在最後一列中,我們有財務水平和完成日期的組合,我們將其命名為Revenue

DAX Language LuckyTemplates 反向TOPN教程

然後我們有一個DateCustomer Name的切片器。

DAX Language LuckyTemplates 反向TOPN教程

對於特定時間段,我們要做的是找出前三個不為零的日期。然後在前三個日期中,我們要確定財務水平。

在度量的第一個版本中,我列出了我們有一些收入的日期小於 4/29/2021 的日期。

在這些日期,我們想要確定產生了一些收入的財務水平。我將向您解釋我們如何實現該計算。

DAX Language LuckyTemplates 反向TOPN教程

目錄

數據建模

在編寫實際的 DAX 之前,讓我們快速瀏覽一下包含多個表的數據模型。我們只對Date 表Data 表Job category 表Customer 表感興趣。

請注意,Customer 表並不重要,因為它僅在切片器內部使用。

DAX Language LuckyTemplates 反向TOPN教程

在數據表中計算收入度量。工作類別包含我們在矩陣上的財務水平。然後我們在切片器中使用日期表中的日期列。

版本 1

讓我們擺脫矩陣中的一切,從頭開始。我將創建一個新度量並將其稱為 V1,因為這將是第一版。我們還將看看其他兩個變體。

準備過濾器上下文

我們要做的第一件事是從過濾器上下文中檢索財務級別的所有值。我們將創建一個並將其命名為FinancialLevelInFilterContext

DAX Language LuckyTemplates 反向TOPN教程

要從過濾器上下文中檢索值,我們將對包含財務級別列的工作類別表使用然後我們需要創建另一個變量並將其命名為Result。然後寫,並關閉它。

在第一個參數中,我們對日期切片器進行了選擇。在這些日期中,我們想要確定沒有 0 且至少有一些收入的日期。

如果要訪問在該切片器中選擇的所有日期,我們需要在日期表上使用

DAX Language LuckyTemplates 反向TOPN教程

由於我們在矩陣上有財務級別,我們還需要確保我們從過濾器上下文中刪除該特定值。我們可以在 Job 類別上使用

DAX Language LuckyTemplates 反向TOPN教程

現在我們的過濾器上下文已經準備好了,我們可以為 CALCULATE 編寫最裡面的計算。首先,我們將聲明一個變量,它將是我們在第一個表中看到的財務水平和日期列的組合。

然後我們將使用並使用 Data 表來匯總這兩個表:Job category 和 Date 表。

DAX Language LuckyTemplates 反向TOPN教程

這將提供數據表中存在的財務級別和日期列的組合。然後我們將創建另一個變量,我們將在其中存儲我們創建的第一個變量的收入行的值。

此變量的名稱將是FinancialLevelAndDatesWithRevenue。該變量的代碼將是前一個變量的然後我們將創建一個虛擬列 Revenue 以啟動上下文轉換。所以對於這個變量的每一行,我們都分配了收入。

DAX Language LuckyTemplates 反向TOPN教程

此表包含收入,也為零。我們需要用零過濾掉那些行。為此,我們可以創建另一個變量並將其命名為RemoveZeroes

我們將對前一個變量使用,然後確保收入不等於零。它可以大於零或小於零,但不應嚴格等於零。

DAX Language LuckyTemplates 反向TOPN教程

然後我們將從RemoveZeroes 變量中檢索日期。為此,我們可以創建另一個變量並將其命名為KeepOnlyDates

DAX Language LuckyTemplates 反向TOPN教程

我可以使用去除返回的重複日期。

DAX Language LuckyTemplates 反向TOPN教程

接下來,我們將按降序確定前三個日期。我們將使用另一個變量並將其命名為Last3Dates,然後使用。

DAX Language LuckyTemplates 反向TOPN教程

然後我們將在日期列中的最後三個日期上使用

DAX Language LuckyTemplates 反向TOPN教程

讓我們將新創建的度量拖放到該矩陣中。我們得到的結果是 31/03/2021、07/04/2021 和 02/04/2021。這意味著我們的措施正在發揮作用。

DAX Language LuckyTemplates 反向TOPN教程

讓我們回到編輯器並刪除 RETURN CONCATENATEX 部分。要檢索最後三個日期,我們可以做的是檢查RemoveZeroes變量中的哪些行實際上是最後三個日期的一部分。

為此,我們將創建另一個變量DatesInLast3Dates ,並在RemoveZeroes上使用 FILTER 函數。這將返回一個包含作業類別和日期的表。

DAX Language LuckyTemplates 反向TOPN教程

我們將總結我們在該表中創建的收入列。讓我們通過 DatesInLast3Dates 返回 SUMX,然後匯總收入列。

DAX Language LuckyTemplates 反向TOPN教程

通過此計算,我們只為每一行獲得一個值,因為我們已從過濾器上下文中刪除了 Job 類別。

DAX Language LuckyTemplates 反向TOPN教程

我們將使用我們在開始時創建的變量來檢查 DatesInLast3Dates變量的每一行是否在過濾器上下文中可用。我們可以編寫另一個變量並將其命名為IsInFilterContext

這將過濾DatesInLast3Dates變量中的日期。然後我將通過 IsInFilter 上下文返回 SUMX 並彙總收入列。

DAX Language LuckyTemplates 反向TOPN教程

一旦我們按下Enter,您可以看到我們得到了與開始時相同的結果。

DAX Language LuckyTemplates 反向TOPN教程

驗證 DAX 語言 LuckyTemplates 計算的結果

為了驗證我們實際上得到了正確的結果,我們可以創建一個新的 CALCULATE 表,這將幫助我們調試、識別和驗證我們到目前為止編寫的代碼是否確實返回了正確的結果。

讓我們創建一份到目前為止編寫的代碼的副本。我只是要復制下面突出顯示的部分,返回創建一個新表,然後粘貼突出顯示的代碼。我們不會為這個表命名,因為我們對它不感興趣。

DAX Language LuckyTemplates 反向TOPN教程

我們可以簡單地寫 RETURN DatesInLast3Dates。如果我單擊Confirm,我們會得到一個表,但我們知道它實際上還沒有返回正確的結果,因為我們實際上需要模仿切片器的行為。

DAX Language LuckyTemplates 反向TOPN教程

我們可以將該代碼包裝在 CALCULATETABLE 中並縮進所有內容。在最後一部分,我將寫日期應該大於或等於 2021-03-15 並且客戶名稱應該等於DHL Supply Chain

DAX Language LuckyTemplates 反向TOPN教程

我們在該度量中創建的表實際上返回了正確的結果。我們可以使用 CALCULATETABLE 來驗證您在計算中創建的虛擬表。

其他 DAX 語言 LuckyTemplates 計算

現在我們知道我們的計算正在運行並了解幕後實際發生的事情,我們可以看看其他方法來計算相同的問題。首先,讓我們創建一個我們已經創建的度量的副本。

版本 2

這一次,我們不打算依賴 VALUES 和 FILTER 函數,所以我們將擺脫它們。我們將刪除返回結果,以及我們在 CALCULATE 中創建的最後一個變量。然後,我們將 CALCULATE 轉換為 CALCULATETABLE。

這次我們不返回標量值,而是返回DatesInLast3Dates。這將返回我們之前創建的相同的 CALCULATETABLE。我們將使用 CALCULATE 函數,在第一個參數中,我們將計算收入度量並將 CALCULATETABLE 作為過濾器上下文注入。

DAX Language LuckyTemplates 反向TOPN教程

一旦我將它帶到矩陣中,您可以看到我們為每個單元格返回相同的總計值。

DAX Language LuckyTemplates 反向TOPN教程

使用 KEEPFILTERS 函數

目前,我們知道幕後的計算工作正常,但我們如何才能確定對於每個單元格,我們只報告該財務級別的值?

在 CALCULATETABLE 的幫助下,我們創建了一個包含財務級別、日期列和收入列的表。我們可以使用鍵過濾器函數在存在於 CALCULATETABLE 之外的過濾器上下文和由 CALCULATETABLE 創建的過濾器上下文之間創建一個交集。

DAX Language LuckyTemplates 反向TOPN教程

單擊“確認”後,我們可以看到我們為每個單元格報告了正確的值,並且版本 1 和版本 2 都返回了正確的值。

DAX Language LuckyTemplates 反向TOPN教程

那麼這是如何工作的呢?CALCULATE 表將返回Maintenance級別,然後是RentalService ExternalSpare parts。KEEPFILTERS將在維護表和該表之間創建一個交集。

Rental 將創建初始過濾器上下文,然後 CALCULATETABLE 將返回 Job 類別的所有值。然後 Rental 和 CALCULATETABLE 返回的表之間將有一個交集。我們只會返回該租賃部分的表或行。

最後,當我們將 SUMMARIZE 注入過濾器上下文時,CALCULATE 函數將只計算 Rental 的收入。每行都會發生相同的過程。

版本 3

讓我們看看使用 DAX 語言 LuckyTemplates 計算相同計算的另一種方法。讓我們創建版本 2 度量的副本並創建另一個度量。我們將把這個命名為版本 3。

此計算背後的想法是,由於我們使用 CALCULATE 函數計算收入,因此我們不需要使用 ADDCOLUMNS 部分,因為我們在 CALCULATE 的內部和外部複製相同的東西。相反,我們可以簡單地寫 Revenue 不應該等於 0。

DAX Language LuckyTemplates 反向TOPN教程

單擊“確認”後,我們需要確保代碼正常運行,因此讓我們將度量值拖到矩陣中。

您可以看到代碼實際上為每個單元格返回相同的值。

DAX Language LuckyTemplates 反向TOPN教程

如果我嘗試通過更改 Date 切片器中的日期並從 Customer Name 中選擇幾個值來更改篩選器上下文,您會看到所有三個度量實際上為每一行返回相同的值。

DAX Language LuckyTemplates 反向TOPN教程

結論

在本教程中,我們學習瞭如何使用從結束日期及時回溯的複雜邏輯來識別前三個日期。基於這種 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 網關?所有你必須知道的