ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: shufeabb

[求助] 把下面的料号挪到后面

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-21 10:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一江春水1688 发表于 2023-10-21 00:22
二楼高手!

在office 2016的PQ中,使用二楼代码出错的原因是函数Table.Skip(_),需要2个参数,1个参数会 ...

正在学习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个代码):
  1.     x = Table.Group(
  2.         筛选的行,//参数1
  3.         "  Level",//参数2
  4.         {"a", each List.Count(_)},//参数3
  5.         0 //参数4,连续行或所有行分组
  6.     )
复制代码
  1.     x = Table.Group(
  2.         筛选的行,//参数1
  3.         "  Level",//参数2
  4.         {"a", each List.Count(_)},//参数3
  5.         0, //参数4,连续行或所有行分组
  6.         (x,y)=>Number.From(y=0) //参数5,把y<>0的行,归并到y=0的组
  7.     )
复制代码

初步明白了最后2个参数的含义,又拆解了2楼的代码进行学习:
  1.     分组的行 = Table.Group(
  2.         筛选的行,
  3.         "  Level",
  4.         {{
  5.             "a",
  6.             each
  7.                 Table.FromRows(
  8.                     List.Transform(
  9.                         {0..
  10.                         if List.Count(Table.ToRows(Table.Skip(_)))=0 then
  11.                             0
  12.                         else
  13.                             List.Count(
  14.                                 Table.ToRows(Table.Skip(_))
  15.                             )-1
  16.                         },
  17.                         (m)=> try Table.ToRows(Table.FirstN(_,1)){0} & Table.ToRows(Table.Skip(_)){m}
  18.                               otherwise Table.ToRows(Table.FirstN(_,1)){0}
  19.                     )
  20.                 )
  21.         }},
  22.         0,
  23.         (x,y)=>Number.From(y=0)
  24.     ),
复制代码
感谢2楼大佬!这回看懂了代码,结合自己理解,改动了其中一处,把List.Count换成Table.RowCount,可以少嵌套一个函数Table.ToRows
  1.     分组的行1 = Table.Group(
  2.         筛选的行,
  3.         "  Level",
  4.         {{
  5.             "a",
  6.             each
  7.                 Table.FromRows(
  8.                     List.Transform(
  9.                         {0..
  10.                         if Table.RowCount(Table.Skip(_))=0 then
  11.                             0
  12.                         else
  13.                             Table.RowCount(
  14.                                 Table.Skip(_)
  15.                             )-1
  16.                         },
  17.                         (m)=> try Table.ToRows(Table.FirstN(_,1)){0} & Table.ToRows(Table.Skip(_)){m}
  18.                               otherwise Table.ToRows(Table.FirstN(_,1)){0}
  19.                     )
  20.                 )
  21.         }},
  22.         0,
  23.         (x,y)=>Number.From(y=0)
  24.     ),
  25.     x = Table.Group(
  26.         筛选的行,//参数1
  27.         "  Level",//参数2
  28.         {"a", each List.Count(_)},//参数3
  29.         0 //参数4
  30.     ),
复制代码


TA的精华主题

TA的得分主题

发表于 2023-10-21 10:25 | 显示全部楼层

9楼高手代码,可以直接用在Excel 2016!
  1. let
  2.     源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  3.     筛选的行 = Table.SelectRows(源, each ([#"  Level"] <> null)),
  4.     分组的行 = Table.Group(筛选的行, "  Level", {"计数", each Table.ToRows(_)},0,(x,y)=>Number.From(y=0)),
  5.     列表组合 = Table.AddColumn(分组的行, "自定义", each if List.Count([计数])=1 then [计数] else List.Transform({1..List.Count([计数])-1},(x)=> [计数]{0}&[计数]{x})),
  6.     整理 = Table.Combine(List.Transform(列表组合[自定义],Table.FromRows))
  7. in
  8.     整理
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 21:58 , Processed in 0.029752 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表