rollup函数_值得你深入了解的函数:SUMMARIZE

SUMMARIZE函数非常强大,掌握以后表面上看也非常好用,所以我专门写篇文章介绍一下这个函数,至于是否一定要使用该函数,请看完再决定。


SUMMARIZE,单纯从英文语义上看,是汇总、总结的意思,而它的功能,确实也就是汇总,它可以返回一个汇总表。

你可以从官方的文档中查询到该函数的说明,

https://docs.microsoft.com/en-us/dax/summarize-function-dax

它的参数非常复杂和难以理解,参数很多,并且有些参数都是可选的、可重复的。直接靠文档不容易理解,我们可以根据实例来理解它的用法。

它的参数很多是可选的,让我们按参数由少到多逐步看看它的功能。

01 | 提取不重复值

以下表达式,会提取不重复的产品名称:

维度表1 = SUMMARIZE('订单','订单'[产品名称])

26dec38ec9acaf43a388e051cb811472.png

SUMMARIZE函数的第一个参数是表,第二个参数是列时,会返回该列的不重复列表,其功能与VALUES相似。

不过SUMMARIZE函数还可以继续添加第三个、第四个参数列…,看以下表达式的返回结果,

维度表2 = SUMMARIZE('订单','订单'[产品名称], '日期表'[年度])

c812f71cdfa0f830c9b2850e468efba8.png

SUMMARIZE参数表后面跟多个列时,它会返回这些列的有效组合,类似于笛卡尔积,与笛卡尔积稍微不同的是,如果在订单表中不存在这个组合,则返回的列表中,就不会出现这一行。

举个例子,假如2016年如果没有卖过智能手表,则上述的表达式不会有2016 智能手表这一行。

02 | 返回汇总表

在上述表达式的基础上,我们继续添加参数如下:

汇总表1 = SUMMARIZE(
'订单',
'日期表'[年度],
'订单'[产品名称], "销售额合计",SUM('订单'[销售额])
)

10e860509841138346887de4692768eb.png

SUMMARIZE参数后面带上列名和表达式时,它会自动计算并返回分组的汇总表,这才是该函数的本质功能,也切合它的字面意义。

这个功能非常好用,也是我们使用它最普遍的地方。

03 | 返回带合计的汇总表

这是SUMMARIZE的高级功能,在上面的表达式中的分组列外面套一层ROLLUP,看看是什么效果?

汇总表2 = SUMMARIZE(
'订单', ROLLUP('日期表'[年度],'订单'[产品名称]),
"销售额合计",SUM('订单'[销售额])
)

c01e2a3ea7b107c0da89f9a3aab9ff5e.png

看到在汇总表的下面还多了几行合计数,这就是ROLLUP参数的作用。它只在SUMMARIZE内部使用,用于为子类别计算小计和总计

SUMMARIZE内部还可以使用一个参数是ROLLUPGROUP,使用ROLLUPGROUP代替上面表达式中的ROLLUP,可以返回相同的结果。

不过如果在上面表达式ROLLUP里面再套一层ROLLUPGROUP,

汇总表3 = SUMMARIZE(
'订单', ROLLUP(ROLLUPGROUP('日期表'[年度],'订单'[产品名称])),
"销售额合计",SUM('订单'[销售额])
)

2779132de8a015e00ddb12610fe2e0fb.png

分组的小计不见了,只返回了总计, ROLLUP和ROLLUPGROUP组合可以避免出现小计,而只返回总计。这样使汇总表看起来更像是Excel中的透视表。

关于ROLLUP和ROLLUPGROUP参数,其实它们的合计功能并不常用,但是却导致很多人觉得SUMMARIZE很复杂,你如果也是这种感觉,完全可以不用深究这两个参数的用法,因为你基本上也不会用到它们。


SUMMARIZE最常用的还是上面的第二种功能,让我们回头再来看看这种用法,返回一个汇总表确实非常实用,但是这是最优的写法吗?

使用ADDCOLUMNS返回汇总表

02示例中的表达式,还可以用以下表达式代替,

汇总表4 = ADDCOLUMNS(
SUMMARIZE(
'订单',
‘日期表'[年度],
'订单'[产品名称]
),
"销售额合计",CALCULATE(SUM('订单'[销售额]))
)

即通过ADDCOLUMNS函数,在SUMMARIZE生成分组的基础上添加列,来计算销售额汇总,可以返回相同的结果,但是在性能上,要比单纯的使用SUMMARIZE更优。

SUMMARIZE函数由于性能和内部兼容性等方面的原因,并不建议使用它来进行汇总,可以使用上面的ADDCOLUMNS和SUMMARIZE组合来代替,另外还有个新函数性能更优:SUMMARIZECOLUMNS。

使用SUMMARIZECOLUMNS返回汇总表

依然是生成上面的汇总表,SUMMARIZECOLUMNS的写法:

汇总表5 = SUMMARIZECOLUMNS(
'日期表'[年度],
'订单'[产品名称],
"销售额合计",CALCULATE(SUM('订单'[销售额]))
)

是不是看起来更加简洁,它的第一个参数不再需要表,而是直接是分组列,实践上看,它的性能要优于ADDCOLUMNS和SUMMARIZE组合,当然也远优于SUMMARIZE,生成汇总表时建议直接用SUMMARIZECOLUMNS(关于性能,你可以使用DAX Studio进行测试)。

SUMMARIZECOLUMNS应该就是为了替代SUMMARIZE而出现的,它可以实现SUMMARIZE的功能;SUMMARIZE的内部参数,比如ROLLUPGROUP等,SUMMARIZECOLUMNS同样也有,并且还有更多其他内部参数可以调用,不过对于普通DAX使用者来说,可能并不会使用到,就不再介绍了,想深入理解的请自行查阅该函数文档。

总结

  • 提取多列的有效组合时,可以使用SUMMARIZE
  • 返回汇总表时,推荐使用SUMMARIZECOLUMNS
如果你刚开始接触Power BI,可在微信公众号后台回复"PowerBI",获取《七天入门PowerBI》电子书,帮你轻松学习、快速入门。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值