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 函數在需要組合多個表的數據或生成所有可能組合的列表的場景中是一個方便的工具。

一切順利,

Leave a Comment

在 Power Automate 中執行直到循環控制

在 Power Automate 中執行直到循環控制

了解有關 Do Until 循環控制如何在 Power Automate 流中工作的基礎過程,並熟悉所需的變量。

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

受限於 LuckyTemplates 中提供的標準視覺效果?學習使用 Deneb 和 Vega-Lite 為 LuckyTemplates 創建自定義視覺對象,提升您的數據可視化能力。

在 Power Automate Desktop 中將日期添加到文件名

在 Power Automate Desktop 中將日期添加到文件名

在此博客中,您將了解如何使用 Power Automate Desktop 自動將日期添加到文件名的開頭或結尾。

Power Query:如何快速添加註釋

Power Query:如何快速添加註釋

找出幾種不同的方法在 Power Query 中添加註釋,這對於不喜歡記筆記的人非常有幫助。

Power Apps – SharePoint 集成指南

Power Apps – SharePoint 集成指南

在此博客中,您將了解 MS Power Apps 界面的基礎知識並了解 Power Apps-SharePoint 集成的過程。

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。