【问题标题】:Arranging values in a specific order using power query使用电源查询按特定顺序排列值
【发布时间】:2021-03-08 19:11:37
【问题描述】:

我希望清理我一直致力于删除复杂公式并选择使用 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 编号。

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

【问题讨论】:

    标签: excel formatting office365 powerquery delimiter


    【解决方案1】:

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

    • 创建两个列列表;然后List.Zip 将它们组合起来。
    • 诀窍在于,对于列表 1,(例如输出列 1),您可能需要在子列列表顶部添加材料列的内容(或者替换 -,如果有的话;如果是这种情况,请在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"
    

    【讨论】:

    • 我在这里给你发消息可以吗? chat.stackoverflow.com/rooms/229678/…
    • @Nick 顺便说一句,如果我的回答满足您发布的问题,如果您能将其标记为已接受,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2011-09-13
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多