Power Automate 動的なDataverseテーブル指定の方法 とCSV出力サンプル

はじめに

TIPSこの記事は、Microsoft Power Automate – Qiita Advent Calendar 2025 シリーズ2 12月18日 担当分の記事です。

以前の記事で「Power Automate Dataverseコネクタ 」のシリーズを書いていました。
今回は動的なテーブル指定の方法や利用例などを簡単にご紹介します。

通常は固定のテーブルをプルダウンから指定して利用しますが、例えば同じような構成のテーブルが複数ある場合にそれぞれのテーブル用のアクションを用意せずひとつで済ますことができます。そのようなテーブルが多い場合などに活用できるテクニックです。

Dataverseのテーブルを動的に指定するにはセット名で指定!

クラウドフローでDataverseテーブルのアクションを使用する場合、通常はプルダウンから対象のテーブルを指定します。テーブルの表示名を選択すればいいので簡単です。

実はこの部分はカスタム値を指定することでもテーブルを指定可能です。その場合は「テーブルのセット名」を指定します。

テーブルのセット名というのは基本的にはテーブルの内部名の複数形です。
テーブルのエディター画面から簡単に取得できます。

セット名の取得方法

以下2つのサンプルテーブルを用意しました。
それぞれの設定画面を開いて「プロパティ」>「セット名をコピー」をクリックします。
すると論理名(テーブルの英数字小文字のみのもの。以下画像でいう名前の部分)の末尾に複数形のs が付いた値が取れるはずです。これがセット名となります。

テーブルAのセット名は「cr31f_sampletableas」
テーブルBのセット名は「cr31f_sampletablebs」です。

クラウドフローを開きDataverseのアクションでセット名を指定する

クラウドフローを開いて以下のようにDataverseからデータ一覧を取得するアクションをサンプルで指定してみます。

行を一覧にするアクションを選択して、テーブル名に「カスタム値を入力する」として、
cr31f_sampletableas」(サンプルテーブルAのセット名)を指定して保存、実行します。

→サンプルテーブルAのデータが取れるはずです。というか、セット名を指定して保存すると、自動的に表示名のサンプルテーブルAになっています。

TIPSとにかくテーブル名を指定する際にセット名を使えば指定できる。ということですね。

参考までにサンプルテーブルAとサンプルテーブルBには以下のようなデータを入れています。

実行すると以下のようにサンプルテーブルAのデータが取得できます。また、アクションのテーブル名のプルダウンも自動的に表示名になっています。

変数や配列にセットして使用する。Apply each で2つのテーブルから取得してみる

そのままセット名を指定しても動的に指定しないと意味はないので、以下サンプルでは2つのテーブルのセット名を作成アクションで配列にして、それを使って2つのテーブルからデータを取得してみます。

TIPS本来は、複数のテーブルのセット名をテーブルなどで定義しておき利用したり、それぞれのテーブルから子フローとして本フローを呼び出して、その際にセット名をパラメータで渡す。などのパターンで動的な値として使用することができます。

サンプルとして作成アクションに以下の配列を作成

Code[
  “cr31f_sampletableas”,
  “cr31f_sampletablebs”
]

この配列を使ってApply eachでテーブル名に値をセットします。
この状態で実行してみます。

1回目:サンプルテーブルAからの取得となっている

2回目 サンプルテーブルBからの取得になっている

1つのアクションで複数テーブルから情報取得する処理の利用例

上記のようにテーブル名をセット名で指定してあげれば、1つのアクションで別テーブルに対して同一の処理を行えることがわかります。といっても、通常は各テーブルは列の定義も異なり持っている情報も異なるのが普通です。
本実装の使い道としては、以下のようなケースで活用できると思います。

  • 同じような構造のテーブル(共通的な内容が多いが一部異なる)が多数あり似たような処理を行う
  • 上記のようなケースで主に共通の列項目を集約したい(CSVにまとめて出力するなど)
  • 更新アクションで各テーブルで共通で使っている列を更新したい(同じアクションで)
  • 子フローで処理を共通化したい(セット名を渡してテーブルデータを取得・更新して返却など)

いずれも各テーブルで構成が全くバラバラであればあまり意味がないのでこのテクニックはあまりマッチしないと思いますが、近い構成のテーブルであったり、共通の名前(内部名も一致する列)を取得や更新する場合などは共通化が可能です。
例えば各テーブルで共通で持っている列(内部名も一致)や既定で備わっている作成日、作成者、更新者、更新日の一覧を出したい。などであればこのテクニックでテーブル取得部分は同じアクションで作ることができます。

共通の項目を取得、まとめてCSVにするサンプル

サンプルとして、2つのテーブルに共通の内部名で作成している「Name」や「担当名」、作成日などをCSVアクションでまとめてみたサンプルです。

ポイントとして通常のテーブル取得結果のように動的コンテンツに取得列の候補が出てきてくれません(動的に指定しているため)。そのため、列の指定には @item()?[‘createdon’] のように数式で論理名を指定する必要があります。

NOTE※列の表示名ではなく内部名が一致する必要があります。一部のテーブルにしか存在しない列も列名の指定で?で繋いでいればエラーとならずに、あれば出すという形にできます。

TIPSサンプルでは変数を事前に用意し、選択アクションで必要な列のみ指定、ループ内で変数に詰めて、一旦退避したデータとUnionで結合、最後にできたものをCSVアクションで出力としています。
※変数をなくしてループ内でいったんJOINなどで加工、ループ外で一度で結合するなどの高度なTipsもありますが、そちらはまたいつかのご紹介とします。

配列変数を初期化

選択アクションで出力する列の名前と値をマップする。

NOTEこの時、通常のテーブル指定の時のように自動では列の候補が出てきてくれません。(動的な指定なので)
そのため、Fxアイコンから列の内部名を直に指定してあげる必要があります!

マップの中身 各テーブルで共通で使っている列の内部名を指定している

Code      “Name”: “@item()?[‘cr31f_name’]”,
      “テキストA”: “@item()?[‘cr31f_texta’]”,
      “担当名”: “@item()?[‘cr31f_tantou’]”,
      “作成日”: “@item()?[‘createdon’]”

GetDatas変数の値を一時的に退避(変数内の数式で自参照ができないため作成アクションに複製)
※自己参照できる方法もあるが(コルネさんが紹介)このサンプルでは割愛

GetDatas変数の設定で 今回の選択アクションの中身と退避したデータをUnionで結合
@{union(outputs(‘作成_Datas’),body(‘選択’))}

ループ外でCSVアクションでCSVを作成
値にはGetDatas変数をそのまま。すでに出力列指定もしているのでカスタム不要

実行するとサンプルテーブルAとサンプルテーブルBを合わせたデータのCSVが作成される

おわりに

今回は動的にDataverseのテーブル指定(おもに取得)とシンプルなCSV出力サンプルについてご紹介しました。
動的なテーブル指定については上記の実装以外にも色々応用すると便利なケースがあるかと思います。
そういったこともできるのね。と覚えておくといつか役立つかもしれません。

もちろん同様にレコードの更新もできるのですが、こちらも通常と異なるテクニック(動的なGUID指定やJSONでの更新となる点)が必要となります。また次の記事にでもサンプル記載しようと思います。

さらに各テーブルによって列が違うがそれぞれをこのように1つのアクションで動的に列を指定して出したい。というケースにも実は頑張れば対応はできますが、かなりマニアックな手法となるので、こちらもいつか機会があればご紹介したいと思います。それでは!

関連記事

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS