情報は、スプレッドシートのセルのように、小さな個別の値で Power Fx を通過します。 たとえば、 誕生日 フィールドと Anniversary フィールドのデータはどちらも、年、月、日を含む Date 値として流れ出します。 Power Fx では、これらの値を書式設定し、入力をそれぞれの適切な値に制限し、値をデータベースと共有します。 誕生日や記念日は人によって異なる場合がありますが、システムは同じように処理します。 この場合、Date は データ型 の例です。
この記事では、Power Fx の各データ型、動作方法、および外部データ ソースへのマップ方法について説明します。
| データ型 | プロパティ | 使用例 |
|---|---|---|
| ブール値 | true または false の値。 If、Filter、およびその他の関数では、比較なしで直接使用できます。 | true |
| 選択肢 | 数字に裏付けられた、オプション セットからの選択。 このデータ型は、ローカライズ可能なテキスト ラベルと数値を組み合わせたものです。 ラベルがアプリに表示され、数値が保存されて比較に使用されます。 名前で Choice フィールドのインスタンスを使用する場合、Type 関数はこのデータ型をサポートします。 | ThisItem.OrderStatus |
| Color | アルファ チャネルを含む色指定。 |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
| Currency | 浮動小数点数に格納されている通貨値。 Currency 値は、通貨フォーマット オプションを使用した数値と同じです。 Type 関数は、Currency データ型をサポートしていません。 |
123 4.56 |
| 日付 | アプリ ユーザーのタイム ゾーン内の時刻のない日付。 | Date( 2019, 5, 16 ) |
| DateTime | アプリ ユーザーのタイム ゾーン内の時刻を含む日付。 | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
| 小数 | 高精度、基本 10 操作、および限られた範囲を持つ数値。 |
123 小数( "1.2345" ) |
| Dynamic (以前の UntypedObject) | 値の型は動的であり、実行時に異なる場合があります。 動的な値は、任意の既存の型にすることができ、 Boolean()、 Value()、 Table()などの関数を使用して互換性のある型に変換できます。詳細については、「 動的な値 」と 「JSON の操作」を参照してください。 | ParseJSON("{ ""Field"" : 1234 }")。畑 |
| 浮動 | 標準精度、基数 2 の演算、および広範囲の数値。 |
123 8.903e121 1.234e-200 |
| GUID | グローバル一意識別子。 |
GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
| Hyperlink | ハイパーリンクを含むテキスト文字列。 | "https://powerapps.microsoft.com" |
| イメージ | .jpeg、.png、.svg、.gif、またはその他の一般的な Web イメージ形式のイメージに対する ユニバーサル リソース識別子 (URI) テキスト文字列。 Type 関数は Image データ型をサポートしていません。 | アプリのリソースとして追加された MyImage "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
| Media | ビデオまたはオーディオ録音への URI テキスト文字列。 Type 関数は Media データ型をサポートしていません。 | アプリのリソースとして追加された MyVideo "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
| 番地 | Decimal (ほとんどの Power Fx がホスト) または Float (キャンバス アプリ) のエイリアス。 状況に応じてさまざまな数値を使用できる場合は、[ 数値 ] を使用して互換性を最大限に高めます。 |
123 0.0123 1e4 |
| レコード | データ値のレコード。 この複合データ型には、この記事に記載されている他のデータ型のインスタンスが含まれています。 詳細については、「 テーブルの操作」を参照してください。 Record のインスタンスを使用する場合、Type 関数はこのデータ型をサポートします。 |
{ Company: "Northwind Traders", スタッフ: 35、 NonProfit: false } |
| レコード参照 | テーブル内のレコードへの参照。 多くの場合、これらの参照はポリモーフィックなルックアップで使用されます。 詳細については、「 参照の操作」を参照してください。 Type 関数では、このデータ型はサポートされていません。 | First(Accounts).Owner |
| テーブル | レコードのテーブル。 すべてのレコードのフィールド名とデータ型は同じである必要があり、省略されたフィールドは 空白として扱われます。 この複合データ型には、この記事に記載されている他のデータ型のインスタンスが含まれています。 詳細については、「 テーブルの操作」を参照してください。 Table のインスタンスを使用する場合、 Type 関数はこのデータ型をサポート します。 |
Table( { FirstName: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
| Text | Unicode テキスト文字列。 | "ハロー ワールド" |
| Time | アプリ ユーザーのタイム ゾーン内の日付のない時刻。 | Time( 11, 23, 45 ) |
| 無効 | 動作ユーザー定義関数でのみ使用され、関数に戻り値の型がないことを示します。 Type 関数では、このデータ型はサポートされていません。 関数に戻り値または戻り値がない場合でも、常にエラーを返すことができます。 | Hi(): Void = { Notify( "Hello!" ) } |
| はい/いいえ | ブール値に裏付けられた、2 つのオプション セットからの選択。 このデータ型は、ローカライズ可能なテキスト ラベルとブール値を組み合わせたものです。 ラベルがアプリに表示され、ブール値が保存されて比較に使用されます。 名前で Yes/No フィールドのインスタンスを使用する場合、Type 関数はこのデータ型をサポートします。 | ThisItem.Taxable |
これらのデータ型の多くは似ていて、基になる表現が同じで、 ハイパーリンク フィールドは テキストとして扱われます。 追加のデータ型により、フォームやその他のコントロールでの既定のエクスペリエンスが向上します。
Blank
すべてのデータ型の値は 空白 (値なし) にすることができます。 「null」 という用語は、この概念のデータベースでよく使用されます。
Blank 関数を Set または Patch 関数と共に使用して、変数またはフィールドを blank に設定します。 たとえば、 Set( x, Blank() ) は グローバル変数 x の値を削除します。
IsBlank 関数を使用して空白の値をテストします。 Coalesce 関数を使用して、可能な空白の値を、空白以外の値に置き換えます。
すべてのデータ型が 空白をサポートしているため、 ブール 型と 2 オプション のデータ型には 3 つの可能な値があります。
Text、Hyperlink、Image、Media
これらの 4 つのデータ型はすべて、Unicode テキスト文字列に基づいて作成されます。
埋め込みテキスト
計算式に埋め込まれたテキスト文字列は、二重引用符で囲まれています。 2 つの二重引用符を一緒に使用して、テキスト文字列内の単一の二重引用符を表します。 たとえば、Button コントロールの OnSelect プロパティで次の式を使用します。
Notify( "Jane said ""Hello, World!""" )
ボタンが押されるとバナーが表示され、最初と最後の二重引用符が省略され (テキスト文字列が区切られます) 、Hello, World! の周囲で繰り返される二重引用符が単一の二重引用符に置き換えられます。
シングル クォーテーションは、特殊文字を含む 識別子名 や、文字列の中で特別な意味を持たない識別子名に使用されます。
文字列の補間
文字列補間を使用して、数式をテキスト文字列内に埋め込みます。 この方法は、Concatenate 関数や & 演算子を使用するよりも、作業しやすく、出力を視覚化しやすくなります。
文字列の先頭にドル記号 $ を付け、埋め込む数式を中括弧 { } で囲みます。 中括弧を文字列に含めるには、中括弧を繰り返し使用します: {{ または }}。 文字列補間は、標準的なテキスト文字列が使用できる場所であればどこでも使用することができます。
たとえば、グローバル変数を使用したこの式では、リンゴを 3 に設定してバナナを 4 に設定しています:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
この数式はテキスト文字列を返します。 リンゴが3個、バナナが4個、合計7個の果物があります。中括弧の代わりに変数 Apples と Bananas が挿入され、数式 Apples+Bananas の結果も表示されます。 中括弧の周りのスペースやその他の文字はそのまま保持されます。
埋め込み数式には、任意の関数または演算子を含めることができます。 必要なのは、数式の結果をテキスト文字列に強制的に変換できることです。 たとえば、この式は、NickName が指定されている場合はニックネームを、指定されていない場合は FirstName をあいさつ文に挿入します:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"
NickNameが "ジョー" に設定されている場合、この数式は次のテキスト文字列を生成します: ようこそジョー、お会いできて光栄です!。 NickName が 空欄 で FirstName が「ジョセフ」の場合、この式は次のようになります: 親愛なるジョセフ、はじめまして!。
文字列補間は、埋め込み式に標準的なテキスト文字列を含めることができます。 たとえば、NickName と FirstName のどちらも入力されていない場合、友達を使用することができます:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
文字列の補間はネストすることもできます。 たとえば、First、Middle、Last ネームはあいさつに結合されます。 これらの値の 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 つの行が表示されます:
以下のように、改行は文字列補間でもサポートされます:
$"Line {1}
Line {1+1}
Line {1+1+1}"
その結果、同じ出力が得られます:
画像とメディアのリソース
ファイル メニューを使用して、画像、ビデオ、オーディオ ファイルをアプリのリソースとして追加できます。 インポートされたファイルの名前は、アプリのリソース名になります。 この図では、nwindlogo という名前の Northwind Traders ロゴがアプリに追加されました:
このリソースをアプリで使用するには、Image コントロールの Image プロパティで指定します。
画像およびその他のメディアの URI
Label コントロールの Text プロパティを nwindlogo に設定することで、最後の例を少し詳しく知ることができます。 ラベルはテキスト文字列を示します。
キャンバス アプリは、クラウド内にあるか、アプリ リソースとして追加されたかに関係なく、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 は、データ型の長さはあらかじめ設定されていません。
これらのデータ型が参照するバイナリ データにも、事前に設定されたサイズ制限はありません。 たとえば、camera コントロールでキャプチャされた画像 ("appres://..." として参照される) は、デバイスのカメラで可能な限り、大きく、高解像度にすることができます。 メディア ファイルの解像度、フレーム レート、およびその他の属性は、データ型によって制限されませんが、メディアの再生とキャプチャに関する特定のコントロールには、独自の制限がある場合があります。
ただし、すべてのデータ サイズは、アプリで利用可能なメモリ容量によって左右されます。 デスクトップ コンピューターで実行されているブラウザーは、通常 100 メガバイトを超えるデータをサポートします。 ただし、電話などのデバイスで使用可能なメモリ容量ははるかに少なく、通常は 30 - 70 メガバイトの範囲です。 アプリがこれらの制限内で実行されるかどうかを判断するには、実行するすべてのデバイスで一般的なシナリオをテストします。
ベスト プラクティスとして、必要な間だけメモリにデータを保持します。 できるだけ早く画像をデータベースにアップロードしてください。アプリのユーザーが要求した場合にのみ画像をダウンロードします。
数値
注意
Power Apps は現在 Float のみをサポートしており、すべての数値の種類です。 Decimal のサポートは間もなく追加される予定です。
Power Fx は、2 種類の数値をサポートします: 10 進数 と 浮動 (同義語 数値 および 通貨)。
ほとんどのビジネス計算には、Decimal が最適です。 10 進数を正確に表すことができるため、0.1 を正確に表すことができ、計算中の丸め誤差を避けることができます。 最大 28 桁の精度で最大 1028 まで、あらゆるビジネス ニーズに対応できる十分な範囲を備えています。
Decimal は、ほとんどの Power Fx ホストのデフォルトの数値データ型であり、単に 2*2と記述する場合に使用されます。
Float は科学的計算に最適です。 最大 10308 という、より広い範囲の数値を表すことができます。 有効桁数は小数点以下 15 桁に制限され、数値演算は底 2 に基づいているため、一般的な 10 進数の値を正確に表すことはできません。 Float の方がパフォーマンスも高く、それが要因であり、精度が重要でない場合に優先されます。
10 進数
小数点以下桁数 データ型は、 .NET 10 進データ型 を使用することがほとんどです。 SQL Server で実行される Dataverse 数式列などの一部のホストでは、SQL Server の 10 進データ型が使用されます。
Decimal は、10 進数を使って計算します。2 進数 (Floatで使用されるような) を使用している際に蓄積される可能性のある、非常に小さな差による丸め誤差を避けるために重要です。
範囲は 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 です。
Float は、-9,007,199,254,740,991 (–(253 – 1)) と 9,007,199,254,740,991 (253 – 1) の間の整数 (それぞれの値を含む) を正確に表すことができます。 この範囲は、データベースが一般的に使用する 32 ビット (または 4 バイト) の整数データ型よりも大きいものです。 ただし、キャンバス アプリは 64 ビット (または 8 バイト) の整数データ型を表すことができません。 この数をテキスト フィールドに保存するか、計算列を使用して数値のコピーをテキスト フィールドに作成し、キャンバス アプリの Text データ型にマップされるように設定することをお勧めします。 このようにして、これらの値を保持、表示、入力し、それらを比較して等しいかどうかを判断できます。ただし、この形式では数値計算を実行できません。
浮動小数点演算は概算であるため、多くの文書化された例で予期しない結果が生じることがあります。 55 / 100 *100 という計算式は正確に 55 を返し、(55 / 100 *100) - 55 という計算式は正確にゼロを返すことが期待できます。 ただし、後者の式は 7.1054 x 10–15 を返します。これは非常に小さい値ですがゼロではありません。 この小さな差分は通常問題を引き起こさず、アプリが結果を表示するときにはそれを切り上げます。 ただし、小さな差分がそれ以降の計算で積み重なり、間違った回答を与えるように見えることがあります。
多くの場合、データベース システムは通貨を保存し、10 進数を使用して計算を実行します。これにより、範囲は狭くなりますが、精度をより細かくコントロールできます。 既定では、キャンバス アプリは通貨を浮動小数点値の内外にマッピングします。したがって、結果がネイティブの 10 進数データ型で行われる計算とは異なる場合があります。 アプリの精度のニーズに応じて、前に説明した大きな整数に対して説明したように、これらの値を Text として使用できます。
既定値と変換
注意
Power Apps は現在 Float のみをサポートしており、すべての数値の種類です。 Decimal のサポートは間もなく追加される予定です。
ほとんどの Power Fx ホストはデフォルトで 10 進数 を使用します。 この既定値は、次のことを意味します:
- 数式内のリテラル数値。 数値
1.234は Decimal の値として解釈されます。 たとえば1.234 * 2という式は、1.234と2を Decimal として解釈し、Decimal の結果を返します。 - Value 関数。
Value( "1.234" )は Decimal の値を返します。 たとえばValue( "1.234" ) * 2式では、Value 関数はテキスト文字列"1.234"の内容を Decimal として解釈します。
浮動 値を操作するには、Float 関数を使用します。 この例を拡張すると、 Float( 1.234 ) は Decimal1.234 を Float に変換します。
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 ) |
数値型の混合
Float と Decimal の値は自由に組み合わせることができます。 混合すると、範囲が広くなるため、 10 進数 値は 浮動小数点 値に変換されます。 この変換により精度が失われる可能性があるため、2 つを不必要に混在しないことが重要です。 Decimal は既定のリテラル データ型であり、ほとんどの数値関数は型を保持するため、必要に応じて Float への移動を避けるのは比較的簡単です。
たとえば、 pac power-fx repl をインストールした後に を使用した次の計算を考えてみましょう。 どちらの数値も 10 進数であるため、計算は 10 進数で行われ、結果は完全な精度を保持します。
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
代わりに、2 番目のオペランドが Float に変更された場合、計算全体は Float で実行され、小さな小数部分は失われます。
>> 1.0000000000000000000000000001 * Float(2)
2
Date、Time、DateTime
タイム ゾーン
日付/時刻の値は次のカテゴリに分類されます。
- ユーザー ローカル:これらの値はUTC (世界協定時刻)に格納されますが、アプリ ユーザーのタイム ゾーンは、アプリが値を表示する方法と、アプリ ユーザーが値を指定する方法に影響を与えます。 たとえば、同じ時点はカナダのユーザーと日本のユーザーでは異なって見えます。
- タイムゾーン非依存: タイムゾーンに関係なく、アプリはこれらの値を同じ方法で表示し、アプリユーザーは同じ方法で指定します。 同じ時点は、カナダのユーザーにも日本のユーザーにも同じように表示されます。 アプリが異なるタイム ゾーンで使用されることを予定していないアプリ作成者は、全体的にシンプルであるため、これらの値を使用します。
次のテーブルにいくつかの例を示します。
| 日付/時刻の種類 | データベースに保存されている値 | UTC の 7 時間西に表示および入力された値 | UTC の 4 時間東に表示および入力された値 |
|---|---|---|---|
| ユーザー ローカル | Sunday,May19,2019 午前 4:00 |
Saturday,May18,2019 午後 9:00 |
Sunday,May19,2019 午前 8:00 |
| タイム ゾーン非依存 | Sunday,May19,2019 午前 4:00 |
Sunday,May19,2019 午前 4:00 |
Sunday,May19,2019 午前 4:00 |
ユーザー ローカルの日付/時刻の場合、キャンバス アプリはブラウザーまたはデバイスのタイム ゾーンを使用しますが、モデル駆動型アプリは 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 |
Saturday,May18,2019 午後 9:00 |
1,558,238,400,000 (Sunday,May19,2019 4:00 AM UTC) |
| タイム ゾーン非依存 | Sunday,May19,2019 午前 4:00 |
Sunday,May19,2019 午前 4:00 |
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 には Datetime、Datetime2、およびほかの日付/時刻データ型があり、タイム ゾーンのオフセットは含まれておらず、どのタイム ゾーンにいるかを示しません。 キャンバス アプリは、これらの値が 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)
日付と時刻情報の組み合わせ
Date、Time、および DateTime は、名前は異なりますが、日付と時刻に関する情報はすべて同じです。
Date の値には、通常は真夜中の時刻情報を含めることができます。 Time の値には、日付情報を含めることができます。通常は 1970 年 1 月 1 日です。 Dataverse は、日付のみのフィールドに時刻情報も格納しますが、既定では日付情報のみが表示されます。 同様に、キャンバス アプリはこれらのデータ型を区別して、既定の形式とコントロールを決定することがあります。
日付と時刻の値を直接加算および減算することはお勧めしません。タイムゾーンやその他の変換が結果に混乱が生じさせることがあります。 Value 関数を使用して、最初に日付/時刻の値をミリ秒に変換し、アプリ ユーザーのタイム ゾーンを考慮に入れるか、DateAdd および DateDiff 関数を使用して、これらの値のいずれかを加算または減算します。
選択肢とはい/いいえ
選択肢と 2 オプションのデータ型では、アプリ ユーザーが選択できる選択肢が 2 つ以上あります。 たとえば、注文の状況 の選択は、新着、出荷済み、請求済み、クローズ済み の選択肢を提供しているかもしれません。 2 つのオプションのデータ型には、2 つの選択肢しかありません。
これらのデータ型の両方に、ラベルがテキストとして表示されます。 たとえば、ラベル コントロールは、コントロールの Text プロパティは、その選択を参照する式に設定されます。 オプション ラベルは、さまざまな場所のアプリ ユーザー向けにローカライズできます。
アプリ ユーザーがオプションを選択して変更を保存すると、アプリはデータをデータベースに送信し、言語に依存しない方法でデータを格納します。 選択肢のオプションが送信され、数値として格納され、2 つのオプションのデータ型のオプションが送信され、ブール値として格納されます。
ラベルは表示専用です。 ラベルは言語に固有であるため、直接比較することはできません。 代わりに、各選択肢には、基になる数値またはブール値で機能する列挙があります。 たとえば、この計算式は使用できません。
If( ThisItem.OrderStatus = "Active", ...
ただし、次の数式を使用できます。
If( ThisItem.OrderStatus = OrderStatus.Active, ...
(テーブルが共有する) グローバル選択肢の場合、オプションセット列挙の名前はグローバル選択肢の名前と一致します。 ローカルの選択肢 (テーブルをスコープとする) の場合、名前にはテーブル名を含めることができます。 この動作により、複数のテーブルに同じ名前の選択肢がある場合の競合が回避されます。 たとえば、アカウント テーブルには 注文の状況 選択があり、そしてその名前は OrderStatus (アカウント) の可能性があります。 その名前にはスペースとかっこがあるため、数式で参照する場合は、単一引用符で囲む必要があります。
2 つのオプション値は、ブール値としても動作します。 たとえば、TaxStatus という名前の 2 つのオプション値には、true と false に対応する、課税対象と非課税のラベルがある場合があります。 これを表示するには、次の数式を使用します。
If( ThisItem.Taxable = TaxStatus.Taxable, ...
次の数式を使用することもできます。
If( ThisItem.Taxable, ...