Power Apps の演算子と識別子

適用対象: キャンバス アプリ モデル駆動型アプリ Power Pages

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

銘柄コード タイプ 説明設定
'...' 識別子 'アカウント名' スペースを含む特殊文字を含む識別子は一重引用符で囲まれます
... テキスト文字列 "こんにちは世界" テキスト文字列は二重引用符で囲まれています
$"..." 文字列補間 $「親愛なる {FirstName}」 テキスト文字列内に埋め込まれた数式
プロパティ セレクター スライダー1.値
Color.Red
Acceleration.X
テーブル、コントロール、シグナル または列挙体からプロパティを抽出します。 旧バージョンとの互換性を保つために、! を使用することもできます。

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

(1+2)×3
優先順位を変更し、大きな式の副次式をグループ化します
+ 算術演算子 1 + 2 加算
-   2 - 1 減算および符号
*   2 * 3 乗算
/   2 / 3 除算 (Mod 関数も参照してください)
^   2 ^ 3 累乗、Power 関数に相当します
%   20% 百分率 ("* 1/100" に相当します)
= 比較演算子 価格 = 100 と等しい
>   価格 > 100 より大きい
>=   価格 >= 100 以上である
<   価格 < 100 より小さい
<=   価格 <= 100 以下である
<>   価格 <> 100 と等しくない
& 文字列連結演算子 「こんにちは」と「」と「世界」 複数の文字列を続けて表示します
&& または そして 論理演算子 価格 < 100 && Slider1.Value = 20
または Price < 100 And Slider1.Value = 20
論理積、And 関数に相当します
|| または または   価格 < 100 || Slider1.Value = 20 または 価格 < 100またはSlider1.Value = 20 論理和、Or 関数に相当します
! または Not   !(価格 < 100) または いいえ (価格 < 100) 論理否定、Not 関数に相当します
正確な 会員制運営者 ギャラリー1.選択された保存済みアイテム コレクション またはテーブルに属しています
正確な   「Windows」は正確には「Windowsオペレーティング システムでウィンドウを表示するには...」 部分文字列をテストします (大文字小文字を区別します)
  ギャラリー1.保存アイテムで選択 コレクションまたはテーブルに属しています
  「キーボードとモニター」の「The」は... 部分文字列をテストします (大文字小文字を区別しません)
@ 曖昧さ回避 オペレーター MyTable[@フィールド名] フィールドの曖昧性を除去します
@   [@MyVariable] グローバルの曖昧性を除去します

[言語依存]
リスト区切り記号 もし(X < 10、「低い」、「良い」)
{ X: 12、Y: 32 }
[ 1, 2, 3 ]
以下の要素を区切ります: この文字は言語に依存します。
;
[言語依存]
数式のチェーン 収集(T, A); ナビゲート(S1, "") 関数の呼び出しの動作プロパティを区切ります。 このチェーン演算子は言語に依存します。
として オペレーター として すべての顧客を顧客として ギャラリーの ThisItemThisRecord をオーバーライドして、スコープ関数を記録します。 として より適切で具体的な名前を指定するのに役立ち、ネストされたシナリオでは特に重要です。
自己 自分 オペレーター 自己記入 現在のコントロールのプロパティへのアクセス
親 オペレーター 親.塗りつぶし コントロール コンテナーのプロパティにアクセスする
このアイテム このアイテム オペレーター このアイテム.FirstName Gallery または Form コントロールのフィールドにアクセスする
このレコード このレコード オペレーター このレコード.FirstName 完全なレコードと ForAllSumWith 内のレコード内の個々のフィールド、およびその他のレコードスコープ関数へのアクセス。 As 演算子でオーバーライドできます。

Note

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

In 演算子と Exactin 演算子

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

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

  2. ギャラリーの Items プロパティを次の数式に設定します。
    フィルター(在庫、ProductNameに「E」)

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

  3. ギャラリーの Items プロパティを次の数式に変更します。
    フィルター(在庫、"E" はProductNameに一致)

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

ThisItem、ThisRecord、および As 演算子

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

演算子 適用対象 内容
このアイテム ギャラリー コントロール
編集フォーム コントロール
表示フォーム コントロール
Gallery または Form コントロールの現在のレコードのデフォルト名。
このレコード すべての場合フィルタあり合計 およびその他の レコード スコープ 関数 ForAll とその他のレコード スコープ関数の現在のレコードのデフォルト名。
名前として ギャラリー コントロール
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 は数式を理解しやすくすることができ、フィールド名がリレーションシップ名でもあるあいまいな状況で必要になる場合があります。 ThisRecord はオプションですが、 ThisItem は常に必須です。

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 プロパティを参照します。
自分 オペレーター 数式を作成するときに、同じコントロールの別のプロパティを参照すると便利な場合があります。 名前による絶対参照を使用する代わりに、1 つのSelf への相対参照を使用する方が簡単で移植性が高くなります。 Self 演算子は、現在のコントロールに簡単にアクセスできるようにします。

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

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

Self は演算子であり、コントロール自体のプロパティではありません。 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 など)。 レコード スコープによって追加されたフィールド名は、アプリの別の場所にある同じ名前を上書きします。 これが発生した場合でも、@ 曖昧性除去演算子を使用して、レコード スコープの外部の値にアクセスできます。

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

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