[已解决] BOM表拆分

  [复制链接]
南半球 | 2021-2-18 19:58:33 | 显示全部楼层
正准备回贴能不能修改成更通用一点的,想不到这位兄弟已经整好了.
这样以后有新同类数据修改起来就容易多了 ...


最简单的方法,你把编码和名称合并在一起用|分隔不就直接可以套用原来的代码了吗。
回复

使用道具 举报

MuscleMax | 2021-2-18 20:05:33 | 显示全部楼层
理解了,思路特别,谢谢
回复

使用道具 举报

阿毛 | 2021-2-18 20:12:33 | 显示全部楼层
特别,但是挺实用的:)
回复

使用道具 举报

融化冰河 | 2021-2-18 20:15:34 | 显示全部楼层
BOM拆分这个问题并不是须要马上投入实用的问题,只是要在学习PQFANS中看到这个,然后以前在计算成本时,须要得到每个成品的所有零部件,于时借助这个机会想如何实现. 由于功力不够,只能用最笨的办法,好在群里热心大神多,帮助解决了这个问题.
thymethy 兄弟采用两种方式实现了我最初的要求, 而 shaowu459 这位兄弟则采用了更加通用化的代码,具有扩展性, 不过也因此让我产生了能不能再修改一下更具通用性.于是我在 shaowu459 兄弟代码的基础上作了适当优化. 可以实现更加复杂一点的情况.
比如原本只能实现 "上级+下级+数量"这样的情况.
现在则可以实现"上级编码+上级名称+下级编码+下级名称+数量", 只要上级列数与下级列数相同,还可以扩展.且做成了自定义函数形式,只须要把表格名称作为参数调用即可!现把代码贴上.
(bom as table)=>
let
  //Source = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  toRows = Table.ToRows(bom),  //行列表
  toCols = Table.ToColumns(bom),//列列表
  clna=Table.ColumnNames(bom),  //表头
  clct=Table.ColumnCount(bom),  //列数
  codcd=(clct-1)/2,  //子编码开始数
  fx=(z)=>
     List.Transform(z,each
      if List.PositionOf(toCols{0},_{codcd})>-1
      then List.Combine(@fx(List.Transform(List.Select(toRows,(x)=>x{0}=_{codcd}),
                   (y)=>List.TransformMany({{_,y}},
                           (a)=>{0..(clct-1)},
                           (m,n)=> if n = clct-1
                             then m{0}{n} * m{1}{n}
                             else if n < codcd
                             then m{0}{n}
                             else m{1}{n}))))
                   // {_{0},_{1},
                   //  y{2},y{3},
                   //  y{clct-1}*_{clct-1}})))
      else
      {_}
         ),
  res = List.Combine(fx(toRows)),
  tab = #table(clna,res),
  hz = Table.Group(tab, List.Range(clna,0,clct-1), {{"数量", each List.Sum(Table.ToColumns(_){clct-1}), type number}})
in
  hz
108251114174320.rar (40.16 KB, 下载次数: 0)
回复

使用道具 举报

时间 | 2021-2-18 20:18:34 | 显示全部楼层
108251114174312.jpg 尝试改为List.Generate出现最后一级无法替换的情况,麻烦楼上的大神再帮忙研究研究.
108251114174321.rar (26.39 KB, 下载次数: 0)
回复

使用道具 举报

人之初 | 2021-2-18 20:24:34 | 显示全部楼层
用三个循环函数实现了BOM表的展开. 10825111417431.png 10825111417432.png 10825111417433.png
108251114174322.rar (43.55 KB, 下载次数: 0)
回复

使用道具 举报

冰雪紫旋 | 2021-2-18 20:31:34 | 显示全部楼层
看了很久,硬是没看懂,你们都是大神。我要多久才能练到这个水准?给自己留个问号,多多进群学习。
回复

使用道具 举报

bbxing | 2021-2-18 20:33:35 | 显示全部楼层
可口可乐101 发表于 2020-11-5 17:17
看了很久,硬是没看懂,你们都是大神。我要多久才能练到这个水准?给自己留个问号,多多进群学习。


从一楼挨着理解,这个帖子你搞懂了,你的POWERQUERY就基本过关了
回复

使用道具 举报

痴情浪子 | 2021-2-18 20:39:35 | 显示全部楼层
从一楼挨着理解,这个帖子你搞懂了,你的POWERQUERY就基本过关了


不容易,今年估计都达不到这个水准。还是先专心学一下PBI,学个差不多了,反过来再研究PQ。
回复

使用道具 举报

smh | 2021-2-18 20:47:35 | 显示全部楼层
好贴收藏学习!
回复

使用道具 举报

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

本版积分规则