今度は、「データ接続を切り替える」という方法について学習していきます。この操作は、これまでの内容と比べると少し難しく感じるかもしれません。先にお伝えしておくと、今回はPower Queryの「詳細エディター」という機能を使用します。
まず、基本的な考え方から確認していきましょう。Power BIでは、元となるデータに接続し、そのデータを使ってデータモデルを作成し、さらにそのデータモデルをもとにグラフやビジュアルを作成していきます。たとえば、現在このようなレポートがあるとします。
「元のデータ」
↓
「Power Query」
↓
「データモデル」
↓
「既存のビジュアル」
という構成です。ところが、レポートを長期間運用していると、元となるデータに変更が発生することがあります。
たとえば、新しいデータソースに変更されたり、ファイルが新しくなったり、システムの変更によって列が追加されたり、場合によっては列名が変更されたりすることもあります。このようなローデータの変化は、長期的にPower BIを運用していれば、どうしても発生するものです。
そのたびにPower BIのレポートを最初から作り直していたのでは、大変です。そこで利用できるのが、「データ接続を切り替える」という方法です。
つまり、現在使用している古いデータソースから、新しいデータソースへ接続先を変更し、既存のデータモデルやビジュアルをできるだけそのまま利用するという考え方です。
前回の「データ ソース設定」は、「同じ構造のファイル」を置き場所ごと差し替える方法でした。一方、シート名や取り込み方そのものが変わるような場合には、Power Queryの「詳細エディター」でクエリの中身を直接書き換えるほうが、確実に切り替えられます。今回は、その詳細エディターの使い方を、前回と同じ新旧ファイルで体験しておきましょう。
では、実際に見てみましょう。前回、「other_Folder」に移動した「sales_old.xlsx」を、「04_switch」の直下に戻しておいてください。「04_switch」の直下に「sales_old.xlsx」、「other_Folder」の中に「sales_new.xlsx」がある状態が、今回のスタートです。
「sales_old.xlsx」を取り込んで、前回と同じ国別の売上高グラフを作った状態から始めます。「ホーム」タブの「データの変換」をクリックして、Power Queryエディターを開きましょう。
まず、クエリの中身を見てみます。クエリウィンドウの「取引先マスタ」を右クリックして、「詳細エディター」を選びます(「ホーム」タブの「詳細エディター」でも同じです)。すると、このクエリがやっていることが、M言語のコードとして表示されます。
先頭のほうに「ソース = Excel.Workbook(File.Contents("C:\…\04_switch\sales_old.xlsx"), null, true)」という行があります。これが「元のデータはどこにあるか」を示している部分です。
その下の行で、どのシート(またはテーブル)を取り出すかが指定され、さらにその下に「昇格されたヘッダー数」「変更された型」と、「適用したステップ」で見た処理が順番に並んでいます。確認したら「キャンセル」で閉じておきます。
このパスを直接書き換えてもよいのですが、長いパスを手で打つと、1文字間違えただけでエラーになります。そこで、もっと確実な方法を使います。新しいファイルをいったん別のクエリとして読み込み、そのコードを古いクエリにコピーする、という方法です。
「ホーム」タブの「新しいソース」をクリックします。
「Excel ブック」を選び、「other_Folder」の中の「sales_new.xlsx」を開きます。
ナビゲーターで「取引先マスタ」「販売実績」の両方にチェックを入れて、「OK」をクリックします。
クエリウィンドウに「取引先マスタ (2)」「販売実績 (2)」が追加されました。前回、レポート画面で追加したときと同じですね。ただし今回は、この「(2)」を使うのが目的ではありません。「(2)」の中身のコードを借りるのが目的です。
「取引先マスタ (2)」を右クリックして、「詳細エディター」を開きます。
先ほどとほとんど同じコードですが、「ソース」の行のパスが「…\04_switch\other_Folder\sales_new.xlsx」になっています。これが、新しいファイルを参照するコードです。コードの中をクリックして Ctrl + A で全選択し、Ctrl + C でコピーしたら、「キャンセル」で閉じます。
次に、元の「取引先マスタ」を右クリックして「詳細エディター」を開き、中のコードを Ctrl + A で全選択してから、Ctrl + V で貼り付けます。「ソース」の行が「sales_new.xlsx」に変わったことを確認して、「完了」をクリックします。下に「構文エラーが検出されませんでした。」と出ていれば問題ありません。
これで、「取引先マスタ」というクエリの名前はそのままで、中身だけが新しいファイルを参照するようになりました。同じ手順を「販売実績」でも行ってください。「販売実績 (2)」のコードをコピーして、「販売実績」の詳細エディターに貼り付けます。
2つとも終わったら、役目を終えた「取引先マスタ (2)」「販売実績 (2)」は不要です。右クリックして「削除」で消しておきましょう。残しておくと、前回見たように、データウィンドウに同じ名前のテーブルが並んで紛らわしくなります。
最後に「閉じて適用」をクリックすると、レポートのグラフが更新され、前回と同じように、日本の売上高が約3,100万に増えているはずです。テーブル名もグラフの設定もそのままで、クエリの中身だけが切り替わりました。
ここで、詳細エディターで切り替えたときのポイントを整理しておきます。
1. 列名やデータ型が新旧で同じであれば、ビジュアルのグラフには影響がない。リレーションもそのまま生き続ける
2. 新しいデータに列が追加されていれば、それがそのままデータウィンドウに反映される
3. 逆に、使っている列の名前が変わっていると、その列を使っているビジュアルはエラーになる。その場合は、列名の変更ステップをPower Queryで追加するか、ビジュアル側を修正する
最後に、前回の「データ ソース設定」と今回の「詳細エディター」の違いをまとめておきます。どちらも「sales_old」から「sales_new」に切り替える操作でしたが、想定している場面が違います。
前回(データ ソース設定)は、ファイルの移動やリネームへの対応です。参照先のパスだけを付け替えるので、Power Queryの「適用したステップ」は一切変わりません。裏を返せば、新しいファイルが古いファイルと同じ構造で、同じステップで読めることが前提です。
今回(詳細エディター)は、ローデータそのものが新しくなったときの対応です。実務で新しいローデータが届くと、シート名が変わっていたり、列が増えていたり、テーブル化されていたりと、Power Queryで取り込むステップ自体が旧データと食い違うことがあります。
このとき、前回の方法でデータソースだけを切り替えると、古いステップが新しいファイルに合わず、エラーになってしまいます。詳細エディターで新しいファイルのコードをそのまま持ってくれば、ステップごと新しいデータに合わせて切り替えられます。
「置き場所が変わっただけならデータ ソース設定、中身が変わったなら詳細エディター」と覚えておいてください。
この2つの操作ができれば、ビジュアル内のグラフや数値が突然消えてしまっても、どちらかの操作で復元できるはずです。普段見えているダッシュボードが見られなくなると、一瞬焦りますが、落ち着いて前回または今回のレッスンを振り返ってみてください。