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