部落格:www。jiaopengzi。com
一、背景
最近在看DAX“聖經”第二版《The Definitive Guide to DAX (2nd ed。)》的時候,迭代函式並不慢。所以今天我們來用實驗來驗證一把。
二、實驗過程
1、一個1000萬的資料,資料好看出差異。
看到1000萬行了嗎?
還有一個維度表
關係
實驗電腦配置 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名稱是度量首字母簡寫,難得寫。)
4、把測試資料匯出,得到我們要的實驗資料。
5、同時我們看到了底層計算邏輯其實都一樣,只有一點細微的差別。
6、資料導回PBI,我們看看最後的結果怎麼樣。
三、總結
1、加入測試:calculate第一引數用
基礎度量
更快,還是用
直接聚合
更快;
2、無論是單純的查詢時間還是總的時間,calculate第一引數用
基礎度量
會更快(如:TF,SF;TC,SC);
3、在查詢中迭代函式的速度並不慢(如:TC,TF);
4、用var要比直接套用慢(如果:TF,TFV)
5、最後我們看到底層計算邏輯都是一樣,還是有細微差別,在做pbi專案的時候,動輒上百個的度量,一點點效率的累計,最終會有很大的時效收益。
by焦棚子
焦棚子的文章目錄