斜杠星号

晓新
第 652 位会员
注册于 2019-01-16 10:28:49
活跃于 2019-01-28 12:27:05


  • 城市
  • 对多级 BOM 文本列进行正确排序 at 2019-01-21 12:23:41

    @飞天篮球
    我只想说:100: " 地球人已经阻止不了你们啦 ! "

  • 对多级 BOM 文本列进行正确排序 at 2019-01-19 13:05:36

    @飞天篮球
    1- 谢谢大神, 我这边用的是2018-10月更新的Excel版本, 没有找到Splitter.SplitTextByCharacterTransition这个函数, 你这个是最新的版本才有的函数吧?
    2- 阁下的UDF组合函数用法炉火纯青, 请容我慢慢消化再理解, 谢谢!

  • 对多级 BOM 文本列进行正确排序 at 2019-01-19 11:45:52

    @飞天篮球
    1、如果把表里的第二个“4G0 199 379AQ” 改成“14G0 199 379AQ” ,按目前的数据源,它应该排在哪里?最后?

    在BOM主名称内如果出现这样的情况, 因为名称内有空格或点分隔, 14G0相对于4G0排在最后.

    2、你想要的排序规则是不是这样的,以“4G0 199 379AQ”为例,分别按 4、G、0、199、379、AQ,这样的顺序排序?

    对头, 就是这样的排序模式.

    ======

    • 目前BOM列分为2部分, 主名称和分级符号-后面的子名称.
    • 主名称内包含字母, 数字, 点号, 空格, 但基于编码规则, 主名称内不会有横杠.[因为横杠作为分级符号]
    • 子名称可能有多级, 每级之间用横杠-符号分隔, 子名称要么是A~Z的字母,要么是1~99的数字, 就是说子名称排序时要考虑到数位补齐的问题, 不然会出现升序排列后10在2前面的现象.
  • Power Query M 一行转置为多行 at 2019-01-17 16:17:30

    file

    原来是旧版本IE不能直接粘贴图片,

  • 对多级 BOM 文本列进行正确排序 at 2019-01-17 15:04:55

    @焦棚子
    焦老师教训得是, 我主要是想头脑风暴一下, 多学习各类代码思路, 再次感谢!

  • Power Query M 一行转置为多行 at 2019-01-17 15:01:30

    新手不会发代码和图片, 将我代码中的列名对应的原表列作以下说明:
    Date --> Date
    AVR ---> 平均作业量
    平均值---> 作业量

  • Power Query M 一行转置为多行 at 2019-01-17 14:57:56

    只要1步逆透视就可以解决所有, let
    源 = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    更改的类型 = Table.TransformColumnTypes(源,{{"Date", type date}}),
    逆透视的其他列 = Table.UnpivotOtherColumns(更改的类型, {"Date", "AVR"}, "属性", "值"),
    重排序的列 = Table.ReorderColumns(逆透视的其他列,{"Date", "值", "AVR", "属性"}),
    删除的列 = Table.RemoveColumns(重排序的列,{"属性"}),
    重命名的列 = Table.RenameColumns(删除的列,{{"值", "作业员"}, {"AVR", "平均值"}})
    in
    重命名的列

  • 对多级 BOM 文本列进行正确排序 at 2019-01-17 14:42:54

    @焦棚子
    调试后还发现一个问题, 就是子级的编码要么是1~99, 要么是A~Z, 所以如果在-和-之间的数字是11或99之间的话, 那么上面的代码还是就会多出一位0来,
    源数据为: 8R0 199 381EL-11-H
    期望结果: 8R0 199 381EL-11-H
    当前结果: 8R0 199 381EL-011-H ===>. [因为 "-0"&y&"0" 只能处理 '-01'0 ~ '09'0, 所以这里的011就被遗漏了.]
    如焦老师所言, 第一步规范数据源才是正道, 感谢焦老师的不厌其烦, 我于是就用了下面这个大笨瓜式的3层Text.Replace处理法, 希望焦老师不要打我, 假如焦老师能再指教优化一下, 万分感谢焦老师!

    (Len)=>List.Accumulate({"1".."9"},Len,(x,y)=>(if not Text.Contains(x,"-")then x else Text.Replace(Text.Replace(Text.Replace(x,"-"&y,"-0"&y),"-0"&y&"0","-"&y&"0"),"-0"&y&y,"-"&y&y)) )

  • 数据清洗难题,请大神帮忙 at 2019-01-17 12:37:50

    @叮当 M语言的 ? 用在这里起到容错的作用. 你可以试试把?去掉, 有些错误 error就会出现了.

  • 对多级 BOM 文本列进行正确排序 at 2019-01-17 11:35:32

    @焦棚子
    谢谢大神!
    List.Accumulate + Text.Replace的组合用法甚为精妙!
    但是目前遇到一个问题, 就是当BOM列内容里包含多个0但没有横杠 "-"号的时候, 会出现误杀现象:
    源数据为: 94837505001
    期望结果: 94837505001
    当前结果: 9483755001 ===> [ 这里没有 "-" ,但代码却把中间内容'505'之间的0给杀掉了, 何解? ]

  • 对多级 BOM 文本列进行正确排序 at 2019-01-16 17:48:46

    我的意思是: [对BOM表列中的分支层级, 只要横杠-号后面不是字母而仅有1位数字的时候, 全部在前面加0补充为2位数字, 这样就解决了后面要正常排序的需求.]
    源数据为: DE3452FEE.DT 23675G-2-F-8-DG-10-K-6
    期望结果: DE3452FEE.DT 23675G-02-F-08-DG-10-K-06

  • 对多级 BOM 文本列进行正确排序 at 2019-01-16 17:33:03

    @焦棚子 为了世界和平 谢谢焦老师的指点!
    不知道可否用 List.Accumulate + List.ReplaceValue 实现替换? [您的Split+Buffer考虑得很周全, 我想多几种解题思路]
    替换时把最后1个 -x 单独提取出来处理, [如果有]前面的 -x- 就可以用循环来替换了, 不知道我的这个想法可行吗?