財務DX / Power BI Dashboard作成シリーズ
はじめに
前回のVol.2記事では、Power BI Desktopのインストールと画面構成をご紹介しました。リボン、レポートキャンバス、データペインなど、基本的なパーツの役割はイメージできたのではないでしょうか。
今回は、いよいよデータを取り込んでいきます。使用するのは Power Query です。サンプルデータを読み込み、ヘッダーの設定やデータ型の確認・変更、KPI計算に必要な列の追加までを行い、レポート作成の土台となるデータを準備します。
Vol.1記事でも触れましたが、Power Queryの大きな特徴の一つは、行ったデータ変換を「ステップ」として記録してくれることです。今回作成する変換手順は、翌月以降に新しいデータが届いたときも、そのまま再利用できます。一度整えてしまえば、毎月ゼロから同じ作業を繰り返す必要はありません。
スクリーンショットについて
本シリーズでは、日本語版・英語版の記事で共通のスクリーンショットを使用するため、掲載しているPower BI Desktopのスクリーンショットは英語表示で統一しています。本文ではメニュー名や操作内容を日本語でも併記しているため、日本語版Power BI Desktopをご利用の場合でも、そのまま読み進められます。
今回使用するデータ
実務では、分析に必要なデータが複数のCSVファイルやデータベースのテーブルに分かれて管理されていることが多いです。Power BIでは、それらを取り込んで1つのデータモデルとして分析します。
今回使用するサンプルデータも、そのような実務をイメージして作成しています。学習しやすいようシンプルな構成にしていますが、Power BIで複数のテーブルを扱う基本的な流れを体験できます。
KPI Dashboard作成用サンプルデータをダウンロード
| ファイル名 | 内容 | 主な列 |
|---|---|---|
| Dim_line_name.csv | 生産ラインのマスタ | LineName(ライン名) |
| Fact_monthly_kpi.csv | 月次の売上・原価データ | Year/Month(年月)、Line Name(ライン名)、Net Sales(売上高)、COGS(売上原価)、SG&A(販管費) |
| Fact_defect_rate.csv | 不良率算出用データ | Year/Month(年月)、Line Name(ライン名)、Production Quantity(生産数量)、Defect Quantity(不良数量) |
| Fact_equipment_utilization.csv | 設備稼働率データ | Year/Month(年月)、Line Name(ライン名)、Utilization Rate(稼働率)、Target Utilization Rate(稼働率_目標) |
| Fact_inventory_turnover.csv | 在庫回転率データ | Year/Month(年月)、Line Name(ライン名)、Product Category(製品カテゴリ)、Beginning Inventory(期首在庫高)、Purchases(当期仕入高)、Ending Inventory(期末在庫高)、COGS(売上原価)、Target Inventory Turnover(在庫回転率_目標) |
Step 1:Power Queryで最初のCSVファイルを取り込む
「Home(ホーム)」タブから「Get data(データを取得)」→「Text/CSV(テキスト/CSV)」を選択します。

「Connect to data source(データ ソースへの接続)」画面で 「Browse(参照)」 をクリックし、対象のフォルダから一つ目のサンプルファイルDim_line_name.csvを選択して「 Open(開く) 」をクリックします。続いて表示される画面で「 Next(次へ)」 をクリックします。

「Preview file data(ファイル データのプレビュー)」画面が表示されたら、「Transform data(データの変換)」 をクリックします。

Step 2:ヘッダーと列名を整える
Power Query Editorが開くと、左側に「 Queries(クエリ) 」ペイン、右側に「 Query Settings(クエリの設定)」 ペイン、中央にデータの「Preview(プレビュー)」が表示されます。
データが取り込まれると、Power QueryはCSVの内容をもとに列名やデータ型を認識します。ただし、これらが正しく認識されない場合があります。今回は、取り込んだラインマスタの列名が「Column1」と表示されているため、「Home(ホーム)」タブの「Use First Row as Headers(1行目をヘッダーとして使用)」をクリックして、正しい列名を設定します。これにより、1行目の「LineName」が列名として設定されます。

この変換処理は、画面右側の「Applied Steps(適用したステップ)」に記録されます。今後、同じ構造のCSVファイルを読み込んでデータを更新すると、保存された変換処理が自動的に再実行されるため、毎回同じ操作を繰り返す必要はありません。

Step 3:残り4つのCSVファイルを取り込む
続いて、残り4つのCSVファイルも同じ手順でPower Queryへ追加します。
Power Query Editorの 「Home(ホーム)」 タブから「 New Source(新しいソース)」 → 「Text/CSV(テキスト/CSV)」 を選択し、以下のファイルを1つずつ読み込みます。
Fact_defect_rate.csvFact_equipment_utilization.csvFact_inventory_turnover.csvFact_monthly_kpi.csv
Power Queryに取り込まれた各CSVファイルの列名が正しく設定されていることを確認します。

5つすべて追加すると、「Queries(クエリ)」ペインに5つのクエリが表示されます。

Step 4:データ型を確認する・整える
データを取り込むと、Power Queryは各列の内容をもとにデータ型を自動的に設定しますが、ただし、データの内容によっては意図したデータ型にならない場合があります。データ型が正しくないと、後の計算やDAX、リレーション設定でエラーの原因になるため、取り込み後に必ず確認しましょう。
修正する場合は、列名左側の「データ型アイコン」をクリックして変更します。
主なデータ型アイコンは以下のとおりです。
- ABC:Text(テキスト)
- 123:Whole Number(整数)
- 1.2:Decimal Number(小数)
- :Date(日付)
今回は例として Fact_monthly_kpi テーブルで確認しますが、他のテーブルも同様に確認・修正してください。

Step 5:KPI計算用のカスタム列を追加する
KPIダッシュボードでは、主にDAXを使って計算を行います。ただし、本シリーズではPower Queryの基本操作も学ぶため、まずはPower Queryの「カスタム列」を使ってKPI計算に必要な列を作成します。
1.Defect Rate (不良率)列を作成する(Fact_defect_rateテーブル)
Fact_defect_rateクエリを選択し、「Add Column(列の追加)」タブ → 「Custom Column(カスタム列)」をクリックします。出てきた画面の「New column name(新しい列名)」フィールドに「Defect Rate」、「Custom column formula(カスタム式)」フィールドに以下の計算式を入力します。
[Defect Quantity]/[Production Quantity]
計算式は、右側の「Available columns(使用できる列)」から対象列をダブルクリックすることで自動入力できます。

作成後、Defect Rate列の「Data type(データ型)」を「Percentage(パーセンテージ)」に変更します。

2.Inventory Turnover (在庫回転率)列を作成する(Fact_inventory_turnoverテーブル)
Fact_inventory_turnoverクエリを選択し、同様にカスタム列を追加します。
「New column name(新しい列名)」に「Inventory Turnover」、「Custom column formula(カスタム式)」には以下の計算式を入力します。
[COGS]*12/(([Beginning Inventory]+[Ending Inventory])/2)
この式では、月次の売上原価(COGS)を12倍して年間換算し、平均在庫高(期首在庫高と期末在庫高の平均)で割ることで、年間の在庫回転率を算出しています。今回は月次データを使用しているため12倍していますが、年間データを使用する場合は換算する必要はありません。

作成後、「Data type(データ型)」 を「 Decimal number(10進数)」に変更します。

3.Operating Margin (営業利益率)列を作成する(Fact_monthly_kpiテーブル)
最後に、Fact_monthly_kpiクエリにもカスタム列を追加します。
「Add Column(列の追加)」タブ →「Custom Column(カスタム列)」をクリックします。
「New column name(新しい列名)」に「Operating Margin」、「Custom column formula(カスタム式)」に以下の計算式を入力します。
([Net Sales]-[COGS]-[SG&A])/[Net Sales]

作成後、「Operating Margin」列の「Data type(データ型)」 を「Percentage(パーセンテージ)」に変更します。

Step 6:閉じて適用する
すべてのクエリの編集が終わったら、「Home(ホーム)」タブの「Close & Apply(閉じて適用)」 をクリックします。

Power Query Editorが閉じ、設定した変換内容がPower BI Desktopのデータモデルへ適用されます。
「Data(データ)」ペインに5つのテーブルが表示されていれば、データ準備は完了です。

Step 7:Power BI Desktopでデータ型と表示形式を最終確認する
Power Queryでデータ型を設定していても、Power BI Desktopでデータ型や表示形式が意図した状態になっているかを確認します。
Power Queryはデータの加工・変換を行う機能であり、Power BI Desktopではデータモデル上のデータ型や表示形式を管理します。そのため、レポート作成前に最終確認しておくことが重要です。
Power BI Desktopの「Column tools(列ツール) タブ」では、列名・データ型・表示形式などを確認・変更できます。
例として Fact_monthly_kpi テーブルの設定を確認します。
- 「Year/Month」列
「Data type(データ型)」 を 「Date(日付)」に 、「Format(表示形式) 」を 「Short Date(短い日付形式)」など、年月が分かりやすい形式に変更します。 - 「Operating Margin」列
「Data type(データ型)」 を 「Decimal number(10進数) 」に設定し、「Format(表示形式) 」を 「Percentage(パーセンテージ)」 に設定します。
同様に、Fact_defect_rate、Fact_equipment_utilization、Fact_inventory_turnoverテーブルについても、各列のデータ型と表示形式を確認し、必要に応じて修正してください。
データ型や表示形式を整えておくことで、後で作成するレポートで数値やグラフが見やすい形で表示されます。


Step 8:Power BIファイルを保存する
ここまでの作業が完了したら、Power BIファイルを保存します。
「File(ファイル)」→「 Save As(名前を付けて保存)」 を選択し、ファイル名を「KPIDashboard」として保存します。
今回は最後に保存していますが、実務では作業開始時にファイル名を付けて保存し、作業中も「 Ctrl + S 」でこまめに保存することをおすすめします。
次回以降は、この KPIDashboard ファイルを使用してレポート作成を進めていきます。

よくある質問(FAQ)
1. Inventory Turnover(在庫回転率)の計算式で「12倍」しているのはなぜですか?
在庫回転率は本来、年間の売上原価を平均在庫高で割ることで算出する指標です。
しかし、今回使用しているデータは月次(1ヶ月分)の売上原価のため、そのまま計算すると実際の年間ベースの回転率より小さい数値になってしまいます。そこで、月次の売上原価を「×12」して年間換算した上で計算しています。
もし年間データ(すでに1年分が集計された売上原価)を使う場合は、この「×12」は不要です。データの単位(月次か年次か)に合わせて、換算が必要かどうかを都度確認するようにしましょう。
2. Defect Rate(不良率)やOperating Margin(営業利益率)の列がPercentageで表示されないのはなぜですか?
Power Queryでカスタム列を作成すると、計算結果は数値として認識されます。そのため、不良率や営業利益率のような割合を表す列でも、意図したデータ型や表示形式にならない場合があります。
割合として扱う列を作成した場合は、列を追加した後に「Data type(データ型)」や「Format(表示形式)」を確認し、必要に応じて「Percentage(パーセンテージ)」へ変更しましょう。
なお、Power QueryとPower BI Desktopでは設定方法が異なります。Power Queryでは主に「Data type(データ型)」を設定しますが、Power BI Desktopでは「Data type(データ型)」に加えて「Format(表示形式)」も設定できます。詳しくはStep5・Step7を参照してください。
3. Power Queryで計算する列と、DAXで作るメジャーは何が違うのでしょうか?
Power Query列は、更新(リフレッシュ)のタイミングで計算され、結果がテーブルの値として固定的に保存されます。一方DAXメジャーは、レポート上でフィルターやスライサーが変わるたびに、その時点の集計結果をもとに動的に再計算されます。
4. 「Year/Month」列はなぜ日付型のまま残すのですか?
「Year/Month」のような列は、一見するとテキスト型で十分そうに見えるかもしれません。しかし日付型のまま保持しておくことで、後の工程でPower BIの「カレンダーテーブル」とリレーション(関連付け)を設定しやすくなります。
日付型の列は、年・四半期・月といった単位でのグループ化や、時系列でのグラフ表示、期間比較などの分析機能とも相性が良いため、Power BIでは日付を扱う列は基本的に日付型のまま保持しておくことをおすすめします。表示形式(見た目の書式)を変えたい場合は、データ型そのものを変えるのではなく、Format(表示形式)の設定で調整します。
5. Power Queryで複数のCSVファイルを一度に取り込むことはできますか?
はい。同じ形式のCSVファイルをまとめて取り込む場合は、「Folder(フォルダー)」コネクタを利用できます。Power Queryがフォルダー内のファイルを自動的に読み込み、結合してくれるため、毎月追加されるCSVファイルの処理を自動化できます。
一方、本記事で使用している5つのCSVファイルは、それぞれ構造や用途が異なるため、1ファイルずつ取り込んでいます。
まとめ
今回は、Power Queryを使って5つのCSVファイルを取り込み、ヘッダーの設定やデータ型の確認・変更、さらにKPI計算に必要なカスタム列の追加を行いました。
Power Queryでは、一度作成した変換手順がステップとして保存されるため、同じ形式のCSVファイルであれば、翌月以降は「更新」するだけで同じ処理を自動で実行できます。毎月のデータ準備を効率化できることは、Power Queryの大きなメリットです。
ここまでで、Power BIで分析・可視化を行うためのデータ準備が完了しました。
次回予告
次回のVol.4では、Calendarテーブルを新規作成し、5つのテーブルをリレーションで接続してPower BIのデータモデルを構築します。これにより、年月別・ライン別・製品カテゴリ別など、さまざまな切り口で正しく集計・分析できるようになります。DAXやDashboard作成の土台となる、重要なステップです。

