Power BIで速報をTeamsに通知したい!
そういうニーズのための仕組みを考えてみました。Power BIには閾値を超えた場合のお知らせの仕組みがありますが、もっと自在な通知を送りたいという方はPower Automateとの組み合わせを試してみてはいかがでしょうか? 案外簡単です。
この記事では以下を例にして通知の仕組みを作ってみます。
サンプルファイル
練習のためにPowre BIの標準サンプルファイルを使ってみます。
Power BI Desktopを起動したら「サンプルデータの使用」をクリックします。

メジャーを作る
取得したサンプルデータをつかって、試しに上記のような表を作りました。
Salesが前月比プラスマイナス30%を超えていたら色を付けています。
以下が使用したメジャーのDAX式です。
サンプルデータはDateの日付が古すぎるので補正して使います。
モデリング>新しい列 から下記を追加してください。最新日付のデータが今日になります。
補正Date =
VAR MaxDateInData =
CALCULATE(
MAX(financials[Date]),
ALL(financials)
)
VAR OffsetDays =
TODAY() - MaxDateInData
RETURN
financials[Date] + OffsetDays
あとは売上関連のメジャーを追加します。
当月Sales =
SUM(financials[Sales])
前月Sales =
CALCULATE(
SUM(financials[Sales]),
PREVIOUSMONTH(financials[補正Date])
)
前月比(%) =
DIVIDE(
[当月Sales] - [前月Sales],
[前月Sales]
)
色がつく行を判定するために対象は1/0となるようなメジャーを作りました。
増減30%以上_Flag =
IF(
ABS([前月比(%)]) >= 0.3,
1,
0
)
フィルターをかける
アイテムに対するフィルタを使って、直近6か月の30%フラグが立っているものだけが表示されれるようにします。このテーブルはPower Automateに情報を伝えるためのものですので、Power BIへの表示には全行表示しておきたいような場合は、コピーしたものにフィルタをつけるようにしてください。
非表示のページなどに置いておくとよいでしょう。
ちなみに、このフィルタの値はPower Automateの時点で可変にできます。

パフォーマンスアナライザーで表のDAXを取得する
最適化>パフォーマンスアナライザー>記録の開始>ビジュアルを更新します の順にクリックして、表を構成するDAXクエリを取得します。

パフォーマンスアナライザーの停止をクリックしたあと、「DAXクエリビューで実行」をクリックしてみます。

これで表を構成するDAXクエリを取得することができました。
中身を見てみると、先ほどかけたフィルタ部分に日付がはいっているのがわかります。Power Automateでこの部分の値を差し替えてやることでコントロールができそうです。
DEFINE
VAR __DS0FilterTable =
FILTER(
KEEPFILTERS(VALUES('financials'[補正Date])),
AND(
'financials'[補正Date] >= DATE(2025, 10, 30),
'financials'[補正Date] < DATE(2026, 4, 30)
)
)
VAR __ValueFilterDM0 =
FILTER(
KEEPFILTERS(
SUMMARIZECOLUMNS(
'financials'[補正Date],
__DS0FilterTable,
"前月Sales", 'financials'[前月Sales],
"前月比___", 'financials'[前月比(%)],
"当月Sales", 'financials'[当月Sales],
"増減30_以上_Flag", 'financials'[増減30%以上_Flag]
)
),
[増減30_以上_Flag] = 1
)
VAR __DS0Core =
SUMMARIZECOLUMNS(
'financials'[補正Date],
__DS0FilterTable,
__ValueFilterDM0,
"前月Sales", 'financials'[前月Sales],
"前月比___", 'financials'[前月比(%)],
"当月Sales", 'financials'[当月Sales],
"増減30_以上_Flag", 'financials'[増減30%以上_Flag]
)
VAR __DS0PrimaryWindowed =
TOPN(501, __DS0Core, 'financials'[補正Date], 0)
EVALUATE
__DS0PrimaryWindowed
ORDER BY
'financials'[補正Date] DESC
Power BIサービスに発行する
今回はデータがローカルファイルですが、本来はSharePoint上などに売上データがアップロードされて、Power BIサービス上でセマンティックモデルがデータを吸い上げるような動作をイメージしています。
更新はできませんがPower BI Desktopからサービスへ発行します。

Power Automateクラウドフローを作る
プラスマイナス30%以上の報告
新規フローを立ち上げたら、「データセットに対してクエリを実行する」アクションから、再程発行したワークスペースとデータセット(セマンティックモデルのことです)を選択します。
クエリテキストには、先ほどコピーした表を構成するDASクエリを貼り付けます。

早速保存してテスト実行してみると、先ほどフィルタをかけて絞り込んだ後の表の値が取得できていることがわかります。

[
{
"financials[補正Date]": "2026-04-29T00:00:00",
"[前月Sales]": 5384214.2,
"[前月比___]": 1.2285123611909794,
"[当月Sales]": 11998787.9,
"[増減30_以上_Flag]": 1
},
{
"financials[補正Date]": "2026-03-30T00:00:00",
"[前月Sales]": 12375819.920000004,
"[前月比___]": -0.5649408091904429,
"[当月Sales]": 5384214.2,
"[増減30_以上_Flag]": 1
},
{
"financials[補正Date]": "2026-02-27T00:00:00",
"[前月Sales]": 6398697.24,
"[前月比___]": 0.9341155638112365,
"[当月Sales]": 12375819.920000004,
"[増減30_以上_Flag]": 1
}
]
選択アクションを使って整理
数字の桁数などがややこしいので、選択アクションを使って整理します。

ちなみに、少数の切り捨て操作はint関数やround関数ではなく、formatnumber関数を使います。はまりポイントです。はまりました・・・。
こちらを参考にさせていただきました。
formatDateTime(item()?['financials[補正Date]'],'yyyy/MM/dd')
formatNumber(item()?['[当月Sales]'], 'F0')
formatNumber(item()?['[前月Sales]'], 'F0')
replace(
concat(
formatNumber(mul(item()?['[前月比___]'], 100), 'F2'),
'%'
),
'-',
'▼'
)
選択アクションを通した後の結果はこのようになります。
[
{
"日付": "2026/04/29",
"当月売上": "11998788",
"前月売上": "5384214",
"前月比": "122.85%"
},
{
"日付": "2026/03/30",
"当月売上": "5384214",
"前月売上": "12375820",
"前月比": "-56.49%"
},
{
"日付": "2026/02/27",
"当月売上": "12375820",
"前月売上": "6398697",
"前月比": "93.41%"
}
]
HTMLテーブルにする
選択アクションの結果をHTMLテーブルの作成アクションに渡してやるときれいな表になります。

Teamsで送信
あとは作成できたテーブルをメールやTeamsメッセージで送信するだけです。

取得範囲の日付を動的に指定する
クエリに指定されている日付範囲が固定になっていましたので、この部分を関数で指定しました。

addDay関数は日付を足したり引いたりでき、ついでにフォーマットも指定できます。
クラウドフローが動作した日を基準に何日前かを指定できるので、適当に調整してみてください。
addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),1,'yyyy,MM,dd')
addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),-6,'yyyy,MM,dd')
日付の操作については、以前にこちらで記事を書いたことがあるので、よかったら参考にしてください。
まとめ
Power BIのデータは案外簡単にPower Automateに持ってこれることが分かったと思います。
テーブルを構成するDAXを取得する前に、取得したいフィルタをかけておくとフィルタの内容もDAXの中に含まれます。Power Automateではその値を動的に操作できるので、かなり自由がききそうです。
こんな人が書いています
こちらの記事はランゲルハンス島のDDさんが紹介しました。ブログでクラウドフローのTIPSのようなものを書いたり、Qiita記事を書いたりしていますのでご贔屓に。
フォローやいいねいただけると嬉しいです。
関西のPowerPlatform系の勉強会にときどき出没しますので、「あのアイコンの顔の人だ!」と、気軽に声をかけていただけると喜びます!




