UNION DAX 函數與 Power Query

UNION DAX 函數與 Power Query

在本教程中,您將學習使用 UNION 函數的DAX 優化技術。本教程將比較 UNION 函數與Power Query和其他組合表技術的性能。

UNION函數通過合併兩個表的行並刪除所有重複行,將兩個表合併為一個表

本教程中的示例是一個 Sales 表,該表每年被拆分為三個表(2007 年、2008 年、2009 年)。

目錄

DAX中的UNION函數

打開DAX Studio並啟動服務器計時和查詢計劃。

UNION DAX 函數與 Power Query

以下面的 DAX 代碼為例:

UNION DAX 函數與 Power Query

運行代碼後,轉到“服務器計時”選項卡。您可以看到代碼總共需要 5.4 秒才能執行。大部分執行時間都花在了存儲引擎上。這三個查詢中的每一個都包含相同的操作,但年份不同。

UNION DAX 函數與 Power Query

Storage Engine返回這三個query後,Formula Engine進行UNION,可以在Logical Query Plan中看到。查詢計劃還執行來計算總銷售額。

UNION DAX 函數與 Power Query

在 Physical Query Plan 中,您可以看到三個數據緩存,其中包含每年在 Sales 表中執行的操作。

UNION DAX 函數與 Power Query

���較 DAX 性能

為了進行比較,讓我們使用原始 Sales 表為 Total Sales 創建一個度量。

UNION DAX 函數與 Power Query

如果您運行此代碼並轉到Server Timings選項卡,您會發現這比 UNION 函數效率高得多。

UNION 函數消耗 97.9 KB,而新度量僅消耗 1KB。

UNION DAX 函數與 Power Query

使用 UNION 時,DAX 引擎會將大量數據緩存返回給公式引擎。這給RAM帶來了很大的壓力。

因此,如果您正在處理包含超過一百萬行的數據模型,則不建議使用 UNION 函數

UNION DAX 函數替代方案

對於此示例,您可以使用三個 SUMX 函數來代替 UNION 。也就是說,每年一個 SUMX 函數。

UNION DAX 函數與 Power Query

當您運行此代碼並轉到 Server Timings 選項卡時,您可以看到執行時間明顯縮短。它從 5,400 毫秒減少到 33 毫秒,同時仍然執行三個不同的查詢。

UNION DAX 函數與 Power Query

另一種方法是在 Power Query 或數據源本身中附加數據模型表。

但最好的選擇是創建一個計算表來執行這三個表的聯合。但是這個選項有其優點和缺點。

使用計算表可以節省總體處理時間,而不是在 Power Query 中執行追加。但是,這會導致 VertiPaq 中的數據庫大小增加。

當您使用計算表時,您正在創建一個組合了三個表的新表。但是這三個拆分錶會繼續保留在數據庫中。

UNION DAX 函數與 Power Query

在此示例中,三個表總共消耗 25 MB。如果您創建一個計算表,它將在您的 RAM 中再消耗 25 MB。

對於此類敏感案例,您需要就最佳行動方案做出明智的決定。

結論

DAX中的UNION功能將兩張表合二為一,方便分析數據。它的工作原理是將兩個表作為輸入並返回一個包含兩個輸入表中所有行的新表。但是,此功能有其自身的局限性。

UNION 函數可能比其他合併數據的方法慢,尤其是在輸入表很大的情況下。與其他替代方案相比,它還可以佔用更多存儲空間。

每當情況需要組合表時,在決定使用 UNION 函數之前首先權衡利弊是很重要的。您的備選方案包括 SUMX 函數、數據模型表或計算表。

一切順利,


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