专栏/Power BI之DAX神功:第4卷第21回 GROUPBY函数与SUMMARIZE的区别

Power BI之DAX神功:第4卷第21回 GROUPBY函数与SUMMARIZE的区别

2021年12月29日 05:41--浏览 · --点赞 · --评论
孙兴华zz
粉丝:27.0万文章:503

一、先体验一下GROUPBY

语法:GROUPBY(表,按哪个列分组新列名生成新列的表达式)

// 前2个参数是必需的,后2个参数可选,后3个参数可重复

GROUPBY仅凭前两参数就可以生成一张表,如果我想对生成的这张表做点什么,例如:张三、李四、王五的平均分,例如2020、2021年AB商品总销量与总销售

【1】CURRENTGROUP函数

CURRENTGROUP 只能用于 GROUPBY 函数中生成新列的表达式中使用,无参数。

CURRENTGROUP()就代表GROUPBY前两参数生成的那张表。

当我们对这张表操作时只能迭代这张表,要使用X系列的迭代函数,例如:SumX、AverageX、MaxX等等

【2】对单列分组

表名:Sheet1

返回结果

【3】对多列分组

表名:Sheet2

返回结果:

【4】你的疑问

这个功能矩阵就可以实现,为什么要这么麻烦新建表呢?

因为这个表不是直接拿来用的,将做为参数嵌套在其它函数中使用。

二、AddColumns+Summarize也可以实现

我们以Sheet2为列:

返回结果:

是不是与GROUPBY函数生成的表一样?

现在我们对SUMMARIZE函数生成的表添加列就可以了:

Ps: 也可以将calculatetable函数替换成RELATEDTABLE函数,详见《DAX神功》第2卷第2回

返回结果:

三、GROUPBY与SUMMARIZE函数比较

【1】GROUPBY与SUMMARIZE都对第1参数扩展表执行分组

可以使用扩展表中包含的任何列做分组参数。例如下图,通过店号建立一对多关系

扩展表原理详见《DAX神功》第3卷第12回

返回结果:

【2】summarize可转换上下文,而GROUPBY只是迭代表

用summarize或Addcolumns新增加的列,又名派生列。

原表中没有的列叫派生列,原表中有的列叫原生列。

虽然我们没有提到这个名词,但是新增列的工作我们经常在做,关于派生列(新增列)数据沿袭问题,我们也在《DAX神功》第2卷第21回中做了详细讲解。

但是这样操作会降低速度,我们平时很少在Summarize中直接新建派生列,而是使用AddColumns+Summarize方式提高速度,但是AddColumns要使用Calculate实现筛选。因为summarize本身可转换上下文。

反观,GROUPBY只是通过 CURRENTGROUP 函数对分组后的每一行进行迭代。

【3】性能警告

GROUPBY会影响性能,主要取决于列的基数,如果列基数比较大,不建议使用GROUPBY函数,就是说有100万行数据不可怕,分组后就是张三、李四,那是OK的。可怕的是分组后有30万人,这时我建议还是别用了,等将来PC性能提高了你使用速度慢的可能也不明显了。

关于列基数,请详见《DAX神功》第4卷第9回

四、GROUPBY 可以用于对派生列分组聚合

在上面我们讲到了AddColumns和Summarize都可以生成派生列,Groupby的优势是对派生列再分组。如下表,学号之间建立一对多关系

【1】先通过summarize分组

【2】通过Addcolumns新建派生列

【3】如果我对评价列再分组,求及格与不及格的平均分

以下两种写法都是错误的!

出错理由都是找不到[平均分]这个列,因为[平均分]本身就是派生列。这时使用GROUPBY就可以了。神奇吧!

返回结果:

五、GROUPBY 空行和空值问题

如下表所示,通过学号建立关系:

【1】因为一对多关系不符合实时参照完成性产生的空行

例如,1端表主键元素个数小于多端表外键元素个数,这时必然会产生空行,可以通过filter筛选掉空行。

返回结果:

去掉空行:

返回结果:

【2】因为筛选产生的空值【小心分母问题】

当分数不到60分时,不参加求平均,这时,A和C同学只有一科成绩,B同学因为两科都不足60分所以返回空。

我们《火力全开》第12课 讲IF函数时,提到第三参数省略时,他返回Blank()

返回结果:

友情提示:这时你千万别听从国外文献上翻译过来的文章上面提到的方法,将第3参数改成0,这是一个小学知识。

if('成绩表'[分数]>60,'成绩表'[分数])  // 凡是不满60分的成绩不参加平均分计算,分母减少。

if('成绩表'[分数]>60,'成绩表'[分数],0) // 凡是不满60分的成绩当成0来参加平均分计算 ,分母不减少。

返回结果:因为分母没有减少,返回Blank()时原本是77和88,现在变成了77/2=38.5、88/2=44

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

《DAX神功番外篇》文字版合集:

https://www.bilibili.com/read/readlist/rl478271

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110

投诉或建议

玻璃钢生产厂家商场美陈 新年别墅雕塑玻璃钢图片深圳节庆商场美陈订购玻璃钢仿铜雕塑工艺是什么四川装饰商场美陈供应商商场柱子创意美陈内蒙玻璃钢雕塑定制厂怀化玻璃钢雕塑定做湖南动漫玻璃钢雕塑菏泽玻璃钢人物景观雕塑公司上海兵马俑跪姿玻璃钢雕塑浙江主题商场美陈研发公司不锈钢水景玻璃钢雕塑定制厂家聊城玻璃钢马雕塑德阳玻璃钢海豚雕塑铜川城市玻璃钢雕塑定做景洪玻璃钢动物雕塑泉州玻璃钢海豚雕塑厂家佛山定做玻璃钢卡通雕塑大象玻璃钢雕塑公司哪家好玻璃钢雕塑有裂痕组合式玻璃钢雕塑摆件销售厂家玻璃钢仿真水果雕塑公司玻璃钢雕塑有哪些模具合肥玻璃钢雕塑制作厂玻璃钢ip主题雕塑重庆玻璃钢卡通雕塑厂家供应玻璃钢浮雕户外不锈钢雕塑定做玻璃钢雕塑复活节岛雕像深圳超市商场美陈售价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化