CROSSJOIN DAX 函數:服務器計時和查詢計劃

CROSSJOIN DAX 函數:服務器計時和查詢計劃

在本教程中,您將了解函數如何使用“服務器計時”窗格及其查詢計劃在 DAX 中工作。

CROSSJOIN 函數可用於創建兩個表的笛卡爾積。笛卡爾積是兩個或多個表中行的所有可能組合的集合。

本教程將使用下面的DAX 代碼

CROSSJOIN DAX 函數:服務器計時和查詢計劃

您可以看到 CROSSJOIN 函數生成了產品 Brand 和 Color 的組合,即使其中一些組合不存在於Fact 表中。這會生成一個總共有 176 行的表。

在 Server Timings 選項卡中,第一個查詢從 Products 表中檢索 Brand,而第二個查詢檢索 Color。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

CROSSJOIN DAX 函數:服務器計時和查詢計劃

Logical Query Plan中,第一行以表格的形式返回結果。產品表中的第二行和第三行分別掃描顏色和品牌。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

收到數據後,公式引擎將遍歷該表並生成兩列的組合。第 2 行中的 CrossApply 對應於 CROSSJOIN 函數。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

目錄

在 DAX 中過濾 CROSSJOIN 結果

您可以使用函數來過濾 CROSSJOIN 的結果。例如,您可以使用它來僅顯示紅色產品。

但是,請記住您不能將 CROSSJOIN 函數放在 FILTER 參數中

CROSSJOIN DAX 函數:服務器計時和查詢計劃

現在,如果您運行此代碼並檢查 Server Timings 選項卡,您將看到篩選器上下文沒有作為 WHERE 子句出現在查詢中。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

CROSSJOIN 函數只能由公式引擎解析。該代碼不起作用,因為它介於 FILTER 和之間,這些函數只能由Storage Engine解析。因此,CROSSJOIN 導致這兩個函數之間的循環中斷。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

因此,您需要將 FILTER 函數放在 CROSSJOIN 參數中,過濾器才能工作。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

現在,如果您運行此代碼並檢查 Server Timings 選項卡,您將看到 FILTER 函數現在由 WHERE 子句表示。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

在 Logical Query Plan 中,您可以看到使用Filter VertiPaq而不是 Filter Operator 。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

這是因為代碼中新的過濾條件可以下推到Storage Engine。返回結果後,在公式引擎內部執行 CROSSJOIN 參數。

IN 運算符

您還可以在 FILTER 參數中使用運算符而不是等號。

IN 運算符可在 FILTER 函數的表達式參數中使用,以根據值是包含在值列表中還是包含在表中來過濾表。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

CROSSJOIN DAX 函數:服務器計時和查詢計劃

當您使用FILTER – IN組合時,DAX 引擎必須執行IsEmpty過濾器,以確認產品顏色是紅色還是黑色。

在 CROSSJOIN DAX 結果中添加總銷售額列

其他功能也可以與 CROSSJOIN 一起使用。

您可以使用函數在表中添加另一列,然後寫入要顯示的信息的參數。

在此示例中,讓我們添加一個 Total Sales 列。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

運行代碼時,結果仍將返回 176 行。但是,某些組合在“總銷售額”列中將具有空白值。這是因為這些組合在 Sales 表中沒有對應的行。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

在 Server Timings 選項卡中,代碼首先選擇品牌和顏色。然後它總結了數量和銷售淨價的乘積。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

在這種情況下,DAX 引擎首先檢索 Products 表中存在的所有品牌和顏色組合,以及 Sales 表中對應行的組合。然後,它分別檢索品牌和顏色列。

在Physical Query Plan中,可以看到兩個數據緩存;一個是品牌,另一個是顏色。當您將他們的總記錄相乘時,您會得到 176 行。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

然後,對這 176 行執行查找以查看它們在 Sales 表中是否具有相應的值。您可以看到只有 111 行有值。其他 65 行將返回空白。

此外,如果您在 CROSSJOIN 參數中添加更多列,結果也會返回更多行。

CROSSJOIN DAX 函數:服務器計時和查詢計劃

結論

DAX CROSSJOIN 函數通過將一個表中的行與另一個表中的行組合來生成一個新表。此功能類似於 SQL 中的 CROSS JOIN 子句,可用於在您的數據模型中創建更複雜的查詢。

它可以從兩個或多個表中生成所有可能值組合的列表。它還可用於快速創建具有大量行的新表,這對於數據分析、測試或性能基準測試很有用。

總的來說,CROSSJOIN 函數在需要組合多個表的數據或生成所有可能組合的列表的場景中是一個方便的工具。

一切順利,


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