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

  [复制链接]
pussy | 2021-2-18 21:10:17 | 显示全部楼层
公式好长啊。


各位都是高手啊!
回复

使用道具 举报

mrdxy | 2021-2-18 21:14:18 | 显示全部楼层
我上面那个忘记把车间搞出来了, 自定义函数要加一个参数, 把s{1}取出就可以
回复

使用道具 举报

popo | 2021-2-18 21:19:18 | 显示全部楼层
  1. let

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

  3.   fx = (subTbl)=> let lists=List.Split(List.Alternate(List.Skip(Table.ToColumns(subTbl)), 1, 1, 1), 4)

  4.       in List.Transform(

  5.           lists,

  6.           (sub)=> Table.PromoteHeaders(

  7.               Table.FromColumns(

  8.               List.RemoveLastN(sub)&{{"日期", sub{3}{0}}}&{{"值"}&List.Skip(sub{3})}

  9.               )

  10.             )

  11.         ),

  12.   group = Table.Group(

  13.      Source,

  14.      "Column1",

  15.      {"t", each Table.SplitColumn(Table.Combine(fx(_)), "姓名", (x)=>{[Column1]{0}, x}, {"车间", "姓名"})},

  16.      0,

  17.      (x,y)=>Byte.From(ynull)

  18.     )[t],

  19.   result = Table.FillDown(Table.SelectRows(Table.Combine(group), each [姓名]null), {"日期"})

  20. in

  21.   result
复制代码
我重新换了一种分组写法
回复

使用道具 举报

comic001 | 2021-2-18 21:26:18 | 显示全部楼层
我上面那个忘记把车间搞出来了, 自定义函数要加一个参数, 把s{1}取出就可以


现有的还看不明白呢,跟高手们的差距不是一星半点啊.

自己是否适合继续深入学习PQ,要划一个问号了!!
回复

使用道具 举报

zycw | 2021-2-18 21:29:18 | 显示全部楼层
我这个应该是最简单易懂,当然,语句啰嗦在所难免


看了本帖中的6种解决方案,像我这样的新手来说,10楼zhangmi老师的做法可读性好最好:每一个步骤相对简单,函数嵌套的层次不多.
如果能在第5步,增加一个分组函数table.group ,或许能够解决日期遗漏的缺陷(本例中日期共有4个,但此种做法中5号被4号覆盖掉了).
我功力不够,希望看到的老师能够完善一下,多谢!
108431115245010.jpg let
  源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  a = Table.FillDown(源,{"列1"}),
  aa=Table.ToColumns(a),
  ab=List.Select(aa,each _{0}null),
  ac=List.Split(List.Skip(ab),4),
ad=List.Transform(ac,each Table.FromColumns({ab{0}}&_)),
  ae=List.Transform(ad,each Table.PromoteHeaders(_)),
  af=List.Transform(ae,each Table.SelectRows(_, each [姓名]null and [姓名]"姓名")),

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

使用道具 举报

发现者 | 2021-2-18 21:37:18 | 显示全部楼层
我重新换了一种分组写法

108431115245011.jpg 报错了呢
回复

使用道具 举报

[TV]home | 2021-2-18 21:39:19 | 显示全部楼层
我这个应该是最简单易懂,当然,语句啰嗦在所难免


List.Split是个新函数呢,用得巧妙!
回复

使用道具 举报

赛车手 | 2021-2-18 21:45:19 | 显示全部楼层
粗心了,你说的对,是漏掉了两行数据。问题出在A步骤中的Table.SelectRows(),删除A步骤中的这个函数就正确 ...


这一步对我来说,犹如天书一般!
研究了很长时间,还是搞不明白哇
= 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}))

))})
回复

使用道具 举报

PUREDESERT | 2021-2-18 21:50:19 | 显示全部楼层
PQ编辑器→选项和设置→查询选项→始终忽略隐私级别设置
回复

使用道具 举报

zfllwk | 2021-2-18 21:56:19 | 显示全部楼层
PQ编辑器→选项和设置→查询选项→始终忽略隐私级别设置


收到!可以再研究一下新的解决方法了.
回复

使用道具 举报

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

本版积分规则