|
正在学习Power Query BI,第一次接触Table.Group函数,看了微软的在线解释,居然看不懂!
Table.Group函数共有5个参数,前3个参数很容易掌握,第4/5参数,微软的解释是:
“此外,还可以指定 groupKind 和 comparer。
如果数据已经按键列排序,则可以提供 GroupKind.Local 的 groupKind。 在某些情况下,这可能会提高分组的性能,因为具有给定键值集的所有行都被认为是连续的。
传递 comparer 时,请注意,如果它将不同的键视为相等,则可以将一行置于其键与其自身不同的组中。”
反复看也没搞懂意思,随后查看GroupKind.Local的解释,
“GroupKind.Local,值0,本地组由输入表中具有相同键值的连续行序列组成。GroupKind.Global,值1,全局组由输入表中具有相同键值的所有行组成。”
总算明白第4参数的意思。
接着,对第4、第5参数,设计了若干代码研究(组合第4参数、第5参数,下面是其中的2个代码):
- x = Table.Group(
- 筛选的行,//参数1
- " Level",//参数2
- {"a", each List.Count(_)},//参数3
- 0 //参数4,连续行或所有行分组
- )
复制代码- x = Table.Group(
- 筛选的行,//参数1
- " Level",//参数2
- {"a", each List.Count(_)},//参数3
- 0, //参数4,连续行或所有行分组
- (x,y)=>Number.From(y=0) //参数5,把y<>0的行,归并到y=0的组
- )
复制代码
初步明白了最后2个参数的含义,又拆解了2楼的代码进行学习:
- 分组的行 = Table.Group(
- 筛选的行,
- " Level",
- {{
- "a",
- each
- Table.FromRows(
- List.Transform(
- {0..
- if List.Count(Table.ToRows(Table.Skip(_)))=0 then
- 0
- else
- List.Count(
- Table.ToRows(Table.Skip(_))
- )-1
- },
- (m)=> try Table.ToRows(Table.FirstN(_,1)){0} & Table.ToRows(Table.Skip(_)){m}
- otherwise Table.ToRows(Table.FirstN(_,1)){0}
- )
- )
- }},
- 0,
- (x,y)=>Number.From(y=0)
- ),
复制代码 感谢2楼大佬!这回看懂了代码,结合自己理解,改动了其中一处,把List.Count换成Table.RowCount,可以少嵌套一个函数Table.ToRows:
- 分组的行1 = Table.Group(
- 筛选的行,
- " Level",
- {{
- "a",
- each
- Table.FromRows(
- List.Transform(
- {0..
- if Table.RowCount(Table.Skip(_))=0 then
- 0
- else
- Table.RowCount(
- Table.Skip(_)
- )-1
- },
- (m)=> try Table.ToRows(Table.FirstN(_,1)){0} & Table.ToRows(Table.Skip(_)){m}
- otherwise Table.ToRows(Table.FirstN(_,1)){0}
- )
- )
- }},
- 0,
- (x,y)=>Number.From(y=0)
- ),
- x = Table.Group(
- 筛选的行,//参数1
- " Level",//参数2
- {"a", each List.Count(_)},//参数3
- 0 //参数4
- ),
复制代码
|
|