ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 297|回复: 13

[讨论] 此题有没更简单的解法?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-17 20:26 | 显示全部楼层 |阅读模式
这是我用 PQ 做的。但是感觉 有点绕,请大神帮我看看,有没更好的解法?



如图。文件在下面。
捕获.PNG
捕获2.PNG

6-17-1.rar

18.18 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2024-6-17 20:57 | 显示全部楼层
6-17-1.rar (52.51 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-17 21:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-18 15:58 | 显示全部楼层
试试:


  1. let
  2.     源 = Excel.CurrentWorkbook(){[Name = "表1"]}[Content],
  3.     a = Table.AddColumn(源, "区域", each "区域"&Text.Upper(Text.Start([型号],1))),
  4.     b = Table.Combine(Table.Group(a, {"品名", "区域"}, {"a", each Table.AddIndexColumn(_,"id",1,1)})[a]),
  5.     c = Table.Pivot(b, List.Distinct(b[区域]), "区域", "型号")
  6. in
  7.     c
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-18 18:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-18 21:01 | 显示全部楼层
  1. let
  2.       源 = Excel.CurrentWorkbook(){[Name = "表1"]}[Content],
  3.       add = Table.AddColumn(源, "自定义", each "区域" & Text.Upper(Text.Start([型号], 1))),
  4.       lst = List.Sort(List.Distinct(add[自定义])),
  5.       pivot = Table.Pivot(add,lst, "自定义", "型号", each _),
  6.       combine = Table.CombineColumns(pivot,lst,each Table.FromColumns(_,lst),"a"),
  7.       展开 = Table.ExpandTableColumn(combine,"a",lst)
  8. in
  9.       展开
复制代码
另一种方法,谈不上简单

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-19 17:30 | 显示全部楼层
pq可以用list.accumulate一条出。
以下是其它软件实现的:
2024-06-19_172835.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-20 09:18 | 显示全部楼层
Fyi:两次分组得性能会比Table.Pivot透视速度要快。

  1. = let Grouped =  Table.Group(Source, "品名", {"t", each let add = Table.AddColumn(_, "区域",(x)=> "区域" & Text.Upper(Text.At(x[型号], 0))),
  2.                                                             grp = Table.Buffer(Table.Group(add, "区域", {"r", each [型号]}))
  3.                                                         in  Table.FromRows(List.Zip(grp[r]), grp[区域])}),
  4.       FromMany = Table.FromPartitions("品名", Table.ToRows(Grouped))
  5.   in  Table.ReorderColumns(FromMany,{"品名"} & List.Sort(List.RemoveLastN(Table.ColumnNames(FromMany), 1)))
复制代码
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-20 10:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
十三不是什三 发表于 2024-6-20 09:18
Fyi:两次分组得性能会比Table.Pivot透视速度要快。

十三先生666,下面是一样的,效率不影响。
fromrows(list1.zip,list2) --》 fromcolumns(list1.list2)
"品名"&sort--》list.sort(columnnames,{each _<>"品名",each _})

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-20 12:01 | 显示全部楼层

值得学习!
Table.Group(a, {"品名", "区域"}, {"a", each Table.AddIndexColumn(_,"id",1,1)})
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-26 20:10 , Processed in 0.037120 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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