
今天簡單說下summarize,summarizecolumns,sddcolumns這三個DAX函數(shù)的功能及用法:
1.SUMMARIZE函數(shù)
語法:SUMMARIZE(表,[分組列],匯總列名,匯總表達(dá)式,...)
作用:自動計算并返回分組的匯總表,類似query中的分組依據(jù)
參數(shù):由三大部分組成
第一部分:
第一個參數(shù):表,是需要匯總的表,可以是維度表也可以是事實表,常用的是事實表,因為基于后面分組列的需求,如果事實表的話,可以引用任何有關(guān)聯(lián)的維度表中的列進(jìn)行分組,如果是維度表,則只能引用該表內(nèi)的列
第二部分:
第二個參數(shù):可選項,提取該列的非重復(fù)值列表,分組用,可以使用多個列,用逗號分隔,返回多個列的有效組合
第三部分:
第三個參數(shù):匯總列的列名,必須用雙引號
第四個參數(shù):匯總列依據(jù)的表達(dá)式
第三參數(shù)和第四參數(shù)后面跟多個列名和表達(dá)式時,它會返回這些列的有效組合
SUMMARIZE函數(shù)如果只用前兩個參數(shù)會返回該列的不重復(fù)列表,其功能與VALUES相似。
根據(jù)參數(shù)分割分別舉例:
①SUMMARIZE函數(shù)使用第一個參數(shù)和第二個參數(shù)時:
函數(shù)編寫:
SUMMARIZE(FILTER('銷售數(shù)據(jù)表','銷售數(shù)據(jù)表'[產(chǎn)品ID]=3001),'門店信息表'[門店])
我這塊是因為方便下面舉例篩選了產(chǎn)品ID為3001的,結(jié)果跟SUMMARIZE('銷售數(shù)據(jù)表''門店信息表'[門店])是一樣的,返回結(jié)果只有一列產(chǎn)品ID為3001的非重復(fù)門店表:

第二參數(shù)使用多個列,用逗號分隔,返回多個列的有效組合
如:根據(jù)年份和門店匯總一張表
函數(shù)編寫:
SUMMARIZE(FILTER('銷售數(shù)據(jù)表','銷售數(shù)據(jù)表'[產(chǎn)品ID]=3001),'日歷表'[年],'門店信息表'[門店])

②SUMMARIZE函數(shù)使用四個參數(shù)時:
如:求每年各門店的銷售量和銷售額
函數(shù)編寫:
SUMMARIZE(FILTER('銷售數(shù)據(jù)表','銷售數(shù)據(jù)表'[產(chǎn)品ID]=3001),'日歷表'[年],'門店信息表'[門店],"銷售量",[銷售量],"銷售額",[銷售額])

這個函數(shù)常用的方式就是這樣,當(dāng)然也有高級功能,使用rollup和rollupgroup參數(shù),分別計算總計和小計,兩個函數(shù)都是在第二參數(shù)上增加的,結(jié)果都是一樣的,返回小計和總計:
函數(shù)編寫:
SUMMARIZE(FILTER('銷售數(shù)據(jù)表','銷售數(shù)據(jù)表'[產(chǎn)品ID]=3001),ROLLUP('日歷表'[年],'門店信息表'[門店]),"銷售量",[銷售量],"銷售額",[銷售額])
如果在ROLLUPGROUP外面增加ROLLUP則是直接算出總計。
2.SUMMARIZECOLUMNS函數(shù)?
語法:SUMMARIZECOLUMNS([分組列],匯總列名,匯總表達(dá)式,...)
這個函數(shù)跟SUMMARIZE功能是一樣的,此函數(shù)第一個參數(shù)不用寫表,直接是第二參數(shù)以后的參數(shù),是SUMMARIZE的升級版
舉例:
SUMMARIZECOLUMNS('日歷表'[年],'門店信息表'[門店],"銷售量",[銷售量],"銷售額",[銷售額])結(jié)果跟上面②中寫法是一樣的
3.ADDCOLUMNS函數(shù)
語法:ADDCOLUMNS(原表,增加的列名1,增加的列值1,增加的列名2,增加的列值2,...)
參數(shù):
第一個參數(shù)是表,原表
第二個參數(shù)是增加的列名,必須使用雙引號
第三個參數(shù)是增加的列值,列表達(dá)式
返回:表(包含原始表和增加的列的新表)
注意:ADDCOLUMNS是在原表的基礎(chǔ)上增加新列匯總,返回一個新表
比如我在省份表中增加一列銷售量
函數(shù)編寫:
ADDCOLUMNS('地域表',"銷售量",[銷售量])

再看另一種寫法:
ADDCOLUMNS('地域表',"銷售量",SUM('銷售數(shù)據(jù)表'[數(shù)量]))

結(jié)果返回不同,這是因為ADDCOLUMNS會受篩選上下文影響,所以增加的表達(dá)式列值需用度量值,其實在寫DAX函數(shù)時,為了避免因上下文影響,盡量引用書寫好的度量值,當(dāng)然如果改下公式為ADDCOLUMNS('地域表',"銷售量",CALCULATE(SUM('銷售數(shù)據(jù)表'[數(shù)量]))),結(jié)果也是一樣的,CALCULATE函數(shù)會將行上下文轉(zhuǎn)化成篩選上下文。
如果解決了您的困惑,動動發(fā)財小手點個贊吧,我是Sugargl,歡迎關(guān)注我,88