見出し画像

Power BIでインサイトを抽出!データ分析の第一歩~データ連携を効率化!LOOKUPVALUE関数とRELATED関数の活用法~(Day6)


はじめに

Power BI Desktopは、ビジュアライゼーションとレポート作成のための強力なツールです。しかし、使い方が分からない、使い始めるための適切なデータが手元にない、といった理由でPower BIの活用に踏み出せない方も多いかもしれません。本ブログでは、サンプルデータを提供し、Power BIを使用したレポートやダッシュボードの構築方法を連載形式で解説していきます。
本記事はDay6です。Day1から構築したPower BIファイルを引き続き設定していきます。
※前回の記事はこちら。

最終的なGOALイメージ
ダッシュボードを完成させるまでのプロセスを、複数回にわたるハンズオン形式のブログでわかりやすく説明します。

概要(目的・背景)

Power BI Desktopは、データの可視化や分析を効率的に行うための強力なツールです。特に、データモデリングにおいて「カスタム列」の作成やDAX関数の活用は、データの結合や参照を柔軟に行う上で欠かせません。本記事では、ExcelのVLOOKUP関数に相当する機能をPower BIで実現する方法として、「カスタム列」の作成とDAX関数「LOOKUPVALUE関数」「RELATED関数」の使い方を詳しく解説します。これにより、複数のテーブル間でのデータ参照や結合を効果的に行う方法を学びます。

読み手(誰に向けた記事か?)

この記事は、下記のような読者を想定しています。
• Power BI初心者: 初めてPower BI Desktopを使う方々
• データ分析の学習者: データモデリングやDAX関数の活用方法を深めたい方々
特に、ExcelのVLOOKUP関数に慣れ親しんでおり、それと同様の機能をPower BIでどのように実現できるかを知りたい方に最適な内容です。

ブログの目標設定(具体的な目標)

本ブログは、サンプルのデータを使ってハンズオンを行いながら、目標をクリアします。実際に動作確認を行いながら、Power BIの使い方を習得しましょう。この記事の目標は、以下の通りです。
1.Power BIで「カスタム列」を作成する手順を理解し、実際に作成できるようになること。
2.DAX関数「LOOKUPVALUE関数」と「RELATED関数」の構文と使用方法を理解し、適切な場面で活用できるようになること。
3.複数のテーブル間でのデータ参照や結合を、Power BI上で効果的に行えるようになること。
これらの目標を達成することで、データモデリングの効率化と高度なデータ分析が可能となり、業務の生産性向上に寄与します。

方法(アプローチ・使用技術)

カスタム列の説明
カスタム列とは、既存のデータに新たな計算結果や情報を追加するための機能です。カスタム列は静的なデータであり、レポートのユーザー操作によって変更されることはありません。また、DAXで全てを構築するのではなく、カスタム列を活用することで、データ構成をより分かりやすく整理することができます。
※一般的に「カスタム列を増やしすぎるとパフォーマンスに影響を与える」と言われていますが、私の経験では、数百万~千万行規模のデータセットでない限り、顕著なパフォーマンス劣化が発生することは少ないと考えられます。


今回実装したいこと
「Salesテーブルに「利益(Profit)」の列を追加すること」です。
➊.説明の流れは、Step毎に分割して説明します。
 Step1.ExcelのVLOOKUPの要領でSalesテーブルにCost Price(1個当たりの原価)を追加する
 Step2.原価合計(数量×1個当たりの原価) を算出する
 Step3.利益(売上-原価)を算出する
 Step4.Step1~Step3を1つの構文にまとめる

Step1.ExcelのVLOOKUPの要領でSalesテーブルにCost Price(1個当たりの原価)を追加する

Cost Price =LOOKUPVALUE('ProductMaster'[Cost Price],ProductMaster[Item No.],'Sales'[Item No.])

Step2.原価合計(数量×1個当たりの原価) を算出する

Cost = ‘Sales’[Quantity] * 'Sales'[Cost Price]

Step3.利益(売上-原価)を算出する

Profit = 'Sales'[Price] - 'Sales'[Cost]

Step4.Step1~Step3を1つのコードにまとめる

Profit = 
VAR CostPrice = LOOKUPVALUE('ProductMaster'[Cost Price],ProductMaster[Item No.],'Sales'[Item No.])
VAR Cost = CostPrice * Sales[Quantity]
VAR Profit = 'Sales'[Price] - Cost
RETURN Profit

➋「LOOKUPVALUE関数」と「RELATED関数」について
前述した方法は、LOOKUPVALUE関数を用いて説明しました。Power BIはExcelとは違い、データベースのリレーション設定を行っているため、「RELATED関数」を用いて、同様の結果を得ることができます。

今回はSalesテーブルとProductMasterテーブル間でリレーションシップが設定されているため、簡潔でわかりやすいRELATED関数を利用します。

➊・➋の結果から、「Salesテーブルに「利益(Profit)」の列を追加したい」は、以下のコードを使用して構築します。

Profit = 
VAR CostPrice = RELATED(ProductMaster[Cost Price])
VAR Cost = CostPrice * Sales[Quantity]
VAR Profit = 'Sales'[Price] - Cost
RETURN Profit

これまでの検討結果をPower BI Desktopへ設定します。
1.テーブルビューを選択する。

2.「Sales」テーブルを選択する。

3.テーブルツールタブから「新しい列」ボタンを押下する。

4.コードを入力する。入力後Enterキーを押下する。

Profit = 
VAR CostPrice = RELATED(ProductMaster[Cost Price])
VAR Cost = CostPrice * Sales[Quantity]
VAR Profit = 'Sales'[Price] - Cost
RETURN Profit

5.右メニューに「Profit」が表示されることを確認する。

カスタム列の説明と設定は以上です。


以降では、次回の「ビジュアル設定」に向けて、SalesテーブルにDAXの設定を追加します。具体的には、全店舗売上合計と店舗ごとの利益と利益率を計算するDAXを設定します。
以下の設定内容を追加で登録してください。
なお、設定作業はDay5で説明したCALCULATE関数の手順と同じです。

・[Store No.]=1001の利益(Profit)を「新しいメジャー」より設定する

profit_shinjyuku = CALCULATE(
    sum(Sales[Profit]),
    'Sales'[Store No.]=1001
)

書式は以下の設定で登録する。

・[Store No.]=1002の利益(Profit)を「新しいメジャー」より設定する

profit_shibuya = CALCULATE(
    sum(Sales[Profit]),
    'Sales'[Store No.]=1002
)

書式は以下の設定で登録する。

・[Store No.]=1003の利益(Profit)を「新しいメジャー」より設定する

profit_osaka = CALCULATE(
    sum(Sales[Profit]),
    'Sales'[Store No.]=1003
)

書式は以下の設定で登録する。

・[Store No.]=1004の利益(Profit)を「新しいメジャー」より設定する

profit_nagoya = CALCULATE(
    sum(Sales[Profit]),
    'Sales'[Store No.]=1004
)

書式は以下の設定で登録する。

・[Store No.]=1005の利益(Profit)を「新しいメジャー」より設定する

profit_sapporo = CALCULATE(
    sum(Sales[Profit]),
    'Sales'[Store No.]=1005
)

書式は以下の設定で登録する。

・[Store No.]=1001の利益率(%GrossProfit)を「新しいメジャー」より設定する

%_gross_profit_shinjyuku = DIVIDE('Sales'[profit_shinjyuku],'Sales'[price_shinjyuku])

書式は以下の設定で登録する。

・[Store No.]=1002の利益率(GrossProfit)を「新しいメジャー」より設定する

%_gross_profit_shibuya = DIVIDE('Sales'[profit_shibuya],'Sales'[price_shibuya])

書式は以下の設定で登録する。

・[Store No.]=1003の利益率(GrossProfit)を「新しいメジャー」より設定する

%_gross_profit_osaka = DIVIDE('Sales'[profit_osaka],'Sales'[price_osaka])

書式は以下の設定で登録する。

・[Store No.]=1004の利益率(GrossProfit)を「新しいメジャー」より設定する

%_gross_profit_nagoya = DIVIDE('Sales'[profit_nagoya],'Sales'[price_nagoya])

書式は以下の設定で登録する。

・[Store No.]=1005の利益率(GrossProfit)を「新しいメジャー」より設定する

%_gross_profit_sapporo = DIVIDE('Sales'[profit_sapporo],'Sales'[price_sapporo])

書式は以下の設定で登録する。

・全店舗売上合計を「新しいメジャー」より設定する

profit_sales = Sum(Sales[Price])

書式は以下の設定で登録する。

結果(成果と評価)

以下に、それぞれのアプローチの成果をまとめます。
カスタム列の活用:クエリエディタを利用して割引率を追加したことで、データの視覚的な加工や分析が簡単になりました。この方法は、DAX関数を使用せずにデータを加工したい場合に非常に有効です。
LOOKUPVALUE関数の使用:LOOKUPVALUE関数を用いることで、条件を指定して柔軟に値を取得することが可能となりました。この方法は、複数の条件で参照する必要がある場合や、複雑な条件付き結合が必要な場合に非常に有効です。
RELATED関数の使用:RELATED関数を用いた場合、既存のリレーションシップを活用することで、簡潔なコードでデータを取得することができました。この方法は、リレーションシップが既に定義されている場合に非常に有効です。
これらの成果を基に、複数のテーブル間でのデータ結合や参照が容易になり、データモデリングの効率化を実感することができました。

考察(学びと改善点)

この記事を通じて得ることができる学びは以下の通りです。
1.カスタム列の適用範囲の理解
カスタム列は、視覚的にデータを加工したい場合やDAX関数を使用しない場面で有効であることが分かりました。一方で、大規模データでは計算の効率性が課題となるため、場合によってはDAX関数に切り替えることが必要です。
2.LOOKUPVALUE関数とRELATE関数の使い分け
LOOKUPVALUE関数は、複数の条件を満たす行を参照する際に便利ですが、リレーションシップが定義されていない場合でも使用できる点が特徴です。一方、RELATED関数は既存のリレーションシップを活用するため、コードが簡潔である一方、リレーションシップの設定が前提条件となります。このため、プロジェクトの要件に応じて使い分けることが重要です。
3.リレーションシップの管理の重要性
RELATED関数を使用する際には、適切なリレーションシップの設定が重要であると再認識しました。リレーションシップの設定ミスやデータ不整合が発生すると、結果に大きな影響を及ぼします。
4.パフォーマンスの最適化
今回は小規模データでの実施だったため問題ありませんでしたが、大規模データセットで同じ操作を行う場合、パフォーマンスの最適化が必要です。たとえば、適切なインデックスを設定したり、必要に応じてデータモデルを簡素化するなどの工夫が考えられます。

まとめ(結論と今後の展望)

本記事では、Power BIにおける「カスタム列」とDAX関数「LOOKUPVALUE関数」「RELATED関数」を活用したデータモデリングの方法を紹介しました。これらを効果的に活用することで、複数テーブル間のデータ結合や参照が容易になり、分析業務の効率が大幅に向上します。
次回の記事では、ついにダッシュボードの画面構築に取り掛かります。
お楽しみに!

いいなと思ったら応援しよう!

Niwa Takuya
よろしければ、応援いただけると嬉しいです。いただいたチップは、執筆のためにライセンスの購入資金に充てさせていただきます。