テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

Power Queryの基礎 7_CSV結合④

CSVを結合する方法をいくつか紹介してきましたが、今回はその中で基もお手軽にファイルを結合できる方法を紹介します。その前に、CSVファイルを結合する方法をおさらいをしておきますと、

  • Binary.Combine( 前ステップ[Content] )

  • Csv.Document ( 前ステップ, [Encoding = 932] ) > 列の展開

という2つの方法でしたが、今回紹介するやり方は上記2つのどちらよりもお手軽にできるものとなります。

CSVへの接続

1. Excelを立ち上げる

2. フォルダパスをコピー

f:id:marshal115:20200426020737p:plain

3. リボンの「データ」>「データの取得」>「ファイルから」>「フォルダから」

f:id:marshal115:20200426023446p:plain

4. コピーしたパスをペーストしOK

f:id:marshal115:20200426190040p:plain

5. 新しいウィンドウが出現するので、③「データの変換」をクリック

f:id:marshal115:20200426190604p:plain

6. クエリエディタが立ち上がり、下図のようになる

f:id:marshal115:20201031100322p:plain

7. Content列の↓↓をクリックしOK

f:id:marshal115:20201031100610p:plain

8. フォルダ内にある全てのCSVが全て結合される(※フォルダ内にCSV以外のファイルがある場合は、6のExtensionで.csvだけを抽出する)

f:id:marshal115:20201031101848p:plain

②のOKをクリックすると、③->⑤までの画面が出現します。ワンクリックで③のような見たこともない複数のクエリが出現してしまい、⑤のように複数のステップが一気に追加され、ファイル内のデータが全て結合されたわけです。

非常にお手軽なやり方ですが、クエリが複数作られてしまうので、初心者には理解しがたい動作だと思います。以下、なぜこのような動作になったのかについて解説します。

サンプルクエリ

まず、7の「Fileの結合」は、

フォルダ内にある全てのCSVの一番最初のファイルをサンプルファイルとして使い、それ以外のファイルを同じ形式で結合します

ことを意味します(下記「Power Queryの基礎 4_CSV結合①」も参照されたい)

何を意味しているかと言いますと、上記③の自動追加されたクエリを見ると、「サンプルファイルの変換」というクエリは②の「Fileの結合」にあるファイル(クエリ)であり、bはaのクエリの状態を結合したものである。

f:id:marshal115:20201031104304p:plain

言い換えれば、

aというクエリの中身を操作するとbという結合されたクエリにもそれが反映された状態になる

のです。詳細は別記事にしますが、下図の例が分かりやすと思います。

f:id:marshal115:20201031110240p:plain

①「サンプル ファイルの変換」を選び、②「行の保持」>「上位の行を保持」、③ 1を入力すると、④のようにサンプルクエリが1行だけ残る状態になる。そのまま、その下にあるCSVクエリをクリックすると、Before(1行だけ残すのではなく、上記操作を行わなかった場合)からAfter(全てのファイルで一番最初の行だけが抽出され、結合された状態)になる。

f:id:marshal115:20201031110514p:plain

今まで、全て結合してからその他の操作(例:列の追加・削除、マージ等)を行っていたが、今回の方法は最初にサンプルファイルを変換した後、その他のファイルにも同じ定義を当てはめてから結合しているのです。

サンプルクエリによる結合のメリット

ナビゲーションウィンドーに出現した複数のクエリの意味は別記事にしますが、今回の方法でデータを結合するメリットは以下3つになります。

  1. ファイル名が残る
  2. 一つのファイル(サンプルクエリ)を変換して他のファイルを結合するため、クエリのパフォーマンスや効率がアップする
  3. 他のクエリの意味が分かると、いろいろと応用が利く

1はBinary.Combineでデータ結合した際、ファイル名を抽出できないというマイナスポイントを補うもので、上図の通り、結合後は自動的にファイル名もSource_Nameという列として抽出される。

2は各ファイルのサイズが大きい場合に、1ファイル(サンプルクエリ)だけを操作すれば操作後の結果を結合してくれるため、効率が良くなります。

3はCSVだけでなく、Excelにも適用できるため、別記事で詳細について紹介していきます。

サンプルクエリによる結合のデメリット

メリットの多いこの結合方法ですが、実はデメリットもあります。その典型例が下記のエラー発生になります。

1. [年月]と[商品]列を選択し、右クリック > 他の列の削除

f:id:marshal115:20201031113109p:plain

2. [年月]と[商品]の2列だけが残りますが、CSVクエリを見るとエラーが発生

f:id:marshal115:20201031113239p:plain

理由は「適用したステップ」の一番最後のステップ(Changed Type = データ型の変換)で、本来あったはずの列をサンプルクエリから消してしまったため、あるはずの列に対してデータ型の変換ができなくなったためです。

このエラーに対する対処法は非常に簡単で、Changed Typeというステップを消せばエラーが解消されます。

f:id:marshal115:20201031114021p:plain

 まとめ

今回はCSVにおける最後の結合方法について見ていきました。非常にシンプルであるのですが、サンプルクエリのロジック、その他クエリの意味等に関する理解も重要ですので、別記事で解説したいと思います。なお、今回はCSVの結合について見ていきましたが、ExcelでもContent列の↓↓をクリックすれば同じことを実現できます。

  • サンプルクエリを作れば、結合前にデータの変換を行うことができる
  • コードをマニュアル入力する必要がなく、初心者向きの操作であるが、多くのクエリが作られてしまうため、全てを理解するにはそれぞれのクエリの意味について知る必要がある
  • サンプルクエリを操作することが多い場合、結合時のクエリにエラーが発生する可能性がある