Power Query 中 Table.Group 的一些个人理解

         M 函数 Table.Group 对应 Power Query 主页上可视化工具栏中常用的一个功能 - 分组依据。

        本次介绍用的数据源如下:

        分组依据最简单的用法就是选中分组列,然后再选择分组后的聚合方式。例如下面用的选中姓名列,然后对分组内的行进行计数。

        结果如下:

        以上是 Table.Group 最简单也是最常用的使用方法,Table.Group(源, {"姓名"}, {{"计数", each Table.RowCount(_), Int64.Type}}) 使用了前 3 个参数,分别是要分组的表,按什么列分组,分组后在组内的聚合方式。

        下面介绍 Table.Group 第 4 和第 5 参数

        第 4 参数定义分组是全局分组还是局部分组(个人理解全局就是对分组列进行升降序后再执行从上往下的分组,局部分组就是按照现有各行的先后顺序执行分组),其中 1 代表 GroupKind.Global 也就是全局分组,0 代表 GroupKind.Local 也就是局部分组。

        第 5 参数作用就是通过当前分组与行上下文(如果有 DAX 的相关知识,应该不难理解,首先分组肯定是一个从上往下的迭代过程,也因为有迭代就可以用行上下文去描述迭代过程,在这里为了更加方便理解)中的分组列相比较的结果去判定行上下文是否属于当前组,或者以行上下文所组成的分组列组合作为新一组的组标头。PQ是使用数值来存储两个数比对结果。本文讲解将会使用比较器函数 Comparer.Ordinal 作为第5参数。

        介绍完就开始改写以上例子

当然交换 Comparer.Ordinal 不会影响局部分组的结果。因为不管 行上下文[姓名] 大于(1) 当前组[姓名] 还是 小于(-1) 都不会分到同一组,所以局部分组的结果是一样的。

        迭代分组过程如下:

        再举一个例子:

        交换第 5 参数中的比较结果不会改变分组的结果,

        局部分组结果:这里有一点绕就是分组的列与判定是否产生新组的条件是不一样的。这里判定是否需要产生新组的条件是用 "A" 去比较判定的,但是产生的新组标头又是由当前组来产生。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值