DAX 中的時間智能:如何動態選擇開始時間段

DAX 中的時間智能:如何動態選擇開始時間段

在這篇博文中,我們將解決時間智能中一些比較棘手的問題,尤其是周粒度帶來的問題,以及一年中周數不規律可能帶來的麻煩。我們將使用偏移量在 DAX 中提供準確的時間智能。

今天我們為您準備了一個有趣的場景。這最近在 LuckyTemplates 論壇中出現了幾次。人們想要做的是獲取視覺效果(可以是折線圖或條形圖)並在開始日期動態地改變它。您可以在本博客底部觀看本教程的完整視頻。

DAX 中的時間智能:如何動態選擇開始時間段

在這種情況下,我們使用了與每桶石油平均現貨價格相同的數據集。我們希望能夠單擊視覺對象,將其更改為不同的開始日期,但始終顯示一年的數據,而不是總是從一月初開始。

目錄

DAX 中時間智能的示例場景

您可能想要執行此技術的原因有很多。如果您有一個根據計算方式不斷調整的指標,則可以使用它。您可能只想顯示向前調整期間的數據。

使用它的另一個原因是如果你想以動畫方式可視化它。一旦你點擊播放訪問,這基本上會獲取你的數據並動態顯示它。

DAX 中的時間智能:如何動態選擇開始時間段

在此視覺效果中,我們可以逐月更改開始日期,以顯示它在 12 個月的時間段內如何隨時間變化。對於不同的業務案例,這是一個有趣且有用的視覺效果,但從理論上講,它也代表了許多與 DAX 和數據建模相關的關鍵問題。

讓我們先轉到 LuckyTemplates 並查看我們的數據模型。這是一個非常簡單的數據模型,包含一個擴展日期表和一個連接到日期的現貨價格表。

DAX 中的時間智能:如何動態選擇開始時間段

在 DAX 中使用時間智能的偏移量

我們將要做的事情之一是offsets。擴展日期表中的偏移量是動態計算的。每次刷新或打開報告時,它都會通過 M 代碼。例如,在每月偏移量中,它將當前月份分配為 0,將前一個月分配為 -1,將前兩個月分配為 -2。展望未來,它分配下個月+1,未來兩個月+2。

這是一個簡單的概念,但當您處理 DAX 中的時間智能並處理monthsquartersweeks時,它會非常強大。如果您不使用偏移量,有時會在您的計算中產生相當大的複雜性。

使用偏移量意味著使用一系列連續的數字,其中回溯一個月始終為 -1,向前一個月始終為 +1,無論您在一年中的哪個位置。

在 DAX 中實現時間智能的橡皮鴨策略

過去,我談到過橡皮鴨,它是在您開始編寫 DAX 之前大聲說出您的策略。

DAX 中的時間智能:如何動態選擇開始時間段

我正在大聲思考我將如何使用 DAX 中的時間智能從月度上下文中處理這個問題。我會根據所選的年份和月份開始一些事情,並使用斷開連接的表格來選擇那些,因為如果你考慮一下,其他所有選擇都將涉及跨年(1 月除外)。

假設我們想要從 3 月開始的 12 個月,我們將在下一年結束至少兩個月。如果我們使用連接的切片器,我們只能過濾那一年,而不能過濾到下一年。

從開始日期開始收集偏移量

讓我們為月份和年份創建一個連接表。首先,我們需要獲取處理開始日期的第一個偏移量。

然後我們想將該偏移量向前移動 12 個月,然後只查看該偏移量集中的日期。讓我向您展示它在 DAX 中的樣子。

計算每月範圍

這是我們對范圍內每月的衡量標準,我們在其中選擇我們的年份(我們從斷開連接的年份表中獲取)和我們的月份(我們從斷開連接的月份表中獲取)。

我們還有其他參數,如果沒有進行選擇,它將默認為一月。此參數主要僅用於調試目的。

DAX 中的時間智能:如何動態選擇開始時間段

計算開始和結束月份的偏移量

讓我們通過計算 MAX 偏移量來查看起始月份偏移量。我們刪除日期表上的所有過濾器,並向下過濾到選定的月份和選定的年份。對於每個月,應該只有一個對應於該月和年的偏移量。

DAX 中的時間智能:如何動態選擇開始時間段

從那時起,我們可以採用結束月份偏移量,即開始月份偏移量 + 11 個月。

DAX 中的時間智能:如何動態選擇開始時間段

然後我們查看每個選定的日期並確定它是否在初始月份偏移量和結束月份偏移量之內。如果它落在那個時間段內,我們給它一個 1,如果不在那個時間段內,我們給它一個 0。

DAX 中的時間智能:如何動態選擇開始時間段

如果我們返回到視覺對像中的每月視圖,我們可以看到已設置為等於 1 的範圍內視覺對象。所以它只顯示開始到結束偏移量內的那些月份。例如,如果我們單擊二月,我們會看到二月到一月。

DAX 中的時間智能:如何動態選擇開始時間段

計算每週範圍

讓我們從每週的角度來看這看起來如何。視覺效果一開始還不錯,從第 1 週一直持續到第 52 週。到目前為止,還不錯。

DAX 中的時間智能:如何動態選擇開始時間段

但是如果我們點擊年份切片器中的其他年份,我們可以看到第 52 週,而有些是第 53 週,這會帶來很多問題。從這個例子可以看出問題開始顯現了。

我們的起始期為2020 年第 15 週,但結束期為2021 年第 13 週,而不是2021 年第 14 週

DAX 中的時間智能:如何動態選擇開始時間段

如果我們回到第 1 週,我們可以看到它開始時還不錯,但在第 52 週結束。如果我們在這裡查看第 53 週的計算,2020 年和 2021 年的最大周數是 53 週。這不適用於每週粒度。

DAX 中的時間智能:如何動態選擇開始時間段

讓我們看看我們可以做些什麼來完成這項工作。我們需要在這部分修復 DAX 計算:

DAX 中的時間智能:如何動態選擇開始時間段

這是因為對於某些情況,當一年只有 52 週時,51 是正確的,但對於有 53 週的年份,它將省略最後一個週期。這正是我們在數週的動態視覺中看到的,其中計算刪除了 2020 年和 2021 年的最後一個時期。

為了解決這個問題,我們使用Within Range Weekly Wrong度量,它實際上看起來比之前的度量更簡單。我們有一個起始偏移量併計算出最大偏移量。然後我們將過濾器從日期中刪除,然後將過濾器強加到選定的周和選定的年份,並假設這會導致正確的偏移量。

DAX 中的時間智能:如何動態選擇開始時間段

但這不起作用,因為您使用的是最大偏移量還是最小偏移量都沒有關係。我們所做的只是包裝一個聚合器,這樣我們就不會在 CALCULATE 語句中放置一個裸列。

但是,如果我們回到此處查看ISO WeekNumber,我們可以看到年份和周數並不能唯一確定第一個期間的每週偏移量。

DAX 中的時間智能:如何動態選擇開始時間段

我想出了一個防彈的方法來做到這一點。您可以使用 MIN,但創建此Week1 Offset度量更有意義。為了獲得第 1 週的偏移量,我們正在處理第 2 週,因為它永遠不會被拆分。無論一年中有 52 週還是 53 週,第 2 週都保持不變。

DAX 中的時間智能:如何動態選擇開始時間段

在此計算中,我們過濾到第 2 週以獲得偏移量。然後一旦我們得到第 2 週的偏移量,我們就從中減去一個。這將明確地為我們提供第 1 週的偏移量。這最終解決了我們的問題。

每週計算範圍內

然後我們回到範圍內每週測量,並編寫一個 IF 語句,如果收穫數是第 1 週的,我們計算第 1 週的偏移量。如果不是第 1 週,我們只計算起始週的偏移量,就像我們在之前的月度計算中所做的那樣。

DAX 中的時間智能:如何動態選擇開始時間段

然後結束週偏移量將是開始週偏移量 + 最大周數,可以是 52 或 53。然後我們只需減去 1,以免重複計算起始偏移量。

DAX 中的時間智能:如何動態選擇開始時間段

我們可以使用我們用於每月範圍的相同構造來過濾週,其中任何落在開始和結束偏移量之間的內容都為 1,而任何不為 0 的內容。

然後,我們將每週範圍內度量放入篩選器窗格中。一切都經過檢查,看起來完全正確。

DAX 中的時間智能:如何動態選擇開始時間段

我們可以點擊播放軸,運行週粒度。我們可以看到它像在月份上下文中一樣正常工作。

結論

這是對 DAX 中時間智能的深入探討,我們在其中討論瞭如何解決圍繞週數的一些問題。我希望本教程對您有所幫助,並在您處理一周有問題的情況時為您的工具箱提供了一些額外的工具。

如果您喜歡本教程中涵蓋的內容,請不要忘記訂閱 LuckyTemplates 電視頻道​​。我和一系列內容創作者一直在發布大量內容,所有內容都致力於改進您使用 LuckyTemplates 和 Power Platform 的方式。


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