PowerQueryが不規則なTXTテキストを処理する2つの考え方の概要
4739 ワード
『M Is for Data Monkey』第7章では、著者らは、PowerQueryを使用して不規則なTXTテキストを処理する方法を実例で示した(青い部分をクリックしてサンプルファイルをダウンロードできる).私自身は以下の方法で処理して初歩的な結果を得ました.
本の中の処理方法は違います.
違いは、11行目からフィルタリングを使用したのに対し、著者らは「TransDate」と「TransAmount」の2列のフォーマットを変更し、エラーと空の行を削除することで、不要な行を取り除く目的を達成したことです.
どう見ても私の操作はもっと簡単なようです.私はこのステップをスクリーニングすることで、著者が4つのステップで実現できる騒音行を取り除く目的を実現しました.
しかし、実際には、私のフィルタリングはハードコーディングに相当し、この特定の例にのみ適用されますが、著者のこの方法は、類似したフォーマットのすべてのTXTドキュメント処理に適用されるよりスマートです.本の中で、著者はすぐに2番目のファイル「GL Apr-Jun.TXT」を導入し、著者の処理方式で、PowerQueryをリフレッシュするだけでokになり、私のフィルタ方式では、フィルタステップにフィルタ条件を追加する必要があります.
【反省】PowerQueryはデータをプログラム的に処理する方法であるため、特定のファイルのみを処理するのではなく、操作手順を抽象化するために、ハードコーディングをできるだけ避ける必要があります.
let
= Table.FromColumns({Lines.FromBinary(File.Contents("C:\Users\wangh\Documents\power pivot \M is for Data monkey Examples\Ch07 Examples\GL Jan-Mar.TXT"), null, null, 936)}),
= Table.Skip( ,10),
= Table.TransformColumns( ,{},Text.Trim),
= Table.SplitColumn( ,"Column1",Splitter.SplitTextByRepeatedLengths(15),{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9"}),
= Table.TransformColumnTypes( ,{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type text}, {"Column1.8", type text}, {"Column1.9", type text}}),
= Table.CombineColumns( ,{"Column1.5", "Column1.6"},Combiner.CombineTextByDelimiter("", QuoteStyle.None)," "),
1 = Table.CombineColumns( ,{"Column1.7", "Column1.8"},Combiner.CombineTextByDelimiter("", QuoteStyle.None)," .1"),
= Table.RemoveColumns( 1,{"Column1.3", "Column1.9"}),
= Table.PromoteHeaders( ),
= Table.SelectRows( , each ([#"Tran Date "] <> null and [#"Tran Date "] <> "123-03 " and [#"Tran Date "] <> "===== End of Re" and [#"Tran Date "] <> "===============" and [#"Tran Date "] <> "Account " and [#"Tran Date "] <> "Balance " and [#"Tran Date "] <> "Dept xxx - Rest" and [#"Tran Date "] <> "Detailed Genera" and [#"Tran Date "] <> "Feb 2006" and [#"Tran Date "] <> "Mar 2006" and [#"Tran Date "] <> "March 20,2009 " and [#"Tran Date "] <> "No. " and [#"Tran Date "] <> "Tran Date " and [#"Tran Date "] <> "XYZ Company Ltd"))
in
本の中の処理方法は違います.
let
= Table.FromColumns({Lines.FromBinary(File.Contents("C:\Users\wangh\Documents\power pivot \M is for Data monkey Examples\Ch07 Examples\GL Jan-Mar.TXT"), null, null, 936)}),
= Table.Skip( ,10),
= Table.TransformColumns( ,{},Text.Trim),
= Table.SplitColumn( ,"Column1",Splitter.SplitTextByRepeatedLengths(15),{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9"}),
= Table.TransformColumnTypes( ,{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type text}, {"Column1.8", type text}, {"Column1.9", type text}}),
= Table.CombineColumns( ,{"Column1.5", "Column1.6"},Combiner.CombineTextByDelimiter("", QuoteStyle.None)," "),
1 = Table.CombineColumns( ,{"Column1.7", "Column1.8"},Combiner.CombineTextByDelimiter("", QuoteStyle.None)," .1"),
= Table.RemoveColumns( 1,{"Column1.3", "Column1.9"}),
= Table.PromoteHeaders( ),
1 = Table.TransformColumnTypes( ,{{"Tran Date ", type date}}),
= Table.RemoveRowsWithErrors( 1, {"Tran Date "}),
2 = Table.TransformColumnTypes( ,{{"Tran Amount ", type number}}),
1 = Table.RemoveRowsWithErrors( 2, {"Tran Amount "}),
= Table.SelectRows( 1, each ([#"Tran Amount "] <> null))
in
違いは、11行目からフィルタリングを使用したのに対し、著者らは「TransDate」と「TransAmount」の2列のフォーマットを変更し、エラーと空の行を削除することで、不要な行を取り除く目的を達成したことです.
どう見ても私の操作はもっと簡単なようです.私はこのステップをスクリーニングすることで、著者が4つのステップで実現できる騒音行を取り除く目的を実現しました.
しかし、実際には、私のフィルタリングはハードコーディングに相当し、この特定の例にのみ適用されますが、著者のこの方法は、類似したフォーマットのすべてのTXTドキュメント処理に適用されるよりスマートです.本の中で、著者はすぐに2番目のファイル「GL Apr-Jun.TXT」を導入し、著者の処理方式で、PowerQueryをリフレッシュするだけでokになり、私のフィルタ方式では、フィルタステップにフィルタ条件を追加する必要があります.
【反省】PowerQueryはデータをプログラム的に処理する方法であるため、特定のファイルのみを処理するのではなく、操作手順を抽象化するために、ハードコーディングをできるだけ避ける必要があります.