DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我今天想重點關注我稱之為隱藏的 DAX 陷阱的東西。如果你遇到這種情況,你會覺得自己失去了理智,因為你的 DAX 看起來是正確的,但它不會起作用。我將向您介紹發生這種情況的時間以及您可以採取的措施,並在此過程中討論一些通用的 DAX 優化最佳實踐。您可以在本博客底部觀看本教程的完整視頻。

讓我們先來看看我們在這裡使用的是什麼。我們從互聯網電影數據庫中獲得了大約 10 年的數據。事實表非常簡單,我們有評級數據、預算數據和總數據。

今天,我們將關注全球票房收入。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們還有擴展日期表。這將是一個基於日期表和事實表的時間智能分析。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

目錄

每年全球總毛額

我們想做一些非常普通和簡單的事情。我們的全球總收入只是一個非常簡單的總和度量,我們想將其轉換為百分比。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

為此,我們採用分子(全球總毛額衡量標準)和分母(全球總毛額衡量標準,但從年份過濾器中刪除了上下文)。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我使用了,因為我認為它在您閱讀代碼時更直觀,但如果您更喜歡,它也同樣有效。我們只需將分子除以分母即可得到結果。

如果我們採用結果度量並將其放入我們的表中,您會發現它完全符合我們的預期。我們在底部得到 100%,我們將年份轉換為各自的百分比。到目前為止一切順利,我們還沒有遇到任何問題。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

每季度全球總毛額

讓我們看一下按季度進行的類似情況。這一衡量標準可能很有用,因為有假設認為夏季電影季的票房收入與年初不同,並且在接近奧斯卡季的年底。

同樣,我們對季度數字而不是年份使用 REMOVEFILTERS 函數進行了完全相同的度量。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

如果我們將剛剛制定的措施放入表中,它也會完全符合我們的預期。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

每月和每年的全球總毛額

讓我們看一下第三種情況,它非常常見,我們想按月和年查看。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

再一次,我們將使用與以前相同的度量。但是這一次,我們將刪除月份和年份的過濾器。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

讓我們把那個放到我們的桌子上。一下子就不行了。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們可以告訴它什麼是行不通的。我們知道 Worldwide Gross 衡量標準有效,這意味著分子沒問題,但分母不行。在前面的每個案例中,REMOVEFILTERS 函數都正確地刪除了過濾器,但在這裡,它顯然沒有。

我們實際上可以通過更改結果中返回的內容來對此進行測試。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

讓我們使用分母代替結果。請記住,這將以百分比格式設置,因此看起來會有點滑稽。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們應該得到的分母是每一行的相同數字,但事實並非如此。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們可以看出它沒有刪除月份和年份的過濾器,並認為這是因為月份和年份在文本中。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

但是上一個季度也是用文字表達的,所以不僅僅是因為它的文字。它只需要整理一下。一旦您放下字段而不對其進行排序,它將按字母順序排序。

在擴展日期表中,讓我們看一下名為Month & Year的字段。如果我們在Sort by 列中查看它,我們會發現一些有趣的東西。

我們將看到該列按名為 MonthnYear 的數字排序。當您按一列對另一列進行排序時,該排序列實際上成為篩選上下文的一部分。這就是拋出這個計算的原因。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

讓我們回到我們的度量並刪除我們用作排序的月份和年份的上下文。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們現在得到的正是我們應該得到的,即按適當百分比計算的月份和年份。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

刪除篩選器上下文時,將在排序時使用兩個字段來執行此操作。您可能會問,為什麼我們不能只刪除整個日期表上的過濾器,而不是必須在這裡做兩個字段?

答案是我們可以,這將適用於我們討論的三個示例,因為這些列中的每一列都是我們日期表的一部分。刪除該表上的所有篩選器上下文將適用於所有三種情況,但這實際上是一個壞主意。

作為一般的 DAX 優化原則,您需要根據需要刪除盡可能多的過濾器上下文以獲得您想要的結果。

在大多數情況下,您不會以表格格式呈現它。您會將其呈現為矩陣,並且您將需要更複雜的度量,因為您在同一列中有兩種不同的粒度。這個措施看起來很複雜,其實不然。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

這只是我們已經完成的工作的延伸。此 DAX 優化計算的第一部分顯示了不同粒度的分母。我們刪除了一個月、一年和整個表的過濾器上下文。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

對於計算的第二部分,我們使用了 SWITCH TRUE。對於此功能,您必須從最具體到最不具體。月份是我們最嚴格和最具體的範圍,因此這是我們的起點。我們需要使用我們確定的那兩個字段來刪除上下文。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

對於year的範圍,我們要去掉year的context,去掉整個表的context。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

讓我們看看如果我們要獲取和刪除整個日期表上的上下文會發生什麼。對於所有三種情況,我們將使用一種不同的措施來刪除整個日期表上的上下文。

DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

我們將看到該措施過度刪除了上下文。它不是計算每個月對那一年的貢獻,而是計算那個月對整個數據集的貢獻。這不是我們想要發生的,因為在需要手術刀時,從整個表中刪除上下文實際上只是一個鈍器。

結論

在許多情況下,您有一個矩陣,您需要仔細控制要刪除的上下文。只是刪除整個表上的上下文會導致這些問題。

我希望當這種情況出現時(在某個時候總是會出現),您會認識到它是我們在這篇 DAX 優化帖子中討論過的隱藏陷阱,並且您將能夠避免它而不會遇到同樣的挫敗感當我第一次看到它並且無法弄清楚為什麼我的 DAX 無法正常工作時,它引起了我的注意。

如果您喜歡本教程中涵蓋的 DAX 優化主題,請訂閱LuckyTemplates TV 頻道。我和一系列內容創作者一直在發布大量內容,他們都致力於改進您使用 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 網關?所有你必須知道的