今天简单说下summarize,summarizecolumns,sddcolumns这三个DAX函数的功能及用法:
1.SUMMARIZE函数
语法:SUMMARIZE(表,[分组列],汇总列名,汇总表达式,...)
作用:自动计算并返回分组的汇总表,类似query中的分组依据
参数:由三大部分组成
第一部分:
第一个参数:表,是需要汇总的表,可以是维度表也可以是事实表,常用的是事实表,因为基于后面分组列的需求,如果事实表的话,可以引用任何有关联的维度表中的列进行分组,如果是维度表,则只能引用该表内的列
第二部分:
第二个参数:可选项,提取该列的非重复值列表,分组用,可以使用多个列,用逗号分隔,返回多个列的有效组合
第三部分:
第三个参数:汇总列的列名,必须用双引号
第四个参数:汇总列依据的表达式
第三参数和第四参数后面跟多个列名和表达式时,它会返回这些列的有效组合
SUMMARIZE函数如果只用前两个参数会返回该列的不重复列表,其功能与VALUES相似。
根据参数分割分别举例:
①SUMMARIZE函数使用第一个参数和第二个参数时:
函数编写:
SUMMARIZE(FILTER('销售数据表','销售数据表'[产品ID]=3001),'门店信息表'[门店])
我这块是因为方便下面举例筛选了产品ID为3001的,结果跟SUMMARIZE('销售数据表''门店信息表'[门店])是一样的,返回结果只有一列产品ID为3001的非重复门店表:
第二参数使用多个列,用逗号分隔,返回多个列的有效组合
如:根据年份和门店汇总一张表
函数编写:
SUMMARIZE(FILTER('销售数据表','销售数据表'[产品ID]=3001),'日历表'[年],'门店信息表'[门店])
②SUMMARIZE函数使用四个参数时:
如:求每年各门店的销售量和销售额
函数编写:
SUMMARIZE(FILTER('销售数据表','销售数据表'[产品ID]=3001),'日历表'[年],'门店信息表'[门店],"销售量",[销售量],"销售额",[销售额])
这个函数常用的方式就是这样,当然也有高级功能,使用rollup和rollupgroup参数,分别计算总计和小计,两个函数都是在第二参数上增加的,结果都是一样的,返回小计和总计:
函数编写:
SUMMARIZE(FILTER('销售数据表','销售数据表'[产品ID]=3001),ROLLUP('日历表'[年],'门店信息表'[门店]),"销售量",[销售量],"销售额",[销售额])
如果在ROLLUPGROUP外面增加ROLLUP则是直接算出总计。
2.SUMMARIZECOLUMNS函数
语法:SUMMARIZECOLUMNS([分组列],汇总列名,汇总表达式,...)
这个函数跟SUMMARIZE功能是一样的,此函数第一个参数不用写表,直接是第二参数以后的参数,是SUMMARIZE的升级版
举例:
SUMMARIZECOLUMNS('日历表'[年],'门店信息表'[门店],"销售量",[销售量],"销售额",[销售额])结果跟上面②中写法是一样的
3.ADDCOLUMNS函数
语法:ADDCOLUMNS(原表,增加的列名1,增加的列值1,增加的列名2,增加的列值2,...)
参数:
第一个参数是表,原表
第二个参数是增加的列名,必须使用双引号
第三个参数是增加的列值,列表达式
返回:表(包含原始表和增加的列的新表)
注意:ADDCOLUMNS是在原表的基础上增加新列汇总,返回一个新表
比如我在省份表中增加一列销售量
函数编写:
ADDCOLUMNS('地域表',"销售量",[销售量])
再看另一种写法:
ADDCOLUMNS('地域表',"销售量",SUM('销售数据表'[数量]))
结果返回不同,这是因为ADDCOLUMNS会受筛选上下文影响,所以增加的表达式列值需用度量值,其实在写DAX函数时,为了避免因上下文影响,尽量引用书写好的度量值,当然如果改下公式为ADDCOLUMNS('地域表',"销售量",CALCULATE(SUM('销售数据表'[数量]))),结果也是一样的,CALCULATE函数会将行上下文转化成筛选上下文。
如果解决了您的困惑,动动发财小手点个赞吧,我是Sugargl,欢迎关注我,88