PowerAutomate

【Power BI応用】DAXクエリとは?自動で必要なデータを取得する方法! 

ミムチ

Power BIのレポートを直接見ればよいのですが、上司には必要な数値データだけを自動で通知したいですぞ…

パワ実

その場合、DAXクエリを使って、Power AutomateからPower BIサービスのデータを取得するのが良いかもしれません。

この記事では、Power BIのDAXクエリを使い、Power BIのセマンティックモデルから、必要なデータを取得する方法を解説します。

Power Automateと組み合わせることで、必要なデータを毎月自動でCSVファイルに出力したり、上司に通知したり等もできるので、ぜひ参考にしてください!

この記事でわかること
  1. Power BIのDAXクエリとは何か?
  2. DAXクエリを使った具体的な関数式の例
  3. Power Automateを使った、実践的なDAXクエリの活用方法

YouTube動画で見たいかたは、こちらからどうぞ!

Power BIのDAXクエリ

Power BIで使う2つの言語

Power BIで使う言語は主に、M言語と、DAXの2つがあります。

M言語とDAXの違い

M言語

  • Power Queryで、クエリの編集に使われる
  • データの取得、整形、クレンジング、結合等のETL処理を行う

DAX

  • Power BIで、メジャーや計算列、計算テーブルの作成に使われる
  • レポートや、データモデル上で、計算や集計を行う

M言語は以下のように、Power Queryでクエリの編集をする際に使われる言語です。

ミムチ

Power Queryエディタ上では、GUIで操作するだけですが、実体としては、このM言語でクエリが書かれているのですな…!

一方DAXは、Power BIで、メジャーや計算列、計算テーブルを作成する際に使う言語です。

パワ実

レポートやデータモデル上で、計算や集計を行う際に便利ですね!

DAXクエリとは?

DAXクエリとは、DAXの関数を使って、Power BIのデータモデルから必要な情報をテーブルとして取得するための問い合わせ文です。

SQLのSELECT文に近いイメージで使えます。

例えば左のような売上データがあるとします。

DAXクエリで、EVALUATE、CALCULATETABLE関数を使い、条件を指定するだけで、右の表のように、必要なデータだけを取り出すことができます。

パワ実

ここでは、2024年5月のデータだけを抽出した例です。

DAXクエリでは、EVALUATEを必ず初めに書く必要がありますが、これは、SQLでいうSELECTのイメージですね。

DAXクエリビューの使い方

Power BIデスクトップのDAXクエリビューを使えば、実際にDAXクエリを実行して、結果を確認することができます。

取得したテーブルをそのまま確認できるので、クエリのテストや、データの中身を確認したいときに役立ちます。

今回準備したデータ

Power BIデスクトップを開きます。

今回は以下のように、売上データと、製品マスタのデータを取り込み、DAXで、日付テーブルを作成しました。

売上データ

製品マスタ

日付テーブル

データモデルは、以下のように、スタースキーマの設計でリレーションシップを作成しています。

スタースキーマの概念については、以下の記事をご参考ください。

【Power BI入門】リレーションシップでどんなデータモデルにすればよいのか?~スタースキーマを理解する~ この記事では、Power BIのデータモデルの考え方について、スタースキーマの概念と合わせて解説します。 Power ...

DAXクエリビューの使い方

DAXクエリビューを開くと、以下のように、DAXクエリを記載する場所と、実行ボタン、クエリの実行結果を表示する場所があります。

DAXクエリは、必ずEVALUATEから始まります。

①テーブルのデータを全件取得する

試しに、製品マスタのデータを全て取得するDAXクエリを書いてみます。

EVALUATE
    'dim_製品'

これで実行ボタンを押すと、’dim_製品’テーブルのデータがすべて取得された結果が、下に表示されます。

②必要な列の選択と、列名の変更

次に、’dim_製品’テーブルから、製品名、カテゴリ、単価の列のみ取得し、列名も分かりやすく変えてみます。

EVALUATE
SELECTCOLUMNS(
    'dim_製品',
    "製品名", 'dim_製品'[製品名],
    "カテゴリ", 'dim_製品'[カテゴリ],
    "単価", 'dim_製品'[単価]
)

実行してみると、以下のように、指定した3つの列を、指定した列名で取得できます。

③条件を絞ってデータを取得

今度は、売上データから条件を絞ってデータを取得してみます。

まずは、売上データを取得してみます。

EVALUATE
	'fact_売上'

この売上データの中で、2024年4月のデータのみを抽出してみます。

EVALUATE
CALCULATETABLE(
    'fact_売上',
    YEAR( 'fact_売上'[日付] ) = 2024,
	MONTH('fact_売上'[日付]) = 5
)

実行してみると、このように、2024年4月のデータのみを取得できます。

④降順/昇順にソートする

また、よく使う関数としては、降順・昇順にソートする関数があります。

例えば、製品テーブルを、単価列で、降順にソートすることができます。

EVALUATE
SELECTCOLUMNS(
    'dim_製品',
    "製品名", 'dim_製品'[製品名],
    "単価",   'dim_製品'[単価]
)
ORDER BY [単価] DESC

降順にしたい場合は、DESC、昇順にしたい場合はASCを使えばOKです。

EVALUATE
SELECTCOLUMNS(
    'dim_製品',
    "製品名", 'dim_製品'[製品名],
    "単価",   'dim_製品'[単価]
)
ORDER BY [単価] ASC

⑤DAXクエリ内でメジャーを作成する

さらに、DAXクエリ内で使うメジャーを作成することもできます。

このとき、DEFINEと記載し、メジャーの場合、MEASUREと記載し、以下のように書くと、’fact_売上テーブル’に[Qty](売上数量)のメジャーを作成できます。

DEFINE
    MEASURE 'fact_売上'[Qty] = SUM('fact_売上'[数量])

例えばこのメジャーを使って、製品ごとの売上数と、売上額を取得したいとします。

⑥グループ化して集計する

製品ごとの売上数と、売上額の集計値を取得します。

売上額を計算するメジャーは、このように、DAXクエリ内ではなく、あらかじめデータ上で、Sales Amountというメジャーを作成しています。

Sales Amount = 
SUMX(
    'fact_売上',
    'fact_売上'[数量] * RELATED('dim_製品'[単価])
)

DAXクエリでは、SUMARIZECOLUMNSという関数を使い、このような関数式を書けば、製品ごとの売上数量と、売上額を、メジャーを使って抽出できます。

DEFINE
    MEASURE 'fact_売上'[Qty] = SUM('fact_売上'[数量])

EVALUATE
SUMMARIZECOLUMNS(
    'dim_製品'[製品名],
    "Qty",[Qty],
    "Sales Amount",  [Sales Amount]   -- 既存メジャーを利用
)
ORDER BY [Sales Amount] DESC

製品ごとの売上数、売上額の合計値が取得できました。

このような感じで、DAXクエリビューを使って、DAXクエリを実行し、結果を確認することができました。

パワ実

DAXクエリを書く際は、ChatGPT等の生成AIも活用するとよいと思います!

Power AutomateからDAXクエリを実行する方法

さらに実践的なDAXクエリの使い方として、Power Automateとの連携を紹介します。

Power Automateを使うと、Power BIサービスに発行しているセマンティックモデルに対してDAXクエリを実行し、必要なデータを取得し、そのデータをTeamsに通知したり、CSVで出力したり等ができます。

事前準備

1.Power BIデスクトップでレポートを作成し、Power BIサービスに発行します。

パワ実

Power Automateから、Power BIのデータにアクセスしたい場合、必ずPowre BIサービスに発行しておきましょう。

以下のように、Power BIのワークスペースに発行されたセマンティックモデルに対して、Power Automateから、DAXクエリを実行することができます。

Power BIのテーブルを全件取得し、CSVに出力する

まずは、Power BIのセマンティックモデルから、売上データを全件取得して、CSV出力するフローを作ってみます。

1.Power Automateを開き、「Power BI」コネクタ>「データセットに対してクエリを実行する」アクションを追加します。

2.ワークスペース、データセットを指定し、クエリテキストは、売上データを全件取得するため、以下のように記載します。

EVALUATE
'fact_売上'

ここで全角スペース等を入れると、クエリの実行が失敗してしまうので、インデントをつけずにクエリを入力した方が良いかもしれません。

2.「データ操作」>「CSVテーブルを作成」アクションを追加し、「From」に動的なコンテンツから、Power BIの「最初のテーブル行」を設定します。

3.「SharePoint」コネクタ>「ファイルの作成」アクションを追加し、ファイルの格納先、ファイル名、ファイルコンテンツを指定します。

ファイル名には例えば頭に、以下のように関数式を設定すると、フローを実行した日付がファイル名の頭につきます。

formatDateTime(addHours(utcNow(), 9), 'yyyyMMdd_')

CSVファイルの作成の注意点として、ファイルコンテンツにそのままCSVテーブルの作成の出力を動的なコンテンツで設定すると、文字化けしてしまうので、以下のように関数式を設定します。

concat(decodeUriComponent('%EF%BB%BF'),body('CSV_テーブルの作成'))

4.これでフローは完成なので、テスト実行すると、SharePointフォルダに、売上データのCSVファイルが出力されます。

5.ファイルを開くと、以下のように売上データが出力されています。

ミムチ

Power BIのセマンティックモデルから、データを自動で取得&出力できましたぞ!

Power BIから必要なデータを取得し、Teams通知する

次は、DAXクエリビューで実行した、製品ごとの売上数と売上額のデータを、Teams通知してみます。

1.DAXクエリビューでテストしたクエリをコピーします。

DEFINE
MEASURE 'fact_売上'[Qty] = SUM('fact_売上'[数量])
EVALUATE
SUMMARIZECOLUMNS(
'dim_製品'[製品名],
"Qty",[Qty],
"Sales Amount",  [Sales Amount]
)
ORDER BY [Sales Amount] DESC

2.Power Automateで、「Power BI」コネクタ>「データセットに対してクエリを実行する」アクションを追加し、クエリテキストに、コピーしたDAXクエリを貼り付けます。

パワ実

インデントは削除しておきましょう。

ここで取得されたデータを、後から動的なコンテンツとして使いたい場合も多いのですが、クエリの実行による出力は、指定したクエリによってフォーマットが異なるため、動的なコンテンツでは表示されません。

こういったときに、JSONの解析が便利です。

3.一旦ここまでのフローを、テスト実行します。

4.実行結果で、Power BIの「未加工の出力を表示する」から「FirstTableRows」の[…](アレイのデータ)部分をコピーしておきます。

5.編集画面に戻り、「データ操作」>「JSONの解析」アクションを追加します。

「Content」には、動的なコンテンツから、Power BIの「最初のテーブル行」を設定し、「サンプルペイロードを使用してスキーマを生成する」を選択します。

6.先ほど実行履歴でコピーしたアレイ型のデータ(FirstTableRows)を貼り付け、「完了」をクリックします。

7.すると、実際に出力されたデータをもとに、JSONのスキーマを自動で作成してくれます。

このJSONの解析をすることで、後のアクションで、JSONの解析の動的なコンテンツとして、Power BIからクエリ実行で取得したデータを使うことができます。

全体としては、以下のようなフローを作成しました。

8.最初に「変数を初期化する」アクションを追加し、文字列型の変数を用意します。

9.JSONの解析アクションの後に、「それぞれに適用する」アクションを追加し、動的なコンテンツから「JSONの解析」の出力を設定します。

10.ループ内で、「文字列変数に追加」アクションを追加し、、製品ごとの売上データを以下のように、1行ずつ、htmlで追加していきます。

11.最後に、Teamsチャットに製品ごとの売上データの変数を設定します。

12.テストすると、以下のように、製品ごとの売上データをTeamsチャットで通知することができます。

このように、Power Automateと連携し、Power BIのDAXクエリを使うと、様々なデータを自由に取得し、業務の自動化に組み込むことができます。

パワ実

とても便利なので、ぜひ試してみてください!

さいごに

本日は、Power BI のDAXクエリを使い、必要なデータを取得する方法を解説しました。

DAXクエリを使うと、Power BIのセマンティックモデルから、SQLクエリのように、必要なデータをテーブルで取得することができます。

さらにPower Automateと連携することで、自動で必要なデータのみを取得し、Teams通知する等も実現できます。

パワ実

例えば、上司に毎月、必要なデータだけを報告したいというときにも便利なので、ぜひ使ってみてください!

ABOUT ME
パワ実(Microsoft MVP)
2021年からPower Platformの勉強中。 2023年にIT系・コンサルタントに転職し、仕事でPower Platformを活用したコンサルを行っています。 2025年~Microsoft MVP for Business Applications 受賞。Power Platformを使っていく中で、知りえた情報をブログ、Youtube、Xで発信しています。 2025年8月~現在は、フリーランスとして、Power Platform系ITコンサルタントとして活動中。 Power Platformに関するご相談は以下のページからお願いします! https://www.powerplatformknowledge.com/contact/

Power Platformのご依頼・ご相談について

Power Platformについてのご相談、お仕事のご依頼については、
こちらのお問い合わせページをご確認ください。