4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power BIで閾値を超えたレポートをTeamsに表付きで知らせるPower Automateクラウドフローを作ってみた

4
Last updated at Posted at 2026-04-29

Power BIで速報をTeamsに通知したい!

そういうニーズのための仕組みを考えてみました。Power BIには閾値を超えた場合のお知らせの仕組みがありますが、もっと自在な通知を送りたいという方はPower Automateとの組み合わせを試してみてはいかがでしょうか? 案外簡単です。

この記事では以下を例にして通知の仕組みを作ってみます。

  • 前月比プラスマイナス30%越えのデータを通知する
    image.png

サンプルファイル

練習のためにPowre BIの標準サンプルファイルを使ってみます。
Power BI Desktopを起動したら「サンプルデータの使用」をクリックします。
image.png

「サンプルデータの読み込み」をクリックします。
image.png

メジャーを作る

image.png

取得したサンプルデータをつかって、試しに上記のような表を作りました。
Salesが前月比プラスマイナス30%を超えていたら色を付けています。

以下が使用したメジャーのDAX式です。
サンプルデータはDateの日付が古すぎるので補正して使います。
モデリング>新しい列 から下記を追加してください。最新日付のデータが今日になります。

補正Date
補正Date = 
VAR MaxDateInData =
    CALCULATE(
        MAX(financials[Date]),
        ALL(financials)
    )
VAR OffsetDays =
    TODAY() - MaxDateInData
RETURN
    financials[Date] + OffsetDays

あとは売上関連のメジャーを追加します。

当月Sales
当月Sales = 
SUM(financials[Sales])
前月Sales
前月Sales = 
CALCULATE(
    SUM(financials[Sales]),
    PREVIOUSMONTH(financials[補正Date])
)
前月比(%)
前月比(%) =
DIVIDE(
    [当月Sales] - [前月Sales],
    [前月Sales]
)

色がつく行を判定するために対象は1/0となるようなメジャーを作りました。

増減30%以上_Flag
増減30%以上_Flag =
IF(
    ABS([前月比(%)]) >= 0.3,
    1,
    0
)

ちなみに、セルへの色つけはこのような設定になっています。
image.png
image.png

フィルターをかける

アイテムに対するフィルタを使って、直近6か月の30%フラグが立っているものだけが表示されれるようにします。このテーブルはPower Automateに情報を伝えるためのものですので、Power BIへの表示には全行表示しておきたいような場合は、コピーしたものにフィルタをつけるようにしてください。
非表示のページなどに置いておくとよいでしょう。

ちなみに、このフィルタの値はPower Automateの時点で可変にできます。
image.png

パフォーマンスアナライザーで表のDAXを取得する

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

パフォーマンスアナライザーの停止をクリックしたあと、「DAXクエリビューで実行」をクリックしてみます。
image.png
これで表を構成するDAXクエリを取得することができました。
中身を見てみると、先ほどかけたフィルタ部分に日付がはいっているのがわかります。Power Automateでこの部分の値を差し替えてやることでコントロールができそうです。

取得できた表を構成するDAXクエリ
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からサービスへ発行します。
image.png

Power Automateクラウドフローを作る

プラスマイナス30%以上の報告

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

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

出力
[
  {
    "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
  }
]

選択アクションを使って整理

数字の桁数などがややこしいので、選択アクションを使って整理します。
image.png

ちなみに、少数の切り捨て操作は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テーブルの作成アクションに渡してやるときれいな表になります。
image.png

Teamsで送信

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

いい感じです!
image.png

取得範囲の日付を動的に指定する

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

addDay関数は日付を足したり引いたりでき、ついでにフォーマットも指定できます。
クラウドフローが動作した日を基準に何日前かを指定できるので、適当に調整してみてください。

作成_to
addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),1,'yyyy,MM,dd')
作成_from
addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),-6,'yyyy,MM,dd')

日付の操作については、以前にこちらで記事を書いたことがあるので、よかったら参考にしてください。

まとめ

Power BIのデータは案外簡単にPower Automateに持ってこれることが分かったと思います。
テーブルを構成するDAXを取得する前に、取得したいフィルタをかけておくとフィルタの内容もDAXの中に含まれます。Power Automateではその値を動的に操作できるので、かなり自由がききそうです。

こんな人が書いています

こちらの記事はランゲルハンス島のDDさんが紹介しました。ブログでクラウドフローのTIPSのようなものを書いたり、Qiita記事を書いたりしていますのでご贔屓に。

フォローやいいねいただけると嬉しいです。
関西のPowerPlatform系の勉強会にときどき出没しますので、「あのアイコンの顔の人だ!」と、気軽に声をかけていただけると喜びます!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?