Power Apps の演算子と識別子

適用先: キャンバス アプリ モデル駆動型アプリ

これらの演算子の一部は、作成者の言語に依存します。 キャンバスアプリの言語対応について詳しくは、グローバル アプリを参照してください。

銘柄コード タイプ 説明設定
'...' 識別子 '取引先企業名' スペースを含む特殊文字を含む識別子は一重引用符で囲まれます
"..." テキスト文字列 "ハロー ワールド" テキスト文字列は二重引用符で囲まれています
$"..." 文字列の補間 $"Dear {FirstName}," テキスト文字列内に埋め込まれた数式
プロパティ セレクター Slider1.Value
Color.Red
Acceleration.X
テーブル、コントロール、シグナル または列挙体からプロパティを抽出します。 旧バージョンとの互換性を保つために、! を使用することもできます。

[言語依存]
小数点 1.23 数値の整数部分と小数部分の区切り記号。 この文字は言語に依存します。
( ) かっこ Filter(T, A < 10)

(1 + 2) * 3
優先順位を変更し、大きな式の副次式をグループ化します
+ 算術演算子 1 + 2 加算
-   2-1 減算および符号
*   2 * 3 乗算
/   2 / 3 除算 (Mod 関数も参照してください)
^   2 ^ 3 累乗、Power 関数に相当します
%   20% 百分率 ("* 1/100" に相当します)
= 比較演算子 Price = 100 と等しい
>   Price > 100 より大きい
>=   Price >= 100 以上である
<   Price < 100 より小さい
<=   Price <= 100 以下である
<>   Price <> 100 と等しくない
& 文字列連結演算子 "hello" & " " & "world" 複数の文字列を続けて表示します
&& または And 論理演算子 Price < 100 && Slider1.Value = 20
または Price < 100 And Slider1.Value = 20
論理積、And 関数に相当します
|| または Or   Price < 100 || Slider1.Value = 20 または Price < 100 Or Slider1.Value = 20 論理和、Or 関数に相当します
! または Not   !(Price < 100) または Not (Price < 100) 論理否定、Not 関数に相当します
Exactin メンバーシップ演算子 Gallery1.Selected exactin SavedItems コレクション またはテーブルに属しています
Exactin   Windows Exactin “Windows オペレーティング システムで Windows を表示するには...” 部分文字列をテストします (大文字小文字を区別します)
In   Gallery1.Selected in SavedItems コレクションまたはテーブルに属しています
In   "The keyboard and the monitor..." 内の "The" 部分文字列をテストします (大文字小文字を区別しません)
@ 曖昧性除去演算子 MyTable[@fieldname] フィールドの曖昧性を除去します
@   [@MyVariable] グローバルの曖昧性を除去します
,
[言語依存]
リスト区切り記号 If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
以下の要素を区切ります: この文字は言語に依存します。
;
[言語依存]
数式のチェーン Collect(T, A); Navigate(S1, "") 関数の呼び出しの動作プロパティを区切ります。 このチェーン演算子は言語に依存します。
As As 演算子 AllCustomers As Customer ギャラリーの ThisItemThisRecord をオーバーライドして、スコープ関数を記録します。 As はより適切かつ具体的な名前を提供するのに役立ち、ネストされたシナリオでは特に重要です。
Self Self 演算子 Self.Fill 現在のコントロールのプロパティへのアクセス
Parent Parent 演算子 Parent.Fill コントロール コンテナーのプロパティにアクセスする
ThisItem ThisItem 演算子 ThisItem.FirstName Gallery または Form コントロールのフィールドにアクセスする
ThisRecord ThisRecord 演算子 ThisRecord.FirstName 完全なレコードと ForAllSumWith 内のレコード内の個々のフィールド、およびその他のレコードスコープ関数へのアクセス。 As 演算子でオーバーライドできます。

Note

@ 演算子を使用して、レコード オブジェクトのタイプをデータ ソースに対して検証することもできます。 例: Collect(coll,Account@{'Account Number: 1111')

In 演算子と Exactin 演算子

In 演算子と Exactin 演算子を使用して、コレクションやインポートされたテーブルなどの データ ソース にある文字列を検索できます。 in 演算子は、大文字小文字を無視して一致する文字列を識別し、exactin 演算子は、大文字小文字が一致する文字列のみを識別します。 次に例を示します。

  1. 在庫という名前のコレクションを作成またはインポートし、ギャラリーでのイメージとテキストの表示 で説明している最初の手順に従って、それをギャラリーに表示します。

  2. ギャラリーの Items プロパティを次の数式に設定します。
    Filter(Inventory, "E" in ProductName)

    ギャラリーには、指定した文字が名前に含まれていない唯一の製品である Callisto を除くすべての製品が表示されます。

  3. ギャラリーの Items プロパティを次の数式に変更します。
    Filter(Inventory, "E" exactin ProductName)

    ギャラリーには、指定した大文字が名前に含まれている唯一の製品である Europa のみが表示されます。

ThisItem、ThisRecord、および As 演算子

いくつかのコントロールと関数は、テーブルの個々のレコードに数式を適用します。 式の個々のレコードを参照するには、次のいずれかを使用します。

演算子 適用対象 内容
ThisItem Gallery コントロール
Edit form コントロール
Display form コントロール
Gallery または Form コントロールの現在のレコードのデフォルト名。
ThisRecord ForAllFilterWithSum、その他レコードスコープ関数 ForAll とその他のレコード スコープ関数の現在のレコードのデフォルト名。
As名前 Gallery コントロール
ForAllFilterWithSum およびその他のレコード スコープ関数
現在のレコードの 名前 を定義して、既存の ThisItem または ThisRecord を置き替えます。 As を使用して、ネストするとき、式を理解しやすくし、あいまいさを解決します。

ThisItem 演算子

たとえば、次の Gallery コントロールには、Items プロパティは 従業員 データ ソース (Northwind Traders サンプル と一緒に含まれる 従業員 テーブルなど) に設定されています。

Employees

ギャラリーに表示されている従業員

ギャラリーの最初のアイテムは、各従業員に対して複製されるテンプレートです。 このテンプレートでは、この画像の数式は ThisItem を使用して現在のアイテムを参照します:

ThisItem.Picture

従業員の写真の数式

同様に、名前の数式も ThisItem を使用します:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

従業員の名と姓の数式

ThisRecord 演算子

ThisRecord は、レコード スコープ を持つ関数で使用されます。 たとえば、自分たちのギャラリーの Items プロパティを使用して Filter 機能を使用して、M から始まる名をのみを表示します。

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

ThisRecord を使用して、名前に基づいて従業員をフィルター処理する

ThisRecord はオプションであり、フィールドを直接使用することで暗黙的に指定されます。たとえば、この場合、次のように記述できます。

Filter( Employees, StartsWith( 'First Name', "M" ) )

これはオプションですが、ThisRecord は数式を理解しやすくすることができ、フィールド名がリレーションシップ名でもあるあいまいな状況で必要になる場合があります。 ThisItem は常に必要ですが、ThisRecord は必要です。

ThisRecord を使用して、PatchCollect、およびその他のレコード スコープ関数を使ったレコード全体を参照します。 たとえば、次の数式は、すべての非アクティブな従業員のステータスをアクティブに設定します。

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees,
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

As 演算子

As 演算子を使用して、ギャラリーのレコードやレコード スコープ関数に名前を付け、既存の ThisItem または ThisRecord を上書きします。 レコードに名前を付けると、数式を理解しやすくなり、ネストされた状況でその他のスコープのレコードへのアクセスに必要となる場合があります。

例えば、ギャラリーの Items プロパティを変更し、As を使用して従業員と協力していることを特定できます。

Employees As Employee

As 演算子を使用した従業員のギャラリー

画像と名前の数式は、現在のレコードにこの名前を使用するように調整されています。

Employee.Picture

As 演算子で設定された従業員名を使用している従業員の画像

Employee.'First Name' & " " & Employee.'Last Name'

As 演算子で設定された従業員名を使用している従業員の姓名

As はレコードスコープ関数と共に使用し、デフォルト名 ThisRecord を置き換えることもできます。 これを前の例に適用して、作業しているレコードを明確にすることができます。

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee,
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

ギャラリーをネストしてスコープ関数を記録する場合、ThisItemThisRecord は常に最も内側のスコープを参照し、外側のスコープのレコードは利用できません。 As を使用して、それぞれに一意の名前を付けることで、すべてのレコード スコープを使用できるようにします。

たとえば、この数式は、2 つの ForAll 関数をネストして、チェス盤パターンをテキスト文字列として生成します。

Concat(
    ForAll( Sequence(8) As Rank,
        Concat(
            ForAll( Sequence(8) As File,
                    If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
            ),
            Value
        ) & Char(10)
    ),
    Value
)

Label コントロールの Text プロパティを次を表示する数式に設定します。

ラベル コントロールに表示されるチェス盤テキスト

ここで何が起こっているのかを見てみましょう。

  • まず、Sequence 関数から 8 つの番号付きレコードからなる名前のないテーブルを反復します。 このループは、ボードの各行に対するもので、一般に ランク として呼ばれ、この名前を付けます。
  • 各行について、8 列の名前のない別のテーブルを反復処理し、共通名 ファイル を付けます。
  • もし Rank.Value + File.Value が奇数の場合、正方形は X、それ以外の場合はドットになります。 数式のこの部分は両方の ForAll ループを参照し、As 演算子を使用することで可能になります。
  • Concat は 2 回使用され、最初に列を組み立て、次に行を組み立て、同時に新しい行を作成するために Char(10) がスローされます。

同様の例としては、ネストされた Gallery コントロールを ForAll 関数の代わりに使用することで可能になります。 ランク の垂直ギャラリーから始めましょう。 このギャラリー コントロールは、次の Items 形式を持ちます。

Sequence(8) as Rank

ランク反復を提供する外部ギャラリーの図

このギャラリー内には、ファイル の水平方向のギャラリーを配置し、それは各 ランク のために、次の Items プロパティで複製されます。

Sequence(8) as File

ファイル反復を提供する内部ギャラリーの図

そして最後に、このギャラリー内に、ファイル と各 ランク に対して複製される Label コントロールを追加します。 スペース全体を埋めるようにサイズを調整し、Fill プロパティを使用して次式で色を提供します。

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

チェス盤に交互の色を提供する 2 つのギャラリー内のラベル コントロール

Self および Parent 演算子

数式内でコントロールとそのプロパティを参照するには、3 つの方法があります:

メソッド 内容
コントロール名を使用する コントロールは、アプリ内のどこからでも、名前で参照することができます。

例えば、Label1.Fill は名前が Label1 であるコントロールの Fill プロパティを参照します。
Self 演算子 数式を作成するときに、同じコントロールの別のプロパティを参照すると便利な場合があります。 名前による絶対参照を使用する代わりに、1 つのSelf への相対参照を使用する方が簡単で移植性が高くなります。 Self 演算子は、現在のコントロールに簡単にアクセスできるようにします。

例えば、Self.Fill は現在のコントロールの塗りつぶしの色を参照します。
Parent 演算子 一部のコントロールは、ScreenGallery コントロールなど、他のコントロールをホストします。 その中のコントロールのホスティング コントロールはと呼ばれます。 Self 演算子と同様に、Parent 演算子は、コンテナー コントロールへの簡単な相対参照を提供します。

例えば、Parent.Fill は、現在のコントロールのコンテナーであるコントロールの fill プロパティを参照します。

SelfParent は演算子であり、コントロール自体のプロパティではありません。 Parent.ParentSelf.Parent または Parent.Self への参照はサポートされていません。

識別子名

変数、データ ソース、列、およびその他のオブジェクトの名前に、Unicode を含めることができます。

スペースまたはその他の特殊文字を含む名前は単一引用符で囲みます。
2 つの単一引用符を共に使用して、名前内で 1 つの単一引用符を表します。 特殊文字を含まない名前には、一重引用符は必要ありません。

テーブルで表示される可能性のある列名の例と、それらが数式でどのように表されるかを次に示します:

データベースの列名 数式の列参照
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
スペースを含む名前 'Name with spaces'
「二重」引用符で囲まれた名前 'Name with "double" quotes'
「単一」引用符で囲まれた名前 'Name with ''single'' quotes'
@ アット マークが付いた名前 'Name with an @ at sign'

二重引用符は、テキスト文字列を指定する ために使用されます。

表示名および論理名

SharePoint および Microsoft Dataverse のような一部のデータ ソースには、同じテーブルまたはデータ列を参照する 2 つの異なる名前があります。

  • 論理名 - 一意であることが保証され、作成後に変更されず、通常、スペースやその他の特殊文字を使用できず、異なる言語にローカライズされない名前です。 その結果、名前は不可解なものになる可能性があります。 これらの名前は、プロの開発者が使用しています。 例えば、cra3a_customfield です。 この名前は、スキーマ名、または単に名前として参照されることもあります。

  • 表示名 - ユーザー フレンドリーで、エンド ユーザーに表示されることを目的とした名前。 この名前は一意ではなく、時間とともに変化することがあり、スペースと任意の Unicode 文字が含まれ、異なる言語にローカライズされる可能性があります。 上記の例に対応して、表示名は単語間にスペースがある カスタム フィールド になります。

表示名は理解しやすいので、キャンバス アプリはそれらを選択肢として提案し、論理名は提案しません。 論理名は推奨されていませんが、間接的に入力した場合でも使用できます。

たとえば、Dataverse のテーブルにカスタム フィールドを追加した場合を考えてみましょう。 論理名はシステムによって割り当てられ、フィールドの作成時にのみ変更できます。 結果は次のようになります。

カスタム フィールドが追加されたアカウント テーブルでは、

アカウントのフィールドへの参照を作成するとき、これは表示名なので、カスタム フィールド固有名の提案が使用されます。 この名前にはスペースが含まれているため、一重引用符を使用する必要があります:

表示名「カスタム フィールド」が強調表示された取引先のフィールド名の提案を示す Studio 数式バー

候補を選択した後「カスタム フィールド」が数式バーに表示され、データが取得されます。

フィールドに対する表示名「カスタム フィールド」の使用を示す Studio 数式バー

推奨されていませんが、このフィールドに論理名を使用することもできます。 これにより、同じデータが取得されます。 この名前にはスペースや特殊文字が含まれていないため、一重引用符は必要ありません。

フィールドに対する論理名 cr5e3_customfield の使用を示す Studio 数式バー

バックグラウンドで、数式に表示される表示名と基になる論理名との間のマッピングが維持されます。 データ ソースとの対話には論理名を使用する必要があるため、このマッピングは、現在の表示名から論理名に自動的に変換するために使用され、ネットワーク トラフィックに表示されます。 このマッピングは、たとえば表示名が変更されたり、別の言語のメーカーがアプリを編集したりした場合など、論理名に変換して新しい表示名に切り替えるためにも使用されます。

Note

環境間でアプリを移動する場合、論理名は翻訳されません。 Dataverse システム テーブル名とフィールド名の場合、論理名は環境間で一貫しているため問題ありません。 ただし、上記のこの例の cra3a_customfield などのカスタム フィールドは異なる環境の接頭辞を持つことがあります (この場合、cra3a)。 新しい環境では表示名に対して照合できるため、表示名が推奨されます。

名前の曖昧性を除去します

表示名は一意ではないため、同じ表示名が同じテーブルに複数回表示される場合があります。 これが発生すると、論理名は競合する名前の 1 つに対してかっこ内の表示名の最後に追加されます。 上記の例に基づき、論理名が cra3a_customfieldalt で、同じカスタム フィールドの表示名の 2 番目のフィールドが存在する場合、提案が次のように表示されます。

2 つのバージョンの「カスタム フィールド」の曖昧さを解消するための論理名 cr5e3_customfieldalt の使用を示している Studio の数式バー

名前の曖昧性解消文字列は、テーブルの名前、選択肢、その他の Dataverse 品目など、名前の競合が発生する他の状況で追加されます。

曖昧性除去演算子

一部の関数では、各レコードの処理中に、テーブルのフィールドにアクセスするための レコード スコープ を作成します (FilterAddColumnsSum など)。 レコード スコープによって追加されたフィールド名は、アプリの別の場所にある同じ名前を上書きします。 これが発生した場合でも、@ 曖昧性除去演算子を使用して、レコード スコープの外部の値にアクセスできます。

  • 入れ子になったレコード スコープの値にアクセスするには、次のパターンを使用した操作対象のテーブルの名前の @ 演算子を使います。
    Table[@FieldName]
  • データ ソース、コレクション、およびコンテキスト変数などのグローバル値にアクセスするには、[@オブジェクト名] のパターンを使用します (テーブルは指定しません)。

詳細および例については、レコード スコープ を参照してください。