2017-06-02 50 views
-1

对于Power Query和M而言,我尝试使用分隔符值拆分列,但也要将前缀拆分为给定模式。将列拆分为新模式

在像下面的原始表中的值:

20170101T1231_Name_A#1234_C#AB DEF_D#Comment 
20170203T1543_A#11111_B#COL2_C#XYZ QRSTUV_D#Comment 

我可以使用_作为分隔符的列分成多个列,然而,期望的结果是具有每个前缀#值的他们自己的专栏。

DATE&TIME  | Text | A# | B# | C#   | D# 
20170101T1231 | Name | 1234 |  | AB DEF  | Comment 
20170203T1543 |  | 11111 | COL2 | XYZ QRSTUV | Comment 

回答

1

此代码应该做的伎俩:

let 
    Source = Table1, 
    #"Split Column by Position" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByPositions({0, 13}, false), {"Column1.1", "Column1.2"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Position",{{"Column1.1", type datetime}, {"Column1.2", type text}}), 
    Splitted = Table.TransformColumns(#"Changed Type",{{"Column1.2", each Text.Split(_,"_")}}), 
    #"Added Index" = Table.AddIndexColumn(Splitted, "Index", 0, 1), 
    #"Expanded Column1.2" = Table.ExpandListColumn(#"Added Index", "Column1.2"), 
    #"Filtered Rows" = Table.SelectRows(#"Expanded Column1.2", each [Column1.2] <> null and [Column1.2] <> ""), 
    AddedTextLabel = Table.TransformColumns(#"Filtered Rows",{{"Column1.2", each if Text.Contains(_,"#") then _ else " Text#"&_}}), 
    #"Inserted Text After Delimiter" = Table.AddColumn(AddedTextLabel, "Text After Delimiter", each Text.AfterDelimiter([Column1.2], "#", 0), type text), 
    #"Trimmed Text1" = Table.TransformColumns(#"Inserted Text After Delimiter",{{"Column1.2", each Text.Start(_,1+Text.PositionOf(_,"#"))}}), 
    #"Pivoted Column" = Table.Pivot(#"Trimmed Text1", List.Sort(List.Distinct(#"Trimmed Text1"[Column1.2])), "Column1.2", "Text After Delimiter"), 
    #"Renamed Columns" = Table.RenameColumns(#"Pivoted Column",{{"Column1.1", "DATE&TIME"}, {" Text#", "Text"}}), 
    #"Removed Columns" = Table.RemoveColumns(#"Renamed Columns",{"Index"}) 
in 
    #"Removed Columns"