Dataverseのルックアップ列でテーブルをリレーションさせる|作成・primary column設計のポイント

Dataverseのルックアップ列は、SharePointのルックアップ列と似ているようで、設計時に押さえておくべき重要な制約があります。なかでも「primary column(プライマリ列)は後から変更できない」という点を最初に知っておかないと、後で大きな手戻りが発生します。

私自身が最初にDataverseのリレーション設計で失敗したのは、担当者テーブルのprimary columnを確認せずにルックアップ列を作ってしまったときです。ドロップダウンに社員番号が表示されてしまい、後から修正しようとしたところ変更できないとわかり、テーブルごと作り直す羽目になりました。この記事では、同じ失敗をしないためにルックアップ列の設計から作成手順まで順を追って説明します。

choice列とlookup列——まず使い分けを把握する

Dataverseでドロップダウンを実現する方法は主に2つあります。「choice列(選択肢列)」と「lookup列(ルックアップ列)」です。この2つの違いを理解することが、設計の第一歩です。

choice列はシンプルで、列の定義に選択肢リストを直接書き込む仕組みです。「承認済み」「未承認」「却下」のような固定の選択肢であれば、choice列で十分です。Power Appsでの扱いも文字列としてシンプルに扱えるため、初心者にも使いやすい設定です。

一方、lookup列は別テーブルのレコードと紐づける仕組みです。たとえば「担当者」をドロップダウンで選ぶ場合、担当者テーブルのレコードそのものと紐づけることができます。担当者のメールアドレスや部署名なども後から引き出せるのが、choice列との最大の違いです。

choice列lookup列
データの実体列に定義した選択肢リスト別テーブルのレコード
追加属性の取得不可参照先テーブルの列を引き出せる
複数テーブルでの共有グローバルchoiceなら可テーブルを共有するため自然に可能
Power Appsでの扱い文字列としてシンプルに扱えるレコード型として扱う(少し複雑)
複数選択対応(内部構造が複雑化する)many-to-many専用テーブルが別途必要

判断の基準はシンプルです。「選択肢の横に追加情報を持たせる必要があるか」で決めれば問題ありません。担当者名だけ表示できれば十分であればchoiceで足ります。担当者のメールアドレスや部署コードも後から使いたい場合は、lookup列を選びましょう。

なお、choice列の複数選択(Multi-Select Choice)については注意が必要です。SharePointの複数選択列と似た感覚で使えそうに見えますが、内部的にはテーブル化された複雑な構造になっており、Power AutomateやAPIでの操作が一段階難しくなります。用途がシンプルな場合は避けることをおすすめします。

primary columnを先に設計する——後から変えられない唯一の制約

ルックアップ列を作成する前に、参照先テーブルの「primary column」を確認・設計することが最も重要なステップです。これがSharePointのルックアップ列と最も大きく異なる点です。

primary columnとは、テーブル作成時に設定する「Name」フィールドにあたる列のことです。Dataverseのルックアップ列は、ドロップダウンに参照先テーブルのprimary columnだけが表示されます。SharePointのルックアップ列では表示する列を後から自由に変更できますが、Dataverseではこの変更ができません。

たとえば、担当者テーブルのprimary columnが「氏名」に設定されていれば、ドロップダウンには氏名が表示されます。しかし「社員番号」に設定されていれば、社員番号しか表示されません。そしてprimary columnは、テーブル作成後に変更することができないという制約があります。

ルックアップ列を設定する前に、参照先テーブルの「ドロップダウンで何が表示されるか」を必ず確認しておきましょう。もし既存のテーブルのprimary columnが意図した列でない場合は、ルックアップ列を作成する前にテーブル構造を見直す必要があります。

primary columnの確認方法は、make.powerapps.comで対象テーブルを開き、「列」タブの一覧で「Primary」アイコンがついている列を確認します。デフォルトでは「Name」という名前のテキスト列がprimary columnになっています。テーブルを作成する段階で、この列名と入力内容を「ドロップダウンに表示したい値」に合わせて設計しておくことが大切です。

ルックアップ列の作成手順

実際にルックアップ列を作成する手順を説明します。慣れれば3〜5分ほどで完了します。

  1. make.powerapps.com を開き、左メニューの「テーブル」から子テーブル(ルックアップ列を追加する側のテーブル)を選択します
  2. 「列」タブを開き、「新しい列」をクリックします
  3. 「データ型」のドロップダウンから「Lookup(ルックアップ)」を選択します
  4. 「Related Table(関連テーブル)」で参照先のテーブルを選択します
  5. 列の表示名を入力し、「保存」をクリックして列を作成します

ひとつ注意点があります。「Related Table」の選択肢に「Customer」という項目が表示されます。これはAccountテーブルとContactテーブルを統合した特殊な複合ルックアップ列を作るための設定で、通常のユーザーが使う場面はほとんどありません。一般的なルックアップ列を作る場合は「Customer」を選ばないようにしてください。

自動生成されるリレーションを理解しておく

ルックアップ列を作成すると、Dataverseが裏側でmany-to-one(多対一)のリレーションを自動生成します。「テーブル」→「リレーションシップ」タブを開くと、作成されたリレーションを確認できます。参照先テーブル(親テーブル)側でも、one-to-manyのリレーションとして表示されます。

SharePointにはこのようなリレーションの概念がありませんでしたが、Dataverseではテーブル間のリレーションが明示的に管理されています。これにより、データの整合性を担保するための設定が細かくコントロールできるようになります。

リレーション動作(Relationship behaviors)の設定

リレーションには「動作(behaviors)」という設定があります。基本的にデフォルトのままで問題ありませんが、知っておくと設計時の判断に役立ちます。

設定名動作の内容
Referential(デフォルト)親レコードを削除しても子レコードは残る。ルックアップ列の値がnullになる
Referential, restrict delete子レコードが存在する間は親レコードを削除できない
Parental親レコードを削除すると子レコードも連動して削除される(カスケード削除)

Referential(デフォルト)は最も安全な設定です。親レコードを削除しても子レコードが残るため、データが意図せず失われるリスクがありません。

「Referential, restrict delete」を選ぶと、子レコードが存在する間は親レコードを削除できなくなります。データの整合性を厳密に保ちたい運用では、この設定が安全です。たとえば「担当者テーブルの担当者を削除したとき、その担当者が紐づいている案件レコードが残ってしまう」という状況を防げます。

「Parental」は親レコードを削除すると子レコードも連動して削除されるカスケード削除です。意図せずデータが大量に消えるリスクもあるため、データ構造を十分に理解した上で使うようにしましょう。初心者のうちはデフォルトの「Referential」から始めることをおすすめします。設定の変更は、リレーションを開いて「General」タブから行えます。

Power AppsとPower Automateでの注意点

ルックアップ列はPower Appsで操作するとき、choice列とは異なる扱いになります。いくつか代表的なパターンを押さえておきましょう。

自動生成アプリを使う場合は、ルックアップ列のComboBoxが自動的に設定されるため、特別な操作は不要です。まずは自動生成でアプリを動かしてみて、動作を確認するのがおすすめです。詳細はDataverseのテーブルから30秒でアプリを自動生成する方法をご覧ください。

Patch関数でルックアップ列に値を書き込む場合は、テキスト文字列ではなくレコード型で渡す必要があります。たとえば次のような書き方になります。

Patch(
  案件テーブル,
  Defaults(案件テーブル),
  {担当者: LookUp(担当者テーブル, ID = ComboBox1.Selected.ID)}
)

Filter関数でルックアップ列を使ってフィルターする場合は、ルックアップ列のフィールドを参照する記述が必要です。たとえば担当者テーブルのIDでフィルターする場合は、Filter(案件テーブル, 担当者.ID = ComboBox1.Selected.ID)のような書き方になります。

Power AutomateでDataverseのルックアップ列をODataフィルターで使う場合は、システム列名に_valueサフィックスを付ける特殊な書き方が必要です。列のシステム名(スキーマ名)はmake.powerapps.comの「列」タブで確認できます。

列型全体の整理はDataverseの列データ型まとめをご覧ください。テーブル作成の流れはSharePointと違うDataverseのテーブル作成フローも合わせて参考にしてください。

まとめ

Dataverseのルックアップ列は、choice列では実現できない「参照先テーブルのデータを丸ごと扱う」リレーション設計を可能にします。設計で最も重要なのは、ルックアップ列を作成する前に参照先テーブルのprimary columnを固めることです。この設定は後から変えられないため、ドロップダウンに何を表示したいかを先に決めてから着手するようにしましょう。

リレーション動作の設定や、Power Appsでのレコード型の扱いなど、SharePointと異なる概念が出てきますが、一つひとつ順番に理解していけば難しくありません。最初は自動生成アプリでルックアップ列の動作を確認しながら、少しずつカスタマイズを重ねていくのがおすすめです。

Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。環境・テーブル・列型・ルックアップまで、SharePoint経験者の視点で一通り確認できます。

Xでフォローしよう