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

  [复制链接]
xprimer | 2021-2-18 20:20:15 | 显示全部楼层
和楼上的方式不太一样。。尽量拆分后还原成表,比较没那么抽象 不过效率需要测试下才知道
108431115245019.zip (32.09 KB, 下载次数: 0)
回复

使用道具 举报

lkm | 2021-2-18 20:26:15 | 显示全部楼层
我这个应该是最简单易懂,当然,语句啰嗦在所难免
这种写法更适合像我这样的初学者理解和学习,
不过在日期的处理上,跟我自己的处理一样,没有单独体现4号和5号的业务.
希望老师有空的时候,再帮忙调整一下吧,谢谢!
10843111524506.jpg
回复

使用道具 举报

HONDA | 2021-2-18 20:30:15 | 显示全部楼层
和楼上的方式不太一样。。尽量拆分后还原成表,比较没那么抽象 不过效率需要测试下才知道


查询语句写得很有条理,这几天再研究和学习一下,谢谢相助!
回复

使用道具 举报

B仔爱玉米 | 2021-2-18 20:34:16 | 显示全部楼层
这种写法更适合像我这样的初学者理解和学习,
不过在日期的处理上,跟我自己的处理一样,没有单独体现4号和5 ...


这样前面又得嵌套一个table.group或者table.splite,太难看了。
我也是新手,看着前面各位老师的代码在学习。上面老师写的就挺好
回复

使用道具 举报

马自达 | 2021-2-18 20:38:16 | 显示全部楼层
这样前面又得嵌套一个table.group或者table.splite,太难看了。
我也是新手,看着前面各位老师的代码在 ...


可惜用table.group写得,太过于复杂,我还搞不明白啊......
回复

使用道具 举报

tangdashuai | 2021-2-18 20:46:16 | 显示全部楼层
PowerQuery参考解法


你好,能否解释一下Table.Group第3参数中,each [t, r][r]的含义?谢谢
10843111524507.jpg
回复

使用道具 举报

冲红灯 | 2021-2-18 20:48:16 | 显示全部楼层
  1. // file

  2. let

  3.   Source = Table.FirstValue(Excel.CurrentWorkbook(){[Name="表1"]}[Content])

  4. in

  5.   Source



  6. // output

  7. let

  8.   Source = Excel.Workbook(File.Contents(file), null, true){[Item="源表",Kind="Sheet"]}[Data],

  9.   rows = Table.ToRows(Source)&{{""}},

  10.   fx = (x)=>let slist=List.Alternate(x, 1, 1, 1),

  11.       sdate=slist{3}{0},

  12.       repl= List.ReplaceRange(slist, 3, 1, {List.ReplaceRange(slist{3}, 0, 1, {"值"})})

  13.     in repl&{{"日期", sdate}},

  14.   acc = List.Accumulate(

  15.     rows,

  16.     {null, null, {}, {}},

  17.     (s,c)=>if s{0}=null and c{0}null

  18.        then {c{0}, c{0}, { List.Skip(c)}, s{3}&

  19.          { let lists=List.Split(List.Zip(s{2}), 8)

  20.           in List.Transform(

  21.             lists,

  22.             each Table.PromoteHeaders(

  23.                 Table.FromColumns(

  24.                 fx(_)

  25.                 )

  26.                )

  27.            )

  28.          }

  29.         }

  30.        else {c{0}, s{1}, s{2}&{List.Skip(c)}, s{3}}

  31.     ){3},

  32.   tbl = Table.Combine(List.Combine(acc)),

  33.   filter = Table.SelectRows(tbl, each ([姓名]  null)),

  34.   result = Table.FillDown(filter, {"日期"})

  35. in

  36.   result
复制代码
可以试一下这个

108431115245020.rar (31 KB, 下载次数: 0)
回复

使用道具 举报

西红柿65 | 2021-2-18 20:53:17 | 显示全部楼层
PowerQuery参考解法


继续请教老师:下图中的l用法没有看明白,能否解释一下?
10843111524508.jpg
回复

使用道具 举报

volcano | 2021-2-18 20:58:17 | 显示全部楼层
可以试一下这个


谢谢关注!代码看起来很长,好像有点超出我的理解能力了,唉......
回复

使用道具 举报

ecc83 | 2021-2-18 21:07:17 | 显示全部楼层
公式好长啊。 10843111524509.jpg
108431115245021.rar (41.07 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则