DAX 每週計算 - LuckyTemplates 時間智能問題

DAX 每週計算 - LuckyTemplates 時間智能問題

在今天的教程中,我將提供一些技巧和技巧來處理DAX週粒度在時間智能計算中引起的常見問題。您可以在本博客底部觀看本教程的完整視頻。

我最近做了一個關於在 LuckyTemplates 中獲取前一周值的教程。從那以後,我收到了幾個與時間智能相關的問題,尤其是與 DAX 週值相關的問題。這並不奇怪,因為周確實是時間智能領域中表現最差的粒度。

就月份而言,一年總有 12 個月。對於宿舍,你總是有四個宿舍。周是不同的,因為一周有 7 天,而一年有 52 週——即 364 天。所以,你有額外的一天在那裡閒逛。在閏年,你有兩天的額外時間。

因此,根據 ISO 週數的編號方案,這實際上會在某些年份結束,有時是 52 週,有時是 53 週。第 53 周是問題最多的一周。

目錄

DAX每週計算的時間智能問題

在此示例中,我使用的是總現貨價格。有了總數,更容易想像和談論。

DAX 每週計算 - LuckyTemplates 時間智能問題

在這種情況下,對於每一年,我們想要顯示第 53 週的一條線,無論那一年是否有第 53 週。所以,你可以看到在 2018 年和 2019 年,沒有第 53 週,但在 2020 年,有。我們希望它保持一致,以便每年都出現第 53 行。但是,對於沒有第 53 年的年份,該指標將是空白的。

我們這樣做的一種常見方法是去顯示沒有數據的項目並確保它已打開。在這種情況下,它已打開,但它不會有幫助,因為當您有一個物理行但沒有與該行關聯的數據時它會起作用。在這種情況下,我們甚至沒有行。

DAX 每週計算 - LuckyTemplates 時間智能問題

使用或 Remove Filters 之類的技術不會起作用,因為沒有什麼可以刪除。該行上的過濾器不存在。因此,問題是我們如何將該行插入到它不存在的每一年中?然後,這真的變成了一個數據建模問題。

我們可能做的一件事是採用雪花方案,在該方案中,我們通過每年將第 53 周強制進入我們的視覺對象的方式過濾日期表。為此想到的功能是

DAX 每週計算 - LuckyTemplates 時間智能問題

CROSSJOIN 用於將可能有或沒有關係的兩個字段匹配在一起。或或其他表函數不同,它們不必具有關係。

在這種情況下,CROSSJOIN 獲取兩列並創建這兩列的每個組合,無論它是否存在於數據集中。這正是我們想要的。

我們已經有了來從列中創建一個表。CROSSJOIN 採用兩個表,然後是 ISO 週數上的 VALUES,我們只是將它們匹配在一起。這將使我們每年有 53 週的時間。

然後,我們向表中添加第三列。我們可以在 Power Query 中執行此操作,但更容易向您展示 DAX 中的邏輯。我們在這裡所做的是,我們實際上是將年份與連字符連接起來,然後是周數,這樣我們就有了一個關鍵字段,可以將它連接到日期表。

DAX 每週計算 - LuckyTemplates 時間智能問題

但是,我們必須在這裡做更多的工作,因為關鍵字段在 Dates 表中的工作方式是它是一個四位數的 Year 連字符,然後是一個兩位數的星期。因此,在 ISO 週數是兩位數的情況下,我們可以進行簡單的連接。如果它是一位數字,我們需要獲取年份數字,然後用連字符連接它,然後是前導零,然後是周數。

一旦我們得到了它,我們就可以在數據模型中獲取該表並找到我們的 Week & Year 列。然後,我們加入一對多的關係。我總是喜歡將Pin 相關字段上的這個選項打開 到卡片頂部,這樣當我們檢查它時,我們可以立即看到它。

DAX 每週計算 - LuckyTemplates 時間智能問題

如果我們回到視覺,我們必須改變行。我們要使用 CROSSJOIN 表中的年份和周數,而不是年份和周數。現在,我們在 2018 年的第 53 周是空白的,在 2019 年的第 53 周也是空白的。2020 年,我們有一個實際數字,因為它有第 53 週。

DAX 每週計算 - LuckyTemplates 時間智能問題

我們可以到此為止,除了我們現在已經脫離了星型模式模型這一事實。任何時候您離開 LuckyTemplates 中的星型架構,您都將離開通常被認為是最佳實踐的領域。

因此,對於 Snowflake Schema,這並不是一個嚴重的違規行為。在某些情況下,您可能肯定想使用它,但如果可以避免,請嘗試使用。它確實減少了重複,但不一定減少大小。它允許您使用直接計數度量,但存在性能問題和潛在的可用性問題,並且肯定會增加 DAX 複雜性。它會阻止您跨表構建層次結構,而且可能最大的問題是它真的會擾亂您跨不同字段同步切片器的能力。

因此,雖然這解決了問題,但它以一種不太好的方式解決了問題。讓我們看看我們是否可以做得更好。讓我們跳轉到另一個數據模型。在此模型中,我採用了完全相同的數據、日期和現貨價格,但這次我刪除了 CROSSJOIN 表。它確實仍然存在,但它沒有連接。

DAX 每週計算 - LuckyTemplates 時間智能問題

但是如果我們查看 DAX,我們會發現它與在其他報表中創建該表的 DAX 完全相同。因此,與其以物理關係連接它,然後違反 Star Schema 並將其轉換為 Snowflake Schema,不如維護 Star Schema 並僅使用虛擬關係。

DAX 每週計算 - LuckyTemplates 時間智能問題

為此,我們將使用一個名為的函數。它在表之間創建了這種關係,但實際上是這樣做的。我們使用執行此操作,因為我們將要更改上下文。在這種情況下,上下文將與關係有關。所以,我們得到了總現貨價格,然後我們得到了 TREATAS。我們有將該列轉換為表格。

然後,我們得到了 Year & Week 字段,這是我們創建的鍵。我們在日期表中以虛擬方式將其加入到周和年。所以現在我們得到了 Crossjoint 表以​​與我們有物理關係時相同的方式過濾 Dates 表,但沒有違反 Star Schema。

DAX 每週計算 - LuckyTemplates 時間智能問題

我們現在可以將總現貨價格 TREATAS 放入矩陣中,我們看到的是完全相同的總數。通過這種方式,我們在不破壞我們的數據模型和招致我們談到的與 Snowflake Schema 相關的任何缺點的情況下這樣做了。

DAX 每週計算 - LuckyTemplates 時間智能問題


使用 DAX 和 Power Query 獲取 LuckyTemplates 前一周的值 在 LuckyTemplates 中使用
DAX 計算每週銷售額
DAX 中的時間智能:如何動態選擇開始時間

結論

在本教程中,我向您展示了幾種解決 LuckyTemplates 中 DAX 每週計算問題的方法。一種是使用 CROSSJOIN,但它有一些缺點。第二種方法是使用 TREATAS,創建虛擬關係,並且不違反 Star Schema 方法。

這是一種對處理第 53 週問題非常有用的技術。我希望你覺得這很有用。我想知道你對此的看法。請在下面的評論中告訴我。

一切順利,


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