Excel Power Query
複数の表を結合(マージ)する
ここでは,複数の表において列どうしを関連付けて結合する方法を説明します.これはリレーショナルデータベースにおける結合演算(内部結合)に相当します.
CSVファイルのダウンロード
まず,GitHub の sample-data-sets リポジトリから machine-sales-sales.csv, と machine-sales-branch-id.csv,machine-sales-staff-id.csv という3つのファイルをダウンロードして適当なフォルダ(ここでは merge フォルダ)に格納します.
Visual Studio Code で merge フォルダを開いてファイルの中身を確認します.下の画面中央にある「machine-sales-sales.csv」には5列の項目があり,3列目が「branch_id」(支店のid)です.この「branch_id」は画面右上の「machine-sales-branch-id.csv」ファイルの「id」列を参照していることがわかります.同様に4列目の「staff_id」(従業員のid)は画面画面右下の「machine-sales-staff-id.csv」ファイルの「id」列を参照しています.したがって,中央の「machine-sales.sales.csv」の2行目は「Kobe」支店の「Eto」さんが2018年7月16日に売り上げた「44000」円の記録であることがわかります.
CSVファイルのインポート
上のようなデータは Excel では従来「VLOOKUP」関数を使って結合する方法が一般的でした.Power Query を用いるとより簡単に表の結合が行えるようになります.
まず,Excel を起動し新規ブックを作成します.その後,「データ」→「データの取得」→「ファイルから」→「テキストまたはcsvから」を選択します.
まず,「machine-sales-salse.csv」からインポートします.下の画面でファイルを選び「インポート」をクリックします.
文字化けなどが起こっていないかを確認して「読み込み」をクリックします.この作業で「machine-sales-salse.csv」の読み込みが完了しました.
同じ手順を繰り返して今度は「machine-sales-branch-id.csv」ファイルをインポートします.このとき,次の画面を確認すると「id,branch」という行が列の見出しではなくデータ行として認識されてしまっています.この問題に対応するために「データの変換」ボタンをクリックします.
「Power Query エディター」が起動しました.1行目を見出しとして認識させるために,「1行目をヘッダーとして使用」をクリックします.
「id」「branch」が見出しとして設定されたので,画面左上の「閉じて読み込む」をクリックします.
「machine-sales-branch-id」シートに正しく読み込まれました.(machine-sales-salesシートにも別のデータが読み込まれていることも確認してください)
更に同じ操作を繰り返して「machine-sales-staff-id.csv」データも読み込みます.このときも見出しが正しく設定されるように注意してください.
表の結合(マージ)
データベースの内部結合のように複数の表を結合して読み込む方法を説明します.まず,3つのシートにデータが正しく読み込まれていることを確認して,「machine-sales-sales」シートを開きます.さらに「クエリ」→「結合」を実行します.
次のような画面が表示されます.画面の上部には前の画面で開いていた「machine-sales-sales」シートが選択されています.中央の選択リストから「machine-sales-branch-id」を選択します.
2つのシートがプレビューされました.照合列は「machine-sales-sales」の「branch_id」列と「machine-sales-branch-id」の「id」列であるので,それぞれの列をクリックして選びます.
2つの列が選ばれました.画面下部に照合列の値が一致しているかどうかの情報が表示されています.今回は「799行中799行が一致しています」と表示されているので,「OK」ボタンをクリックします.
テーブルが結合されました.画面右上のアイコンをクリックします.
結合後に「id」を表示する必要はないので,「branch」にだけチェックをれて「OK」をクリックします.
結合されて「Kobe」や「Osaka」といった支店名が表示されるようになりました.
2列目の「branch_id」を表示する必要がなければ列の削除を実行します.
支店名の取得ができるようになったので,画面左上の「閉じて読み込む」を実行します.
右端の列に支店名が表示されるようになりました.なお,シート名が「マージ1」になっていることにも注意してください.
同様に,別の表を結合して従業員名も表示できるようにします.「マージ1」のシートが選択されている状態で「結合」を実行します.
中央の選択リストでは「machine-sales-staff-id」を選び,照合列は上の「staff_id」と下の「id」を選びます.画面下部には「799行中799行が一致しています」と表示されていることを確認して「OK」をクリックします.
「machine-sales-staff-id」のテーブルも結合できたので,右上のアイコンをクリックします.
「name」だけにチェックを入れて「OK」を押します.
従業員名を表示することができるようになりました.
2列目の「staff_id」の列が不要なので削除します.
3列目に「amount」がありますが,これは右端に移動したいとします.移動したい列を表の右端にマウスでドラッグ&ドロップすると良いでしょう.
列の並べ替えが完了しました.必要な形式に整えることができたようなので画面左上の「閉じて読み込む」をクリックします.
表の結合ができました.ただし,1列目の「id」の順序がバラバラになっているようです.
1列目でソートして完了です.