DataflowsでExcelや基幹システムのデータをDataverseに定期同期するとき、突合キーに何を使うかで設計の安全性が決まる。
結論を先に言う。DataverseのデフォルトName列は突合キーに使ってはいけない。 使うたびに同名他社・表記ゆれ・社名変更の3トラップが確実に発動する。
解法は、基幹システム側で一意管理されている業務コード列(代理店コード・顧客IDなど)を専用に用意し、代替キー(Alternate Key)として設定することだ。
Name列をVLOOKUPのキーにしてしまう典型ミスExcelのVLOOKUPを長く使ってきた人ほど、DataverseのName列を自然な突合キーとして使いたくなる。「会社名が一致したら同じレコード」という感覚は、スプレッドシートの世界では合理的だ。
Dataverseの画面を開くと、Name列が最も目につく場所にある。Dataflowsのフィールドマッピング設定でもName列は真っ先に候補に上がる。だから直感的に選んでしまう。
ただし、DataverseのName列は「人間がアプリ画面で見るためのラベル」として設計されている。Microsoft Learnの公式ドキュメント(Work with alternate keys、2026年3月更新)が代替キーの設計思想として示している通り、データベース上の一意性保証はName列の責務ではない。突合キーに使うと、以下の3つのトラップが確実に発動する。
3つのトラップ:同名他社・表記ゆれ・社名変更トラップ1:同名他社(重複・誤上書き)異なる企業が同じ名称を持つケースは珍しくない。「山田商事」「東西商事」のような名前は地域をまたげば複数存在する。Name列で突合すると、別の会社のレコードが上書きされる。気づいたときには、どちらが正しいレコードか判断できない状態になっている。
トラップ2:表記ゆれ(別レコード扱い)「株式会社〇〇」「(株)〇〇」「㈱〇〇」は、人間には同じ会社に見える。Dataverseは文字列として比較するため、すべて別のレコードとして追加し続ける。定期同期のたびにレコードが増殖する。
トラップ3:社名変更(突合機能不全)社名変更が起きると、Excelや基幹システム側の名称が更新される。Name列を突合キーにしていると、変更後の名称がDataverse上に見つからず、既存レコードの更新ではなく新規レコードの作成として処理される。過去の取引履歴との紐付けが切断される。
3つとも、「いつか起きるかもしれないリスク」ではない。データが蓄積されるほど確実に発動する構造的な問題だ。
設計の判断軸:「人間が見るデータ」と「システムが判別するデータ」を切り離すデータベース設計の基本原則として、「人間が見るデータ」と「システムが判別するデータ」は別の列に持つ。Name列は前者に属する。突合キーには後者が必要だ。
具体的には、基幹システム側で一意管理されている業務コード列を使う。代理店コード・顧客番号・取引先ID——企業が社名を変えても、コードは変わらない。同名の別企業が存在しても、コードは異なる。表記ゆれは最初から発生しない。
この業務コード列をDataverseに専用列として追加し、代替キー(Alternate Key)として登録することで、DataverseがこのコードをName列と並ぶ「第2の主キー」として扱えるようになる。Dataflowsはその列を使ってUpsert(既存行の更新 + 新規行の追加)を安全に実行できる。
代替キーの仕様と制約(設定前に確認する数値)代替キーを設定する前に、以下の制約を把握しておく。数値はすべてMicrosoft Learnの公式ドキュメント(Work with alternate keys、2026年3月更新)からの直接引用だ。
制約項目 上限値 テーブルあたりの代替キー数 最大10個 1キーあたりの列数(複合キー) 最大16列 キーサイズの合計 900バイト以下(SQLインデックス制約準拠) 加えて、以下の列は代替キーとして設定できない(Define alternate keys to reference rows、2025年8月更新):
列セキュリティが有効な列:設定不可 NULL値を含む列:一意性が強制されない(重複レコードのリスクがある) 仮想テーブルの列:代替キー非対応(外部システム側の一意性を強制できないため) もう一つ注意点がある。代替キーとして設定する列の値に特殊文字( /,<,>,*,%,&,:,\,? )が含まれると、GET/PATCH(Upsert)操作が機能しなくなる。 業務コードに記号を使っている場合は事前に確認が必要だ。
サポートされるデータ型は6種(Decimal Number・Whole Number・Single line of text・Date Time・Lookup・Option Set)。業務コード列に推奨するのは**Single line of text(1行テキスト)**で、英数字IDであれば問題なく使える。
代替キーの設定手順3ステップ設定はPower Appsのメーカーポータルから行う(Define alternate keys using Power Apps、2025年5月更新)。
ステップ1:業務コード列を作成する対象テーブルに新しい列を追加する。データ型は「Single line of text(テキスト)」を選択。列のプロパティで「必須(Required)」に設定しておく。NULL値が入ると一意性が保証されないため、必須設定は省略しない。
...