使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

本教程將討論變量,包括CALCULATE函數。您將了解這些如何幫助提高 DAX 查詢的性能並提供準確的結果。

盡量使用變量,因為變量可以方便地定位代碼進行優化。它們可以防止您獲得不正確的輸出並節省您查找錯誤的時間。但是,變量有時會阻止重新計算值。因此,一旦用值定義了它們,就無法更改該值,即使通過CALCULATE也無法更改。

知道應該在哪裡定義和使用變量很重要,因為在迭代內部和外部使用它們會產生不同的結果。它們的定義應該靠近它們將被使用的地方。這也有助於分解長代碼,使它們更易於理解和調試。

目錄

使用 CALCULATE 和 FILTER 創建 DAX 查詢

在 DAX 中獲取結果和答案有不同的方法。您需要在創建報告時形成自己的風格和流程,這樣您才能對自己的工作感到滿意。即使您有自己的風格,您仍然必須遵循特定的準則,其中包括對FILTER等不同方法使用CALCULATE

FILTER可能會向公式引擎發送大量未壓縮的數據,並可能觸發 CallBackDataID 此處將使用度量來顯示CALCULATEFILTER的結果。這也有一個定義的度量,該度量是查詢的本地。在數據模型中找不到已定義的度量,但它們可以更快地開發和排除代碼故障。

使用變量和重要函數的 DAX 查詢

在第一行中,您可以看到一個為日期定義變量的度量。這意味著它針對 2016 年 3 月 31 日或之後發生的日期篩選事實表。您還可以看到總銷售額的簡單度量,它迭代事實銷售額表並將數量和當前價格相乘。

下一個措施是在。如果您回憶起CallBackDataID模塊,在 SUMX 函數中使用 IF 將創建一個CallBackDataID

使用變量和重要函數的 DAX 查詢

此度量正在篩選整個 Fact Sales 表。它刪除來自日期表的過濾器。

使用變量和重要函數的 DAX 查詢

過濾整個表時必須小心,因為它還會過濾一對多關係一側的所有列。

這項措施與之前的措施相同;唯一的區別是它不會過濾整個表格。它使用SUMX僅迭代過濾表。

使用變量和重要函數的 DAX 查詢

這是過濾 Fact Sales 表的另一個度量,但這次它只在它所在的列上。

使用變量和重要函數的 DAX 查詢

最後一項措施是使用CALCULATE和數據模型來過濾和檢索數據。

使用變量和重要函數的 DAX 查詢

運行並檢查每項措施

首先,運行IF測量。確保在運行查詢之前清除緩存並打開服務器計時和查詢計劃。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

雖然它提供了正確的數據,但由於CallBackDataID和 3 個持續時間,性能很慢。

如果您運行過濾整個 Fact Sales 表的度量,您仍然可以看到CallBackDataID。它還將生成 15,003 行並提供不正確的結果。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

當���運行未篩選所有 Fact Sales 表的度量時,您將獲得正確的結果。但是,您仍然會看到CallBackDataID和具體化的 15,003 行,但只有 7 行輸出。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

運行對列進行篩選的下一個度量。您將獲得正確的結果並消除CallBackDataID。但是您仍然可以看到它具體化了很多行。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

運行計算度量。您可以看到它只具體化了 10 行並在 5 毫秒內生成了正確的數據。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

它是上述所有措施中最快的,因為它沒有 CallBackDataID並且 只拉取了 10 行。這表明CALCULATE在獲得快速和精確的結果方面是多麼令人印象深刻。

如果您運行所有 DAX 查詢或度量,您可以根據持續時間查看哪個最慢和最快。您還可以查看每個度量的結果。

使用變量和重要函數的 DAX 查詢

使用變量和重要函數的 DAX 查詢

結論

通過將過濾器移至 CALCULATE,您將節省時間和具體化,因為 CallBackDataID被消除。您不必重複數據兩次。這還將最大限度地提高 DAX 的性能並幫助您提高開發技能。


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