0

列に次のデータがあります。

ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:19901/1
:60F:C110717EUR1333,58
:61:1107160718D12,75N426NONREF
:86:BEA   NR:5FLM01   16.07.11/15.09 OLENBERG EXPL. BURG,PAS018
:62F:C110718EUR1320,83
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20001/1
:60F:C110718EUR1320,83
:61:1107190719D57,87N446NONREF
:86:GEA               19.07.11/07.58 HILTON - HEATHROW HOUNSL,PAS018
GBP 50,00 1EUR=0,8640055 GBP     KOSTEN EUR2,25 ACHTERAF BEREKEND
:62F:C110719EUR1262,96
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20101/1
:60F:C110719EUR1262,96
:61:1107200720C82,N196NONREF
:86:GIRO  45588 taxservice    TEVEELBET. NR.2
MOTORRYTUIGENB.11 *B         *
:62F:C110720EUR1287,31
-

** テキスト行 (#86) は 1 行または複数行にまたがることができ、数文字の後に改行が入ることに注意してください。*

元のファイルはより長く、これを Excel 2016 のパワー クエリで変換したいと考えています (可能であれば M コードは使用しません)。

表形式のテーブルを変換するための多くのソリューションを見てきましたが、問題は、特定の行にデータだけでなく列見出しも含まれていることです。基本的に : per row の間のすべてがヘッダーで、その後の部分が「値」です。

これを次のようなものに変換したいと思います。

enter code here

   20             | 25        | 28
 ABN AMRO BANK NV | 233835613 | 19901/1
 ABN AMRO BANK NV | 233835613 | 20001/1
 ABN AMRO BANK NV | 233835613 | 20101/1

列の削除とデータの変更は問題ありません。繰り返される行を列に変換するだけです。助けてくれてありがとう!

4

2 に答える 2

1

リクエストした変換部分は、列名をピボットすることで実現できます。それらを特定して抽出する方法については、以下の提案をご覧ください。

インポート中に改行の問題を解決することをお勧めします: http://blog.crossjoin.co.uk/2016/02/16/working-with-csv-files-that-c ​​ontain-rogue-line-breaks-in -power-query-and-power-bi/ それ以外の場合は、それを解決するためにさらに M アクロバットが必要です。

let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Changed Type1" = Table.TransformColumnTypes(Source,{{"Spalte1", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1),
    HeaderSplitPosition = Table.AddColumn(#"Added Index", "SplitHeader", each if Text.Start([Spalte1],1)=":" then List.Last(List.FirstN(Text.PositionOf([Spalte1], ":", Occurrence.All),2)) else ""),
    SeparateHeader = Table.AddColumn(HeaderSplitPosition, "Header", each try Text.Trim(Text.Range([Spalte1],0,[SplitHeader]), ":") otherwise ""),
    SeparateBody = Table.AddColumn(
        SeparateHeader,
        "Value",
        each
            try Text.Range(
                [Spalte1],
                [SplitHeader]+1,
                Text.Length([Spalte1])-[SplitHeader]-1
            )
            otherwise [Spalte1]
        //
    )
in
    SeparateBody
于 2016-02-25T10:00:33.677 に答える