[已解决] 如何利用PQ整理不规范的源表?

  [复制链接]
查看287022 | 回复195 | 2021-2-18 19:28:13 | 显示全部楼层 |阅读模式
上表为源表,下表为希望达到 的效果表,请教如何实现?谢谢!
用pq完成,需要将源表中标记的五个部分,都转换成效果表的样式. 10843111524501.jpg

10843111524502.jpg



108431115245013.zip (25.59 KB, 下载次数: 0)
回复

使用道具 举报

chshaowei | 2021-2-18 19:33:13 | 显示全部楼层
用pq完成,需要将源表中标记的五个部分,都转换成效果表的样式.
回复

使用道具 举报

dcphilip | 2021-2-18 19:42:13 | 显示全部楼层
详情见附件!
108431115245014.rar (26.29 KB, 下载次数: 0)
回复

使用道具 举报

海魔 | 2021-2-18 19:43:13 | 显示全部楼层
初学pq,用常规笨办法处理了一下,盼精简方案!

10843111524503.jpg 10843111524504.jpg


108431115245015.zip (53.28 KB, 下载次数: 0)
回复

使用道具 举报

alandeng | 2021-2-18 19:49:14 | 显示全部楼层
详情见附件!


谢谢关注!计算过程研究学习中.
不过最后的结果不对,值应该是6402,源表的数据很不规范,您的方案似乎少取了两行数据,
回复

使用道具 举报

DarkRaven | 2021-2-18 19:54:14 | 显示全部楼层
粗心了,你说的对,是漏掉了两行数据。问题出在A步骤中的Table.SelectRows(),删除A步骤中的这个函数就正确了。
108431115245016.rar (26.5 KB, 下载次数: 0)
回复

使用道具 举报

changgun | 2021-2-18 20:01:14 | 显示全部楼层
B步骤的嵌套函数太难了,看不懂呢,唉!
= Table.Group(A,"列1",{"a",(x)=>Table.Combine(let m=Table.ToColumns(x) in List.Transform({0..List.Count(List.Skip(m))/8-1},each let b=Table.FromColumns(List.Alternate(List.Range(List.Skip(m),_*8,8),1,1,1)) in Table.Skip(Table.AddColumn(b,"Column5",each b[Column4]{0}))))})
回复

使用道具 举报

nomadii | 2021-2-18 20:06:14 | 显示全部楼层
PowerQuery参考解法
10843111524505.png
108431115245017.zip (28.34 KB, 下载次数: 0)
回复

使用道具 举报

rafael_wl | 2021-2-18 20:12:14 | 显示全部楼层
8楼热心朋友的解法,与6楼的类似,我看起来有点吃力,努力学习中!
= Table.Group(GetCurrentFile, "Column1", {"g", each [
    t=Table.Combine(List.Transform(List.Split(List.Skip(Table.ToColumns(_)),8),(l)=>Table.FromColumns(List.Alternate(l&{List.Repeat({List.LastN(l,2){0}{0}},14)},1,1,1)))),
    r=Table.SelectRows(t,(z)=>z[Column1]null and z[Column1]"姓名")][r]},
  GroupKind.Local,(x,y)=>Byte.From(ynull))
回复

使用道具 举报

tyc32 | 2021-2-18 20:13:15 | 显示全部楼层
我这个应该是最简单易懂,当然,语句啰嗦在所难免
  1. let

  2.   源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],

  3.   a = Table.FillDown(源,{"列1"}),

  4.   aa=Table.ToColumns(a),

  5.   ab=List.Select(aa,each _{0}null),

  6.   ac=List.Split(List.Skip(ab),4),

  7.   ad=List.Transform(ac,each Table.FromColumns({ab{0}}&_)),

  8.   ae=List.Transform(ad,each Table.PromoteHeaders(_)),

  9.   af=List.Transform(ae,each Table.SelectRows(_, each [姓名]null and [姓名]"姓名")),

  10.   逆透视的其他列 = List.Transform(af,each Table.UnpivotOtherColumns(_, {"包装车间", "姓名", "时间", "权重"}, "日期", "值")),

  11.   合并=Table.Combine(逆透视的其他列)

  12. in

  13.   合并
复制代码



108431115245018.zip (28.93 KB, 下载次数: 0)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则