125_Power BI 中 DAX 的效能測試

部落格:www。jiaopengzi。com

一、背景

最近在看DAX“聖經”第二版《The Definitive Guide to DAX (2nd ed。)》的時候,迭代函式並不慢。所以今天我們來用實驗來驗證一把。

二、實驗過程

1、一個1000萬的資料,資料好看出差異。

125_Power BI 中 DAX 的效能測試

看到1000萬行了嗎?

125_Power BI 中 DAX 的效能測試

還有一個維度表

125_Power BI 中 DAX 的效能測試

關係

125_Power BI 中 DAX 的效能測試

實驗電腦配置 2、把度量寫好。

//1、基礎度量total = SUM(data[NUM]) //2、SC_sum_calculate =CALCULATE ( SUM ( data[NUM] ), ‘dim’[DIM] = “A”, ‘data’[ID] < 50000001 )//3、SCV_sum_calculatetable_var =VAR T1 =CALCULATETABLE ( ‘dim’, ‘dim’[DIM] = “A” )VAR T2 =CALCULATETABLE ( ‘data’, ‘data’[NUM] < 5000001 )VAR V =CALCULATE ( SUM ( data[NUM] ), T1, T2 )RETURNV//4、SF_sum_filter =CALCULATE (SUM ( data[NUM] ),FILTER ( ‘dim’, ‘dim’[DIM] = “A” ),FILTER ( ‘data’, ‘data’[NUM] < 5000001 ))//5、SFV_sum_filter_var =VAR T1 =FILTER ( ‘dim’, ‘dim’[DIM] = “A” )VAR T2 =FILTER ( ‘data’, ‘data’[NUM] < 5000001 )VAR V =CALCULATE ( SUM ( ‘data’[NUM] ), T1, T2 )RETURNV//6、TC_total_calculate =CALCULATE ( ‘measure’[total], ‘dim’[DIM] = “A”, ‘data’[ID] < 50000001 )//7、TCV_total_calculatetable_var =VAR T1 =CALCULATETABLE ( ‘dim’, ‘dim’[DIM] = “A” )VAR T2 =CALCULATETABLE ( ‘data’, ‘data’[NUM] < 5000001 )VAR V =CALCULATE ( ‘measure’[total], T1, T2 )RETURNV//8、TF_total_filter =CALCULATE (‘measure’[total],FILTER ( ‘dim’, ‘dim’[DIM] = “A” ),FILTER ( ‘data’, ‘data’[NUM] < 5000001 ))//9、TFV_total_filter_var =VAR T1 =FILTER ( ‘dim’, ‘dim’[DIM] = “A” )VAR T2 =FILTER ( ‘data’, ‘data’[NUM] < 5000001 )VAR V =CALCULATE ( ‘measure’[total], T1, T2 )RETURNV

3、每個度量都拉到畫布中,同時開啟性分析器,測試了20組。(visual名稱是度量首字母簡寫,難得寫。)

125_Power BI 中 DAX 的效能測試

4、把測試資料匯出,得到我們要的實驗資料。

125_Power BI 中 DAX 的效能測試

5、同時我們看到了底層計算邏輯其實都一樣,只有一點細微的差別。

125_Power BI 中 DAX 的效能測試

6、資料導回PBI,我們看看最後的結果怎麼樣。

125_Power BI 中 DAX 的效能測試

三、總結

1、加入測試:calculate第一引數用

基礎度量

更快,還是用

直接聚合

更快;

2、無論是單純的查詢時間還是總的時間,calculate第一引數用

基礎度量

會更快(如:TF,SF;TC,SC);

3、在查詢中迭代函式的速度並不慢(如:TC,TF);

4、用var要比直接套用慢(如果:TF,TFV)

5、最後我們看到底層計算邏輯都是一樣,還是有細微差別,在做pbi專案的時候,動輒上百個的度量,一點點效率的累計,最終會有很大的時效收益。

by焦棚子

焦棚子的文章目錄