【PowerBI】KPIをとりまとめてPowerAutomate で自動メール送信する

複数のKPI をOutlookメールとして送信

複数のDAX式が組み合わさったKPIの一覧、特にPowerBIでは別々のメジャーとして管理している実績と計画を横並びにしたものを、Outlookメールで送信できるようにします。

KPI(実績/計画)

売上: ¥1,000,000 / ¥1,000,000
粗利: ¥1,000,000 / ¥150,000
固定費: ¥1,200,000 / ¥1,500,000
損失: ¥1,000,000 / ¥1,000,000

ポイント

  • DAX 側(PowerBI側)でフォーマットを含めて文章を準備します。
  • DAX側で文字列を予め生成するので、JSON から値を抽出する処理が複雑になりません。
  • 途中でKPIをプラスしたくなっても、PowerBI 側の編集だけでことたります。

【PowerBI】KPIのメジャーを準備

売上・粗利など、それそれぞれのKPI 用DAXを準備

まず、KPI に必要なDAX をまとめます。今回は実績・計画それぞれの[売上]、[粗利]、[固定費]、[損失]のDAX を利用します。

それぞれのKPI が 計画 / 実績 になるように計画のDAXと実績のDAX を結合したDAX を作成します。

売上KPI DAX

  • FORMAT 関数で結果を通貨表示のStringに変更する。
  • & で文字列を結合する
売上 = 
FORMAT([実績売上], "Currency") &
" / " &
FORMAT([計画売上], "Currency")

個数のKPI

¥マークではなく、シンプルに整数が必要なケースと、[blank]の場合でも0を入力したいケース

個数 = 
FORMAT([実績個数], "#,0;#,0") &
" / " &
FORMAT( [計画個数] , "#,0;#,0")

dax.guide

KPI それぞれに対してメジャーを作成します。

作成したメジャーをマトリックスに入れると、計画 / 実績 の一覧として表示できます。

Outlookメール用にひとつのDAXに集約

作成した「実績 / 計画メジャー」をOutlookメール用に一つに集約します。

KPI(実績 / 計画) = 
"売上: " & [売上] & "<br>" &
"粗利: " & [粗利] & "<br>" &
"固定費: " & [固定費] & "<br>" &
"損失: " & [売上] & "<br>" 

PowerBI 上での改行は普通、UNICHAR(10)を使用します。

ただ、PowerAutomate でOutlookメールを作成する場合、改行記号では改行が行われません。そのため<br>を利用して改行を行います

もしOutlookメール以外を通知に使用する場合は、改行記号にUNICHAR(10)を使用する必要があるかもしれません。

PowerAutomate 用のDAX クエリをコピー

PowerAutomate で使用するDAX クエリを生成するため、前のステップで作成したメジャーをビジュアルに割り当てます。今回はわかりやすいようにテキストボックスビジュアルを使用します。

DAX クエリの取得は、最適化>パフォーマンスアナライザーから取得することができます。

記録の開始→ビジュアルを更新します から、作成したテキストボックスの「クエリをコピー」します。

コピーしたクエリ

// DAX Query
DEFINE VAR __SubqueryTableSQDS0 = 
    ROW(
        "KPI_実績___計画_", 'KPIs'[KPI(実績 / 計画)]
    )

EVALUATE
    GROUPBY(
        __SubqueryTableSQDS0,
        "MinKPI_実績___計画_", MINX(CURRENTGROUP(), [KPI_実績___計画_], TRUE)
    )

PowerBI側の準備は完了ですが、PowerAutomate から値を取得するため「発行」を完了させます。

【PowerAutomate 】KPIのOutlookメールを送信

「カードビジュアル」の結果をメール送信するのとほとんど同じです。

oneum.hatenablog.com

PowerBI の値を取得するアクションを追加

PowerBI>「データセットに対してクエリを実行する」を追加する。

クエリテキストには、PowerBIからコピーしたクエリを貼り付ける。

アクションの名称は後で使用するので、入力・識別しやすい名称に変更する。(ここでは"Get-KPI")としました。

この時点でテスト実行し、結果を取得しておきます。

Body:

{
  "results": [
    {
      "tables": [
        {
          "rows": [
            {
              "[MinKPI_実績___計画_]": "売上: ¥1,000,000 / ¥1,000,000<br>粗利: ¥1,000,000 / ¥150,000<br>固定費: ¥1,200,000 / ¥1,500,000<br>損失: ¥1,000,000 / ¥1,000,000<br>"
            }
          ]
        }
      ]
    }
  ],
  "firstTableRows": [
    {
      "[MinKPI_実績___計画_]": "売上: ¥1,000,000 / ¥1,000,000<br>粗利: ¥1,000,000 / ¥150,000<br>固定費: ¥1,200,000 / ¥1,500,000<br>損失: ¥1,000,000 / ¥1,000,000<br>"
    }
  ]
}
テキスト変数として初期化

メジャーの値をPowerAutomate で取得することができたので、Outlookメールで使用するために変数化します。

「変数を初期化する」アクションを追加します。

Type は「String」を設定します。

Valueは「データセットに対してクエリを実行する」のアクション名と取得したBodyの結果によって調整します。

テンプレート:

outputs('アクション名')?['body/firstTableRows'][0]?['[アクションで取得したときのメジャー名]']

例の場合:

アクション名:Get-KPI@ アクションで取得したときのメジャー名:MinKPI実績_計画`

outputs('Get-KPI')?['body/firstTableRows'][0]?['[MinKPI_実績___計画_]']

テストがうまくいけば、"value"にメジャーの結果が入っていることを確認できます。

Outlookメールを作成

Outlookのメールアクションを追加します。

文中に初期化した変数である「KPIs」を入れ込んで送信すれば完了です。

送信結果:

さいごに

本当はマトリックスに入れたメジャー一覧をテーブル表示したいのですが、うまくJSON を抽出できなかったので諦めていました。

一つ結果を抽出する方法さえあれば、全部入りのメジャーを作成すればほうりこめるかという妥協案です。

メジャーの一覧を装飾したテーブルで表示するには、PowerAutomate の変数の抽出の仕方や、SELECT の仕方を勉強する必要がありそうです。。。