Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用power query按特定顺序排列值_Excel_Formatting_Office365_Powerquery_Delimiter - Fatal编程技术网

Excel 使用power query按特定顺序排列值

Excel 使用power query按特定顺序排列值,excel,formatting,office365,powerquery,delimiter,Excel,Formatting,Office365,Powerquery,Delimiter,我希望清理一个表格,我一直在努力删除复杂的公式,并选择使用PQE对我的数据进行排序 下面是我正在处理的数据的合成示例。 我希望输出列在材质和子值之间交替,类似于书中的标题和子标题 M代码到目前为止: let Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{&qu

我希望清理一个表格,我一直在努力删除复杂的公式,并选择使用PQE对我的数据进行排序

下面是我正在处理的数据的合成示例。

我希望输出列在材质和子值之间交替,类似于书中的标题和子标题

M代码到目前为止:

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Material ", type text}, {"Sub ", type text}, {"CAS", type text}}),
    #"Trimmed Text" = Table.TransformColumns(#"Changed Type",{{"Material ", Text.Trim, type text}, {"Sub ", Text.Trim, type text}}),
    #"Cleaned Text" = Table.TransformColumns(#"Trimmed Text",{{"Sub ", Text.Clean, type text}}),
    #"Replaced Value" = Table.ReplaceValue(#"Cleaned Text","-","",Replacer.ReplaceText,{"Sub "}),
    #"Merged Columns" = Table.CombineColumns(#"Replaced Value",{"Material ", "Sub "},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Merged"),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Merged Columns", {{"Merged", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Merged"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Merged", type text}})
in
    #"Changed Type1"
这段代码的问题是,它在组合时没有正确列出材料,我也不知道如何正确排序CAS编号


如果有人对如何实现期望的输出有任何想法,我们将不胜感激。

您可以使用我在上一个类似问题中向您展示的相同技巧,从您的输入中获得您的输出

  • 创建两个列列表;然后
    List.Zip
    将它们组合起来
  • 诀窍在于,对于列表1(例如输出列1),您可能需要在子列列表的顶部添加Material列的内容(或者替换
    -
    ,如果仅此而已;如果是这种情况,则在
    CAS
    列表的开头添加一个
    -
    ,这样事情就会排在末尾
M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table13"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Material", type text}, {"Sub", type text}, {"CAS", type text}}),

    //combine the columns
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each
        let 
            L1 = if [Sub] = "-" then {[Material]}
                    else List.Combine({{[Material]},Text.Split([Sub],"#(lf)")}),
            L2 = if [Sub] = "-" then {[CAS]}
                    else List.Combine({{"-"},Text.Split([CAS],"#(lf)")})
        in 
            List.Zip({L1,L2})),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Material", "Sub", "CAS"}),

    //split the combined columns
    #"Expanded Custom" = Table.ExpandListColumn(#"Removed Columns1", "Custom"),
    #"Extracted Values" = Table.TransformColumns(#"Expanded Custom", 
        {"Custom", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", 
        "Custom", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Material", "CAS"})
in
    #"Split Column by Delimiter"

我可以在这里给你留言吗?@Nick顺便说一句,如果我的回答满足你发布的问题,如果你能将其标记为已接受,我将不胜感激。