Power Query学习之Table.Group第四、五参数

本文详细解释了Table.Group函数的groupKind和comparer参数如何影响分组行为,以及它们在全局和局部分组中的应用,避免了重复分组错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数原型:Table.Group(table as table, key as any, aggregatedColumns as list, optional groupKind as nullable number, optional comparer as nullable function) as table

案例数据原表

一、可选参数分组类型groupKind对分组的影响

表示分组是局部分组还是全局分组

当groupKind=0时,不相连的”语文“分两组

当groupKind=1时,不相连的”语文“分到一组上。

二、第五个参数 optional comparer是一个可选函数类型参数,有2个参数通常用(x,y)=>Number.From()固定格式来处理所判断后的条件值。x表示分组的第一个记录,y表示剩余未分组的记录(不包括x记录)。现在讨论第五参数值,如果第五个参数为非零分组结束,如果为0那么归入分组。为了方便我们先将第四个参数设置为0,后面再讨论第四个参数为1时对第五个参数的影响。

我们先让第五个参数返回值恒为1既(x,y)=> 1,就起不到分组的作用了,当给定x值时,(x,y)=> 1都为1,就建立分组结束新建分组,既每条记录开始分组就结束了(每条记录一个分组)。

再让第五个参数返回值恒为0既(x,y)=> 0,也起不到分组的作用了,当给定x值时,(x,y)=> 0都为0,就归入分组,既所有记录都归入分组。

三、groupKind参数对第五个参数的影响

前面已经举过groupKind=0时的例子,如果groupKind=1分组会受到影响,如果groupKind=1,(x,y)=> 1,那么按分组每个记录一个分组,但是指定全局分组,那么在新分组的表中会出现一样的分组导致错误。数学只有1条记录,不会出现错误。

如果groupKind=1,(x,y)=> 0,所有记录分配到一个组中,没有相同的分组记录,也不会出现错误。

四、x,y的关系

为了避免出现错误,将groupKind=0,对x,y关系进行讨论。

先单独看看x,x表示新建分组的第一条记录,开始分组第一条记录x="语文",(x,y)=>Number.From(x="语文")返回值为1,结束分组;同理第二条语文也分为一组;第三条x=数学,对于这条x=”语文“返回值为0,后面所有的记录都归入数学这一组中,包括最后一条语文。

y与x的关系

x是新建组的第一条,y是除x外剩余的记录,当第一条x=语文,判断第二条语文是否加入第一条的分组时,(x,y)=> Number.From(y="语文")函数返回1,结束分组,新建第二个语文分组。当第二个语文分组建立起来后,y=“数学”“英语”根据(x,y)=> Number.From(y="语文")函数返回0归入第二分组中;如果y包含x,那么第二条语文时,(x,y)=> Number.From(y="语文")返回的值为1,就应该结束分组,所以y不包含x;当碰到第三个语文(x,y)=> Number.From(y="语文")函数返回1结束分组,新建第三个分组语文。从该案例也可以证明y是除x以外的剩余记录。

将groupKind=1时,结果出现重复的语文分组错误。

再举一个y不包含x的例子,compare函数Number.From(x = "语文" and y="语文"),判断第一条语文记录时,返回1,x是第一条语文记录,y是第二条语文记录,结束分组;判断第二条语文时,如果y包含x那么compare函数返回1,应该结束分组,然而并没有结束分组;如果y不包含x,x=”语文",y="数学",返回0,加入分组。

### Power Query 函数使用教程与示例 #### 什么是 Power Query 函数Power Query 中的函数是一种可重复使用的逻辑单元,用于执行特定的操作并返回结果。它们可以接受零个或多个参数,并通过 `let` 和 `in` 关键字定义其行为[^1]。 --- #### 如何创建自定义函数? 要创建一个自定义函数,可以通过以下方式实现: 1. **新建空查询** 在 Power Query 编辑器中,选择“新建源”,然后选择“空白查询”。 2. **打开高级编辑器** 右键单击新创建的空白查询,在上下文菜单中选择“高级编辑器”。这将允许您手动编写 M 语言代码。 3. **定义函数结构** 在高级编辑器中输入如下代码模板: ```m (paramName as type) => let result = Expression(paramName) in result ``` 4. **保存并命名函数** 完成函数定义后,关闭高级编辑器并将该查询重命名为具有描述性的名称以便于识别。 5. **调用自定义函数** 创建另一个查询来测试您的自定义函数。只需像其他标准操作一样将其作为步骤应用即可[^2]。 以下是具体实例演示如何构建和利用简单的加法运算函数: ```m // 自定义加法函数 AddNumbers AddNumbers = (num1 as number, num2 as number) => let SumResult = num1 + num2 in SumResult; // 调用此函数的例子 ExampleUsage = let ResultOfSum = AddNumbers(5, 7) in ResultOfSum; ``` 上述例子展示了如何定义名为 `AddNumbers` 的简单二元算术函数以及它的实际运用场景。 --- #### 复杂案例:模拟 SQL 开窗功能 假设我们希望基于金额字段 (`amount`) 对数据集中的记录进行分组排序,则可通过组合 `Table.Group`, `Table.Sort` 方法达成目标。下面给出一段完整的解决方案代码片段: ```m SortedSummaryTables = Table.Group(SourceData, {"Category"}, { {"GroupedAndSorted", each Table.Sort(_, {{"Amount", Order.Ascending}})} }) ``` 这里的关键在于正确设置聚合后的子表排序规则 `{ "Amount", Order.Ascending }` 来指定升序排列依据[^3]。 --- ### 总结 通过对以上内容的学习,您可以掌握基本的 Power Query 函数开发流程及其典型应用场景。无论是处理日常业务需求还是复杂的数据转换任务,合理运用内置及自制的功能模块都将极大提升工作效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值