見出し画像

【Power Platform】 FetchXML でテーブルを結合するとはどういうことか? #0209

~ Dataverse の関連データ取得を現場目線で理解する ~

1. 導入(仮想ストーリー)

大阪の製造業で社内 SE をしている 30 代後半の「近畿さん」は、Power Apps(モデル駆動型アプリ)で使う一覧画面の改善を任されていました。

「案件テーブルに、担当者の部署名も一緒に出したいだけなんだけど……」

ビューや簡易的な設定では限界があり、結局 FetchXML を直接書くことに。しかし、link-entity が出てきた瞬間、手が止まります。

  • inner join? outer join?

  • from と to はどちらがどちら?

  • 複数テーブルをつなぐときの正解は?

Microsoft Learn を読むと説明はあるものの、「何ができて、何のためにこの構文があるのか」が腹落ちしません。

本記事では、Microsoft Learn の
「Join tables using FetchXML」 の内容をもとに、

  • FetchXML における「テーブル結合」とは何か

  • Dataverse のリレーションとどう結びついているのか

  • 実務でどんなときに使うのか

を、現場視点で整理していきます。


2. 本文(技術解説)

2-1. FetchXML における「テーブル結合」とは

Microsoft Learn では、FetchXML におけるテーブル結合は
link-entity 要素 を使って行う、と説明されています。

FetchXML は、Dataverse のデータを取得するための XML ベースのクエリ言語です。
単一テーブルだけでなく、関連テーブルのデータも同時に取得できます。

この「関連テーブルを結びつける」仕組みが、SQL における JOIN に相当します。


2-2. link-entity の基本構造

Learn に記載されている基本形は、次のような構造です。

<link-entity
  name="関連テーブル名"
  from="関連テーブルの列"
  to="基準テーブルの列"
  link-type="inner|outer"
  alias="別名">
</link-entity>

ここで重要なのは、FetchXML は常に「基準となるテーブル」が存在する という点です。

  • <entity> … 基準テーブル

  • <link-entity> … そこから結合される関連テーブル

という主従関係になっています。


2-3. from / to の意味(混乱しやすいポイント)

Learn では、from と to の関係について次のように説明されています。

  • from
    → link-entity 側(関連テーブル)の列

  • to
    → 基準テーブル側の列

つまり、「from = 相手」「to = 自分」という意識で読むと理解しやすくなります。

これは SQL の JOIN ON 句と左右が逆に見えるため、初学者が混乱しやすいポイントです。


2-4. link-type による結合の種類

Microsoft Learn では、主に次の 2 種類が説明されています。

inner(既定値)

  • 両方のテーブルに一致するレコードがある場合のみ取得

  • SQL の INNER JOIN に相当

指定しない場合は inner join になります。

outer

  • 基準テーブルのレコードは必ず取得

  • 関連テーブルに一致がない場合でも、基準側は返る

  • SQL の LEFT OUTER JOIN に相当

業務的には、

  • 「関連データがあれば表示したい」

  • 「なくても一覧には出したい」

というケースで outer が使われます。


2-5. 複数の link-entity を使った結合

Learn では、link-entity を 入れ子(ネスト) にすることで、
複数テーブルを連結できることが示されています。

<link-entity name="tableB" ...>
  <link-entity name="tableC" ...>
  </link-entity>
</link-entity>

これは、

  • A → B → C
    という リレーションの連鎖 を表現しています。

Dataverse のテーブル設計(1:N、N:1)を正しく理解していないと、
この構造は非常に読みにくくなります。


2-6. alias(別名)の役割

Learn では、alias を使うことで、

  • 同じ列名が複数テーブルに存在する場合

  • 結果セットで区別したい場合

に対応できると説明されています。

取得結果では、

alias.columnname

という形式で参照されます。

Power Automate や SDK で FetchXML の結果を扱う場合、
この alias 指定がないと後続処理が書きづらくなるケースがあります。


3. 注意点(Learn に基づく)

  • FetchXML の結合は Dataverse のリレーション定義に依存します

  • 存在しない列や、リレーションのない組み合わせは指定できません

  • outer join を多用すると、取得データ量が増える可能性があります

これらはすべて Learn の説明から読み取れる前提条件です。


4. 実務に即した活用例

活用シナリオ例

  • 案件一覧に「顧客名」「担当者名」を同時に表示

  • 注文データと取引先データをまとめて取得

  • モデル駆動型アプリのカスタム FetchXML ビュー

明日試せる行動例

  • 既存ビューの FetchXML をエクスポートして link-entity を確認する

  • inner / outer を切り替えて取得結果の違いを見る

  • alias を付けた場合の戻り値を Power Automate で確認する


5. まとめ

  • FetchXML のテーブル結合は link-entity で表現する

  • from / to は「関連側 → 基準側」という向き

  • inner / outer は業務要件で使い分ける

  • Dataverse のリレーション理解が前提になる

「FetchXML が読めない」の正体は、多くの場合
Dataverse の関係性をイメージできていないことにあります。

まずは Learn の構文を、
実際のテーブル関係図と照らし合わせて読むことが、最短ルートです。


市民開発者の方には、FetchXML は、敷居が高く感じられるテーマになるかも知れません。ただ、使い方を覚えていただくことで効率的に蓄積データを活用することが可能になりますので、ぜひ、確認してみてください。
内容について、ご不明点・ご質問がある方は、コメント欄からお気軽にご質問ください。


いいなと思ったら応援しよう!