DataverseのYes/NoはSharePointのYes/Noと別物|Boolean判定できない理由

SharePointリストのYes/No列と同じ感覚でDataverseのYes/No列を使おうとすると、Power Appsの数式やPower Automateのフロー条件で動かないケースに当たります。原因は、SharePointのYes/NoはBoolean型(true/false)ですが、DataverseのYes/Noは選択肢型(Choice)だからです。

名前が同じだけに混乱しやすいです。この記事でその違いと正しい扱い方を整理します。

SharePointのYes/No=Boolean、DataverseのYes/No=Choice

SharePointのYes/No列

SharePointリストのYes/No列は、内部的にBoolean型(真偽値)で保存されます。値は trueまたはfalseの2択です。

Power Appsから参照するとき、チェックボックスの状態を If(ThisItem.承認済み, "済", "未") のように直接Boolean判定できます。Power Automateフローの条件式でも is equal to true という書き方が自然に機能します。

DataverseのYes/No列

一方、DataverseのYes/No列は、内部的にはChoice型(選択肢型)として扱われます。「Yes」と「No」という2つの選択肢が定義された選択肢列です。

そのため If(ThisItem.承認済み, "済", "未") という書き方では動きません。選択肢列に対してBoolean判定(true/false直接比較)をしているためです。Power Appsから見ると、この列はBoolean値ではなくOptionSetValueとして認識されます。

実際にこの詰まりポイントに当たって、「なぜSharePointと同じように書いたのに動かないんだ」と30分ほど悩んだことがあります。結論を知ってしまえば単純ですが、知らないと原因にたどり着けません。

Power Appsでの正しい扱い方

選択肢の値を比較する

DataverseのYes/No列を条件分岐に使うには、Boolean直接判定ではなく選択肢の値との比較が必要です。以下のような書き方をします。

// ❌ 動かない(SharePoint式の書き方)
If(ThisItem.承認済み, "済", "未")

// ✅ 動く(Dataverse Yes/No列の正しい書き方)
If(ThisItem.承認済み = 'テーブル名(承認済み)'.Yes, "済", "未")

'テーブル名(承認済み)'.Yes の部分は、Power Apps上でEnum(列挙型)として扱う記法です。実際には候補が自動補完で表示されますので、入力中に候補から選べば正しく書けます。

Filter関数での使い方

ギャラリーや変数に絞り込んだデータをセットするときも同様です。

// ❌ 動かない
Filter(案件管理, 承認済み = true)

// ✅ 動く
Filter(案件管理, 承認済み = '案件管理(承認済み)'.Yes)

Filter・Search・LookUpの使い分けの記事でも触れていますが、列型によって条件の書き方が変わる点は意識しておきたいです。また、If・Switchの使い分けについてはPower AppsのIfとSwitch記事も参考にしてください。

Power Automateフローでの正しい扱い方

フローの条件式での注意点

Power Automateでも同様に、DataverseのYes/No列はBoolean値ではなく整数値(0または1)として取得されます。

  • Yes(選択されている)= 1
  • No(選択されていない)= 0

フローの条件ステップで「is equal to true」と書くと動きません。代わりに「is equal to 1」と書きます。トリガー条件(ODataフィルタークエリ)を使ってYes/Noで絞り込む場合は以下のようになります。

// Dataverse Yes/No列でYesのレコードだけ取得するODataフィルター
承認済み eq true

// または整数で書く場合
承認済み eq 1

ODataフィルタークエリの書き方はDataverseとSharePointで微妙に異なります。Power Automateのトリガー条件の記事もあわせて参考にしてください。

フローでのデバッグ

「条件に合致するはずなのに動かない」場合は、Composeアクションで列の生の値を確認するのが手っ取り早いです。0か1かtrueかfalseか、実際の型を目で確認してから条件式を書くと詰まりにくくなります。

なぜDataverseはBoolean型にしなかったのか

DataverseがYes/No列をChoiceとして実装しているのは、「Yes」と「No」のラベルをカスタマイズできるようにするためです。たとえば「承認済み」と「未承認」、「有効」と「無効」のように表示名を変えられる柔軟性があります。

Dataverseはもともと大規模なビジネスアプリ向けのデータストアとして設計されており、選択肢型での実装のほうがメタデータとして管理しやすいという背景もあります。SharePointの単純なBoolean型より複雑になりますが、その分自由度は高いです。

まとめ

  • DataverseのYes/No列はSharePointのYes/No列と同名ですが、内部型が異なります(SharePoint=Boolean、Dataverse=Choice)
  • Power Appsでは If(field, ...) の直接Boolean判定は動きません。 field = '列名の列挙型'.Yes の形式で比較します
  • Power Automateフローでは整数値(1 = Yes、0 = No)として扱われます
  • ODataフィルタークエリでは 列名 eq true または 列名 eq 1 の形式を使います

DataverseとSharePointの違いはこのYes/No列に限らず列型全体で起きます。詳細はDataverseの列データ型まとめで解説しています。

Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。

Xでフォローしよう