Data types

Note

Microsoft Power Fx は、キャンバス アプリの数式言語の新しい名前です。 これらの記事は、キャンバス アプリから言語を抽出し、その他の Microsoft Power Platform 製品と統合して、オープン ソースとして利用できるようにするために進行中の作業です。 言語の紹介のために Microsoft Power Fx の概要 から開始します。

情報は、スプレッドシートのセルと非常によく似た小さな離散値でアプリを通過します。 たとえば、誕生日フィールドと記念日フィールドはどちらも、年、月、日を含む Date 値として通過します。 アプリは、これらの値をフォーマットする方法を認識し、それぞれに適切なものに入力を制限し、データベースと値を共有します。 誕生日と記念日は人によって異なりますが、システムはそれらを全く同じ方法で処理します。 この場合、Dateデータ型 の例です。

この記事では、キャンバスアプリがサポートするデータ型の詳細について説明します。 アプリが外部のデータ ソースに接続すると、そのソースの各データ型がキャンバス アプリのデータ型にマップされます。

データの種類 内容
Boolean true または false の値。 IfFilter または比較なしの他の関数で直接使用できます。 true
Color アルファ チャネルを含む色の指定。 Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Currency 浮動小数点数に格納される通貨値。 Currency 値は、通貨フォーマット オプションを使用した数値と同じです。 123
4.56
Date アプリのユーザーのタイム ゾーンでの、時刻のない日付。 Date( 2019, 5, 16 )
DateTime アプリのユーザーのタイム ゾーンでの、時刻のある日付。 DateTimeValue( "May 16, 2019 1:23:09 PM" )
実数 高精度、基数 10 の演算、および範囲が制限された数値。 123
小数点以下桁数 ( "1.2345" )
GUID グローバル一意識別子 GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hyperlink ハイパーリンクを保持するテキスト文字列。 "https://powerapps.microsoft.com"
Image .jpeg、.png、.svg、.gif、またはその他の一般的な Web 画像形式へのユニバーサルリソース識別子 (URI) 文字列。 アプリのリソースとして追加された MyImage
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Media ビデオまたはオーディオ録音への URI テキスト文字列。 アプリのリソースとして追加された MyVideo
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
数値または浮動 標準精度、基数 2 の演算、および広範囲の数値。 123
8.903e121
1.234e200
選択肢 数字に裏付けられた、オプション セットからの選択。 このデータ型は、ローカライズ可能なテキスト ラベルと数値を組み合わせたものです。 ラベルがアプリに表示され、数値が保存されて比較に使用されます。 ThisItem.OrderStatus
Record データ値のレコード。 この複合データ型には、このトピックにリストされている他のデータ型のインスタンスが含まれています。 詳細については、テーブルの使用を参照してください。 { Company: "Northwind Traders",
スタッフ: 35、
NonProfit: false }
Record reference テーブル内のレコードへの参照。 このような参照は、ポリモーフィック ルックアップでよく使用されます。 詳細については、参照の使用を参照してください。 First(Accounts).Owner
Table レコードのテーブル。 すべてのレコードには、同じデータ型のフィールドに同じ名前を付ける必要があり、省略されたフィールドは空白として扱われます。 この複合データ型には、このトピックにリストされている他のデータ型のインスタンスが含まれています。 詳細については、テーブルの使用を参照してください。 Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text Unicode テキスト文字列。 "Hello, World"
Time アプリ ユーザーのタイム ゾーンでの、日付のない時刻。 Time( 11, 23, 45 )
Two option ブール値に裏付けられた、2 つのオプション セットからの選択。 このデータ型は、ローカライズ可能なテキスト ラベルとブール値を組み合わせたものです。 ラベルがアプリに表示され、ブール値が保存されて比較に使用されます。 ThisItem.Taxable
型指定されていないオブジェクト 宣言されていない型のオブジェクト。 基になるオブジェクトは既存の任意の型である可能性があり、Boolean()Value()Table() などのような関数を使用して互換性のある型に変換できます。詳細については、型指定されていないオブジェクトJSON の操作 を参照してください。 ParseJSON("{ ""Field"" : 1234 }").Field

これらのデータ型の多くは類似しており、基本的な表現は同じです。たとえば、Hyperlink フィールドは Text として扱われます。 追加のデータ型により、フォームやその他のコントロールの既定エクスペリエンスが向上します。

Blank

すべてのデータ型、空白値を持つことができます (つまり、値なし)。 「null」 という用語は、この概念のデータベースでよく使用されます。

Blank 関数を Set または Patch 関数と共に使用して、変数またはフィールドを blank に設定します。 例えば、Set( x, Blank() )は、グローバル変数 x の値を削除します。

IsBlank 関数を使用して、空白の値をテストします。 Coalesce 関数を使用して、可能な空白の値を、空白以外の値に置き換えます。

すべてのデータ型が 空白 をサポートしているため、Boolean そして Two option のデータ型は、効率的に 3 種類の値を持ちます。

これらの 4 つのデータ型はすべて、Unicode テキスト文字列に基づいて作成されます。

埋め込みテキスト

計算式に埋め込まれたテキスト文字列は、二重引用符で囲まれています。 2 つの二重引用符を一緒に使用して、テキスト文字列内の単一の二重引用符を表します。 たとえば、Button コントロールの OnSelect プロパティで次の式を使用します。

Notify( "Jane said ""Hello, World!""" )

ボタンを押すと、最初と最後の二重引用符が省略され (テキスト文字列を区切るため)、Hello, World! を囲む二重引用符が単一のダブルクォートに置き換えられるバナーを生成します。

Jane が

シングル クォーテーションは、特殊文字を含む 識別子名 や、文字列の中で特別な意味を持たない識別子名に使用されます。

文字列の補間

文字列補間を使用して、数式をテキスト文字列内に埋め込みます。 多くの場合、Concatenate 関数や & 演算子を使用するよりも、出力の視覚化を簡単に行うことができます。

文字列の先頭にドル記号 $ を付け、埋め込む数式を中括弧 { } で囲みます。 中括弧を文字列に含めるには、中括弧を繰り返し使用します: {{ または }}。 文字列補間は、標準的なテキスト文字列が使用できる場所であればどこでも使用することができます。

たとえば、グローバル変数を使用したこの式では、リンゴを 3 に設定してバナナを 4 に設定しています:

$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."

この数式はテキスト文字列を返します。 リンゴが3個、バナナが4個、合計7個の果物があります。中括弧の代わりに変数 ApplesBananas が挿入され、数式 Apples+Bananas の結果も表示されます。 中括弧の周りのスペースやその他の文字はそのまま保持されます。

埋め込み数式には、任意の関数または演算子を含めることができます。 必要なのは、数式の結果をテキスト文字列に強制できることだけです。 たとえば、この式は、NickName が指定されている場合はニックネームを、指定されていない場合は FirstName をあいさつ文に挿入します:

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )

NickNameが "ジョー" に設定されている場合、この数式は次のテキスト文字列を生成します: ようこそジョー、お会いできて光栄です!NickName空欄FirstName が「ジョセフ」の場合、この式は次のようになります: 親愛なるジョセフ、はじめまして!

文字列補間は、埋め込み式に標準的なテキスト文字列を含めることができます。 たとえば、NickNameFirstName のどちらも入力されていない場合、友達を使用することができます:

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

文字列の補間はネストすることもできます。 たとえば、FirstMiddleLast ネームはあいさつに結合されます。 これらの値の 1 つまたは 2 つが空白であっても、名前の部分の間に正しい数のスペースが入ります。 どの部分も提供されない場合、内側の文字列補間は空の文字列に折りたたまれ、Coalesce 関数によって "Friend (友達)" に置き換えられます。

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
最初 中央揃え 最後 結果
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

改行

埋め込まれたテキスト文字列には改行を含めることができます。 たとえば、LabelコントロールのText プロパティを設定します:

"Line 1
Line 2
Line 3"

上記の式により、Label コントロールに 3 つの行が表示されます:

1 行目、2 行目、3 行目の 3 つの行を表示する埋め込みテキスト文字列と Label コントロール。

以下に示すように、改行は文字列補間でもサポートされます:

$"Line {1}
Line {1+1}
Line {1+1+1}"

上記の式は同じ出力になります:

文字列補間式と Label コントロールで、1 行目、2 行目、3 行目の 3 つ行を表示します。

画像とメディアのリソース

ファイル メニューを使用して、画像、ビデオ、オーディオ ファイルをアプリのリソースとして追加できます。 インポートされたファイルの名前は、アプリのリソース名になります。 この図では、nwindlogo という名前の Northwind Traders のロゴが、アプリに追加されました。

Northwind リソース。

このリソースをアプリで使用するには、Image コントロールの Image プロパティで指定します。

Northwind 画像。

画像およびその他のメディアの URI

Label コントロールの Text プロパティを nwindlogo に設定することで、最後の例を少し詳しく知ることができます。 ラベルはテキスト文字列を示します。

Northwind テキスト。

キャンバス アプリは、クラウド内にあるか、アプリ リソースとして追加されたかに関係なく、URI テキスト文字列によって各画像または他のメディア ファイルを参照します。

たとえば、画像コントロールの Image プロパティは、アプリ リソースだけでなく、"https://northwindtraders.com/logo.jpg"" のような Web 上の画像へのリンクも受け入れます。 この例では、プロパティは、データ URI スキームを使用するインライン画像も受け入れます。

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

その URI は、2 つの紫色のダイヤモンドの拡大バージョンを表示します。

ダブル ダイヤモンド。

画像コントロールの Image プロパティをカメラ コントロールの Photo プロパティに設定すると、Camera コントロールでキャプチャされた最新の画像を表示できます。 アプリは画像をメモリに保持し、カメラ コントロールの Photo プロパティは、画像への URI 参照を返します。 たとえば、写真を撮ると、カメラの Photo プロパティは "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1" を返します。

URI を使用して、データベースに保存されている画像または別のメディア ファイルを参照します。 そうすれば、アプリは必要になるまで実際のデータを取得しません。 たとえば、Microsoft Dataverse テーブルの添付書類が "appres://datasources/Contacts/table/..." を返す場合もあります。このカメラの例のように、画像コントロールの Image プロパティをバイナリ データを取得するこのリファレンスに設定することで、この画像を表示できます。

画像などのメディア データ型をデータベースに保存すると、アプリは URI 参照ではなく、実際の画像またはメディア データを送信します。

サイズの制限

テキスト文字列および URI は、データ型の長さはあらかじめ設定されていません。

これらのデータ型が参照するバイナリ データにも、事前に設定されたサイズ制限はありません。 たとえば、現在 "appres://..." として参照されているカメラ コントロールを介してキャプチャされた画像は、デバイスのカメラが要求できる限りの大きさで高解像度にすることができます。 メディア ファイルの解像度、フレーム レート、およびその他の属性は、データ型によって制限されませんが、メディアの再生とキャプチャに関する特定のコントロールには、独自の制限がある場合があります。

ただし、すべてのデータ サイズは、アプリで利用可能なメモリ容量によって左右されます。 デスクトップ コンピューターで実行されているブラウザーは、通常 100 メガバイトを超えるデータをサポートします。 ただし、電話などのデバイスで使用可能なメモリ容量ははるかに少なく、通常は 30 - 70 メガバイトの範囲です。 アプリがこれらの制限内で実行されるかどうかを判断するには、実行するすべてのデバイスで一般的なシナリオをテストします。

ベスト プラクティスとして、必要な間だけメモリにデータを保持します。 できるだけ早く画像をデータベースにアップロードしてください。アプリのユーザーが要求した場合にのみ画像をダウンロードします。

数値

注意

Power Apps 現在は 浮動 のみをサポートしており、これはすべての数値の型です。 小数点以下桁数 のサポートは間もなく追加される予定です。

Power Fx は、2 種類の数値をサポートします: 10 進数浮動 (同義語 数値 および 通貨)。

ほとんどのビジネス計算には、10進数 が最適です。 10 進数の数値を正確に表現できます。つまり、 0.1 を正確に表現でき、計算中に丸め誤差が発生しにくくなります。 最大 28 桁の精度で最大 1028 まで、あらゆるビジネス ニーズに対応できる十分な範囲を備えています。 小数点以下桁数 は、ほとんどの Power Fx ホストのデフォルトの数値データ型であり、単に 2*2と記述する場合に使用されます。

浮動 は科学的計算に最適です。 最大 10308 までの、より広い範囲の数値を表すことができます。 精度は小数点以下 15 桁に制限されており、計算は基数 2 に基づいているため、一部の一般的な 10 進数値を正確に表すことができません。 浮動 もパフォーマンスが高く、それが要因で精度が重要ではない場合に好まれます。

10 進数

小数点以下桁数 データ型は、 .NET 10 進データ型 を使用することがほとんどです。 SQL Serer で実行される Dataverse 数式列などの一部のホストは、SQL Server 10 進データ型を使用します。

小数点以下桁数 は、10 進数を使用して、学校で学んだ方法で計算を実行します。 これは、基数 2 の計算 (浮動 で使用される) を使用するときに蓄積される可能性のある非常に小さな差による丸め誤差を回避するために非常に重要です。

範囲は 79,228,162,514,264,337,593,543,950,335 (正) から 79,228,162,514,264,337,593,543,950,335 (負) です。 小数点区切り文字はこれらの数値内のどこにでも配置でき、最大 28 桁の精度を提供し、正確に表現できます。 たとえば、79,228,162,514,264.337593543950335 は 7.9228162514264337593543950335 と同様に正確に表すことができます。

浮動小数点数

数値 または 通貨 と呼ばれる 浮動 データ型は、IEEE 754 倍精度浮動小数点標準 を使用します。 この標準は、–1.79769 x 10308 から 1.79769 x 10308 まで、機能する非常に広い範囲の数値を提供します。 表示できる最小値は、5 x 10-324 です。

浮動 は、-9,007,199,254,740,991 (–(253 – 1)) と 9,007,199,254,740,991 (253 – 1) の間の整数 (それぞれの値を含む) を正確に表すことができます。 この範囲は、データベースが一般的に使用する 32 ビット (または 4 バイト) の整数データ型よりも大きいものです。 ただし、キャンバス アプリは 64 ビット (または 8 バイト) の整数データ型を表すことができません。 数値をテキスト フィールドに保存するか、計算列を使用して数値をテキスト フィールドにコピーして、テキスト データ型にマッピングします。 このようにして、これらの値を保持、表示、および入力し、それらを比較してそれらが等しいかどうかを判断できます。ただし、このフォームではそれらの数値計算を実行できません。

浮動小数点演算は概算であるため、多くの文書化された例で予期しない結果が生じることがあります。 55 / 100 *100 という計算式は正確に 55 を返し、(55 / 100 *100) - 55 という計算式は正確にゼロを返すことが期待できます。 ただし、後者の式は 7.1054 x 10–15 を返します。これは非常に小さい値ですがゼロではありません。 この小さな差分は通常問題を引き起こさず、アプリが結果を表示するときにはそれを切り上げます。 ただし、小さな差分がそれ以降の計算で積み重なり、間違った回答を与えるように見えることがあります。

多くの場合、データベース システムは通貨を保存し、10 進数を使用して計算を実行します。これにより、範囲は狭くなりますが、精度をより細かくコントロールできます。 既定では、キャンバス アプリは通貨を浮動小数点値の内外にマッピングします。したがって、結果がネイティブの 10 進数データ型で行われる計算とは異なる場合があります。 このタイプの不一致によって問題が発生する場合は、ここのセクションで前述した大きな整数を扱うのと同じように、これらの値をテキストとして扱うこともできます。

既定値と変換

注意

Power Apps 現在は 浮動 のみをサポートしており、これはすべての数値の型です。 小数点以下桁数 のサポートは間もなく追加される予定です。

ほとんどの Power Fx ホストはデフォルトで 10 進数 を使用します。 これは以下に影響を与えます。

  • 数式内のリテラル数値。 数値 1.23410 進数 値として解釈されます。 たとえば、式 1.234 * 21.234210 進数として解釈し、10進数の 結果 を返します。 。
  • Value 関数。 Value( "1.234" )10 進数 値を返します。 たとえば、数式 Value( "1.234" ) * 2Value 関数は、テキスト文字列 "1.234" の内容を 10 進数として解釈します。

浮動 値を操作するには、Float 関数を使用します。 上記の例を拡張すると、Float( 1.234 )10 進数1.234浮動小数点に変換します。 Float は、Value の代わりに使用して、Float( "1.234" ) などの浮動小数点数を含む文字列を Float 値に変換することもできます。これは、数値を 小数点以下桁数として表現できない場合に必要です。

まとめ:

使い方 実数 浮動
数式内のリテラル数値 1.234 Float( 1.234 )
Float( "1.234" )
テキスト文字列からの変換 Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
数値型間の変換 Decimal( float ) Float( decimal )
テキスト文字列への変換 Text( decimal ) Text( float )

数値型の混合

浮動小数点10 進数 の値は自由に組み合わせることができます。 混合すると、範囲が広くなるため、 10 進数 値は 浮動小数点 値に変換されます。 これにより精度が失われる可能性があるため、2 つを不必要に混合しないことが重要です。 10 進数 がデフォルトのリテラル データ型であり、ほとんどの数値関数はその型を保持するため、望まなくても 浮動 への移行を避けるのは比較的簡単です。

たとえば、 Power Platform CLI をインストールした後に pac power-fx repl を使用した次の計算を考えてみましょう。 どちらの数値も 10 進数であるため、計算は 10 進数で行われ、結果は完全な精度を保持します。

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

代わりに、2 番目のオペランドが 浮動 に変更された場合、計算全体は 浮動 で実行され、小さな小数部分は失われます。

>> 1.0000000000000000000000000001 * Float(2)
2

Date、Time、DateTime

タイム ゾーン

日付/時刻の値は次のカテゴリに分類されます。

  • ユーザー ローカル:これらの値はUTC (世界協定時刻)に格納されますが、アプリ ユーザーのタイム ゾーンは、アプリが値を表示する方法と、アプリ ユーザーが値を指定する方法に影響を与えます。 たとえば、同じ時点はカナダのユーザーと日本のユーザーでは異なって見えます。
  • タイムゾーン非依存: タイムゾーンに関係なく、アプリはこれらの値を同じ方法で表示し、アプリユーザーは同じ方法で指定します。 同じ時点は、カナダのユーザーにも日本のユーザーにも同じように表示されます。 アプリが異なるタイム ゾーンで使用されることを予定していないアプリ作成者は、全体的にシンプルであるため、これらの値を使用します。

次のテーブルにいくつかの例を示します。

日付/時刻の種類 データベースに保存されている値 UTC の 7 時間西に表示および入力された値 UTC の 4 時間東に表示および入力された値
ユーザー ローカル Sunday,May19,2019
4:00 AM
Saturday,May18,2019
9:00 PM
Sunday,May19,2019
8:00 AM
タイム ゾーン非依存 Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM

ユーザー ローカルの日付/時刻の場合、キャンバス アプリはブラウザーまたはデバイスのタイム ゾーンを使用しますが、モデル駆動型アプリは Dataverse のユーザーの設定を使用します。 これらの設定は通常は一致しますが、これらの設定が異なると結果も異なります。

DateAdd および TimeZoneInformation 関数を使用して、ローカル時間を UTC に変換し、再び戻します。 これらの関数については、ドキュメントの最後にある例を参照してください。

相当する数値

キャンバス アプリは、UTC でユーザー ローカルまたはタイムゾーン非依存でも、すべての日付/時刻値を保持および計算します。 アプリは、値を表示するとき、およびアプリ ユーザーが値を指定するときに、アプリ ユーザーのタイム ゾーンに基づいて値を変換します。

キャンバス アプリがタイム ゾーン非依存の値をデータソースから読み取るか、そのような値をデータ ソースに書き込むと、アプリは自動的に値を調整してアプリ ユーザーのタイム ゾーンを補正します。 その後、アプリはその値を UTC 値として扱い、アプリ内の他のすべての日付/時刻の値と一致させます。 この補正のため、アプリがアプリ ユーザーのタイム ゾーンの UTC 値を調整すると、元のタイム ゾーン非依存の値が表示されます。

Value 関数を使用して日付/時刻値の基になる数値にアクセスすることにより、この動作をより詳細に観察することができます。 この関数は、1970 年 1 月 1 日の 00:00:00.000 UTC からのミリ秒数として日付/時刻値を返します。

すべての日付/時刻値は UTC で保持され、Date 関数は日付を UTC で返すため、Value( Date( 1970, 1, 1 ) ) は世界のほとんどの場所でゼロを返しません。 たとえば、式は UTC から 8 時間オフセットされたタイム ゾーンで 28,800,000 を返します。 その数値は、8 時間のミリ秒数を反映しています。

上記の例に戻ります。

日付/時刻の種類 データベースに保存されている値 UTC の 7 時間西に表示および入力された値 Value 関数が返す
ユーザー ローカル Sunday,May19,2019
4:00 AM
Saturday,May18,2019
9:00 PM
1,558,238,400,000
(Sunday,May19,2019
4:00 AM UTC)
タイム ゾーン非依存 Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM
1,558,263,600,000
(Sunday,May19,2019
11:00 AM UTC)

Unix 時間の変換

Unix 時間は、1970 年 1 月 1 日 00:00:00 UTC 以降の秒数を反映しています。 キャンバス アプリは秒ではなくミリ秒を使用するため、1,000 で乗算または除算することで 2 つの間を変換できます。

たとえば、Unix 時間は 2001 年 9 月 9 日 01:46:40 UTC を 1,000,000,000 として表示します。 キャンバス アプリでその日付/時刻の値を表示するには、その数値に 1,000 を掛けてミリ秒に変換し、Text 関数で使用します。 計算式 Text(1000000000 *1000, DateTimeFormat.UTC) は、文字列 2001-09-09T01:46:40.000Z を返します。

ただし、DateTimeFormat.LongDateTime24 形式を UTCから -7 時間オフセットしたタイムゾーン (UTC の 7時間西) で使用すると、この関数は Saturday, September 8, 2001 18:46:40 を返します。 この結果は、ローカルのタイム ゾーンに基づいて、DateTime 値を正確に示してます。

Unix 時間に変換するには、Valueからの結果を 1,000 で割ります。
RoundDown( Value( UnixTime ) / 1000, 0 )

さらに計算するため、または Power Apps 内で表示するためにDate値の Unix 時間が必要な場合は、次の式を使用します。
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server には DatetimeDatetime2、およびほかの日付/時刻データ型があり、タイム ゾーンのオフセットは含まれておらず、どのタイム ゾーンにいるかを示しません。 キャンバス アプリは、これらの値が UTC に格納されていると想定し、ユーザー ローカルとして扱います。 値がタイム ゾーン非依存である場合は、TimeZoneOffset 関数を使用して UTC 変換を修正します。

キャンバス アプリは、値をアプリ内部の UTC 表現に変換するときに、Datetimeoffset フィールドに含まれているタイムゾーン情報を使用します。 アプリは、データを書き込むときに、常にタイム ゾーン (ゼロ タイム ゾーン オフセット) として UTC を使用します。

キャンバス アプリは、SQL Server の Time データ型の値を ISO 8601 期間の形式 のテキスト文字列として、読み取りおよび書き取ります。 たとえば、この文字列形式を解析し、Time 関数を使用してテキスト文字列 "PT2H1M39S"時間値に変更する必要があります。

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

日付と時刻情報の組み合わせ

DateTime、および DateTime は、名前は異なりますが、日付と時刻に関する情報はすべて同じです。

Date の値には、通常は真夜中の時刻情報を含めることができます。 Time の値には、日付情報を含めることができます。通常は 1970 年 1 月 1 日です。 Dataverse は、日付のみのフィールドに時刻情報も格納しますが、既定では日付情報のみが表示されます。 同様に、キャンバス アプリはこれらのデータ型を区別して、既定の形式とコントロールを決定することがあります。

日付と時刻の値を直接加算および減算することはお勧めしません。タイムゾーンやその他の変換が結果に混乱が生じさせることがあります。 Value 関数を使用して、最初に日付/時刻の値をミリ秒に変換し、アプリ ユーザーのタイム ゾーンを考慮に入れるか、DateAdd および DateDiff 関数を使用して、これらの値のいずれかを加算または減算します。

選択肢とはい/いいえ

選択肢と 2 つのオプションのデータ型は、アプリユーザーが選択できる 2 つ以上の選択肢を提供します。 たとえば、注文の状況 の選択は、新着出荷済み請求済みクローズ済み の選択肢を提供しているかもしれません。 Two option のデータ型は、2 つの選択肢のみ提供します。

これらのデータ型はどちらも、テキスト文字列のコンテキストでラベルを表示します。 たとえば、ラベル コントロールは、コントロールの Text プロパティは、その選択を参照する式に設定されます。 オプション ラベルは、さまざまな場所のアプリ ユーザー向けにローカライズされる場合があります。

アプリのユーザーがオプションを選択してその変更を保存すると、アプリはデータをデータベースに送信し、データベースはそのデータを言語に依存しない表現で保存します。 選択肢のオプションは数値として、二者択一データ型の選択肢はブール値として送信、保存されます。

ラベルは表示のみを目的としています。 ラベルは言語に固有であるため、ラベルを直接比較することはできません。 代わりに、各選択肢には、基になる数値またはブール値で機能する列挙があります。 たとえば、この計算式は使用できません。

If( ThisItem.OrderStatus = "Active", ...

ただし、次の数式を使用できます。

If( ThisItem.OrderStatus = OrderStatus.Active, ...

(テーブルが共有する) グローバル選択肢の場合、オプションセット列挙の名前はグローバル選択肢の名前と一致します。 ローカル選択 (テーブルを大将とする) の場合、名前にはテーブルの名前が含まれる場合があります。 この動作により、複数のテーブルに同じ名前の選択肢がある場合の競合が回避されます。 たとえば、アカウント テーブルには 注文の状況 選択があり、そしてその名前は OrderStatus (アカウント) の可能性があります。 その名前には 1 つ以上のスペースとかっこが含まれるため、計算式で参照する場合は、単一引用符で囲む必要があります。

さらに、2 つのオプションの値はブール値としても動作します。 たとえば、課税状況という名前の 2 つのオプションの値には、課税対象そして非課税というラベルがあり、それぞれ true および false に対応しています。 デモの目的で、この計算式を使用できます。

If( ThisItem.Taxable = TaxStatus.Taxable, ...

この等価な式も使用できます。

If( ThisItem.Taxable, ...