PowerBI/DAX之理解GROUPBY函数

GROUPBY函数与SUMMARIZE函数非常类似,都是用来做分组聚合的函数,但GROUPBY函数可能更符合平时所理解的分组操作。

因为GROUPBY函数的派生列参数中不提供任何计值上下文,它使用CURRENTGROUP函数来指代被分组的表在当前分组区间内的行,然后可以使用其他聚合函数对其进行聚合,这与PowerQuery中的分组操作基本一致,所以GROUPBY函数可能更符合平时所理解的分组操作。


语法和作用

语法:

GROUPBY (<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)

作用:对第一参数的表按指定的分组列进行分组,返回分组列的不重复组合形成的表,并可以往该表中添加派生列。

参数说明:

1、table,要进行分组的表,任意返回表的表达式

2、groupBy_columnName,要进行分组的列,必须来自第一参数的表或其扩展表

3、name,添加的派生列的列名

4、expression,添加的派生列的表达式,必须是对CURRENTGROUP函数返回的当前分组区间的表的聚合,并且不能嵌套

注意事项:

1、分组列必须来自第一参数的表,否则会报错。

2、若第一参数的表存在扩展表,那么第二参数的分组列可以是其扩展表上的任意列。

3、派生列的表达式中,CURRENTGROUP函数必须要直接作为聚合函数的第一参数,其支持的聚合函数有:AVERAGEX、COUNTAX、COUNTX、GEOMEANX、MAXX、MINX、PRODUCTX、STDEVX.S、STDEVX.P、SUMX、VARX.S、VARX.P


辅助理解的例子

首先,用到的数据源只有一张表,如下图所示:

img

1、不添加派生列,使用GROUPBY函数返回分组列的不重复组合形成的表,如下图所示:

由于没有添加派生列,此时GROUPBY函数的行为就是从第一参数的表中提取分组列参数所指定的字段,然后进行去重。为方便理解,如果用其他函数来表达的话,其行为等价于以下表达式:

GROUPBY('订单','订单'[地区],'订单'[产品])

等价于:

DISTINCT(SELECTCOLUMNS('订单','订单'[地区],'订单'[产品]))

2、GROUPBY函数的派生列参数中不提供任何计值上下文,它使用CURRENTGROUP函数来指代被分组的表在当前分组区间内的行,然后可以使用其支持的聚合函数对其进行迭代聚合,如下图所示:

其计值流程如下:

3、GROUPBY函数的派生列参数中,CURRENTGROUP函数必须要直接作为聚合函数的第一参数,否则会报错,如下图所示:

4、不支持对CURRENTGROUP函数返回的表进行行上下文转换,如下图所示:

5、由于GROUPBY函数可以使用CURRENTGROUP函数来获取当前分组区间的数据,所以特别适合要对无数据沿袭的派生列进行聚合的场景,而这是SUMMARIZE函数所做不到的,比如以下案例:

由于最大销量这个派生列在模型中不存在,所以SUMMARIZE函数的派生列参数中是引用不到它的,因此也就无法进行下一步的操作。而这时改用GROUPBY函数就可以很容易的实现这个目的,如下图所示:


总结

GROUPBY函数和SUMMARIZE函数都能进行分组聚合,但GROUPBY函数的行为更符合平时所理解的分组操作,因此特别适合那些对派生列指标进行聚合的场景,而这是SUMMARIZE函数所做不到的。

内容概要:本文详细介绍了名为MoSca的系统,该系统旨在从单目随意拍摄的视频中重建和合成动态场景的新视角。MoSca通过4D Motion Scaffolds(运动支架)将视频数据转化为紧凑平滑编码的Motion Scaffold表示,并将场景几何和外观与变形场解耦,通过高斯融合进行优化。系统还解决了相机焦距和姿态的问题,无需额外的姿态估计工具。文章不仅提供了系统的理论背景,还给出了基于PyTorch的简化实现代码,涵盖MotionScaffold、GaussianFusion、MoScaSystem等核心组件。此外,文中深入探讨了ARAP变形模型、2D先验到3D的提升、动态高斯表示、相机参数估计等关键技术,并提出了完整的训练流程和性能优化技巧。 适用人群:具备一定计算机视觉和深度学习基础的研究人员和工程师,特别是对动态场景重建和新视角合成感兴趣的从业者。 使用场景及目标:①从单目视频中重建动态场景的新视角;②研究和实现基于4D Motion Scaffolds的动态场景表示方法;③探索如何利用预训练视觉模型的先验知识提升3D重建质量;④开发高效的动态场景渲染和优化算法。 其他说明:本文提供了详细的代码实现,包括简化版和深入扩展的技术细节。阅读者可以通过代码实践加深对MoSca系统的理解,并根据具体应用场景调整和扩展各个模块。此外,文中还强调了物理启发的正则化项和多模态先验融合的重要性,帮助实现更合理的变形和更高质量的渲染效果。
<think>好的,我现在需要帮助用户解决Power BI中GROUPBY函数的使用和示例问题。首先,我需要回忆GROUPBY函数的基本知识。GROUPBYDAX中用于分组数据,类似于SQL中的GROUP BY,但可能有不同的语法和功能。用户可能想了解如何正确使用这个函数,以及实际应用的例子。 接下来,我需要确认GROUPBY的语法结构。根据记忆,GROUPBY函数的语法通常是GROUPBY(表, 分组列, 表达式),其中表达式可以是新列的定义。例如,可能需要使用CURRENTGROUP()来处理当前分组的行。需要验证这一点,确保语法正确,避免误导用户。 然后,我应该考虑用户可能遇到的问题。比如,GROUPBY与SUMMARIZE的区别,因为这两个函数都用于分组。可能需要解释GROUPBY通常与迭代函数如SUMX结合使用,而SUMMARIZE可以直接生成汇总表。同时,用户可能在处理多表关联时使用GROUPBY,特别是涉及跨表计算的时候。 接下来是示例部分。需要提供简单的示例,比如按类别分组计算销售额总和,以及更复杂的示例,比如涉及关联表的计算。例如,使用GROUPBY和CALCULATE来引用其他表的列,或者计算每个组的行数。同时,提醒用户注意性能优化,比如避免在大型数据集上频繁使用,或者使用变量简化公式。 还需要检查是否有常见的错误,比如忘记处理关联表时的上下文转换,或者错误使用聚合函数。比如,在GROUPBY的表达式里直接使用SUM可能不会得到预期的结果,而是需要使用迭代器函数如SUMX。 最后,生成相关问题,帮助用户进一步学习。比如,GROUPBY与SUMMARIZE的区别,性能优化技巧,处理多表关联的方法,以及解决常见错误的方法。这些问题应该覆盖用户可能遇到的后续疑问,确保他们能全面理解和应用GROUPBY函数。 现在,我需要整理这些思路,用清晰的结构和正确的中文表达出来,确保符合用户的要求,包括行内公式的格式和引用标记。同时,验证所有DAX语法的正确性,避免提供错误的信息。如果有不确定的地方,可能需要查阅官方文档或可靠资源确认,但根据现有知识进行回答。</think>### Power BI中GROUPBY函数的使用方法及示例 #### 一、GROUPBY函数基础 GROUPBYDAX中用于分组计算的核心函数,其语法为: $$GROUPBY(表名, 分组列1, 分组列2, ..., <表达式1>, <表达式2>, ...)$$ 其中: - **表名**:需要处理的基础表 - **分组列**:可指定多个分组依据列(支持跨表列引用) - **表达式**:使用CURRENTGROUP()函数引用当前分组内容进行计算,例如:`"总销售额", SUMX(CURRENTGROUP(), [单价]*[数量])` #### 二、典型应用场景 1. **简单分组统计** ```DAX 销售统计 = GROUPBY( Sales, Sales[产品类别], "总销量", SUMX(CURRENTGROUP(), Sales[数量]) ) ``` 此公式实现按产品类别分组统计销量总和$S=\sum_{i=1}^{n} q_i$[^1] 2. **跨表关联计算** ```DAX 带产品信息的统计 = GROUPBY( Sales, Products[产品类别], -- 从关联表Products获取分类 "平均单价", AVERAGEX(CURRENTGROUP(), RELATED(Products[单价])) ) ``` 3. **复合分组指标** ```DAX 订单分析 = GROUPBY( Orders, Orders[地区], Orders[年份], "订单数", COUNTROWS(CURRENTGROUP()), "最大金额", MAXX(CURRENTGROUP(), [订单金额]) ) ``` #### 三、性能优化建议 1. 优先使用SUMMARIZE进行简单分组(当不需要跨表计算时) 2. 对大型数据集使用变量存储中间结果 ```DAX 优化示例 = VAR TempTable = FILTER(Sales, Sales[金额] > 1000) RETURN GROUPBY(TempTable, ...) ``` 3. 避免在计算列中使用GROUPBY(可能导致性能下降) #### 四、常见错误解决方案 1. **上下文丢失问题**:在需要保留筛选上下文时,应结合CALCULATE使用 ```DAX 正确用法 = GROUPBY( Sales, Sales[地区], "加权销售额", SUMX(CURRENTGROUP(), CALCULATE([单价] * [数量])) ) ``` 2. **多表关联陷阱**:确保相关表已建立正确关系,使用RELATED函数引用关联字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值