電子申告の数式言語
電子申告 (ER) では、強力なデータ変換経験を提供します。 ER フォーミュラ デザイナー で必要なデータ操作を表すために使用される言語は、Microsoft Excel の数式言語と共通しています。
基本構文
ER の式は、次のいずれかまたはすべての要素を含めることができます。
定数
式の設計時に、テキストおよび数値定数 (つまり、計算されない定数) を使用できます。 たとえば、VALUE ("100") + 20
の式では、数値定数 20 および文字列定数 "100" を使用し、120 という数値を返します。
ER フォーミュラ デザイナーはエスケープ シーケンスをサポートします。 したがって、別の方法で処理されるべき式文字列を指定することができます。 たとえば、"Leo Tolstoy ""War and Peace"" Volume 1"
の式は、レフ トルストイ "戦争と平和" ボリューム 1 というテキスト文字列を返します。
演算子
次の表に、加算、減算、乗算、除算などの基本的な数学演算の実行に使用できる算術演算子を示します。
オペレーター | 意味 | 例 |
---|---|---|
+ | 追加 | 1+2 |
- | 減算、否定 | 5-2 , -1 |
* | 乗算 | 7\*8 |
/ | 区分 | 9/3 |
次の表に、サポートされる比較演算子を示します。 これらの演算子を使用して、2 つの値を比較することができます。
オペレーター | 意味 | 例 |
---|---|---|
= | Equal | X=Y |
> | Greater than | X>Y |
< | Less than | X<Y |
>= | 以上 | X>=Y |
<= | 以下 | X<=Y |
<> | 次の値に等しくない | X<>Y |
また、テキスト連結演算子としてアンパサンド (&) を使用することができます。 これにより、1 つ以上の文字列を 1 つのテキストに結合または連結することができます。
オペレーター | 意味 | 例 |
---|---|---|
& | 連結 | "Nothing to print:" & " " & "no records found" |
演算子の優先順位
複合式のパーツを評価する順番は重要です。 たとえば、1 + 4 / 2
の式の結果は、加算または除算のどちらを先に実行するかによって異なります。 明示的に式の評価方法を定義するためにかっこを使用できます。 たとえば、加算を最初に実行する必要があることを示すには、前の式を (1 + 4) / 2
に変更できます。 式で工程の順序を明確に定義しない場合、順序はサポートされる演算子に割り当てられている既定の優先順位に基づきます。 次の表に、各演算子に割り当てられている優先順位を示します。 高い優先順位 (たとえば、7) がある演算子は、低い優先順位 (たとえば、1) がある演算子より前に評価されます。
優先順位 | 演算子 | 構文 |
---|---|---|
7 | グループ化 | ( … ) |
6 | メンバーのアクセス | … . … |
5 | 関数の呼び出し | … ( … ) |
4 | 乗算 | … * … … / … |
3 | 付加 | … + … … - … |
2 | 比較 | … < … … <= … … => … … > … … = … … <> … |
1 | 区切り | … , … |
式に同じ優先順位を持つ複数の連続した演算子が含まれている場合は、これらの操作は左から右に評価されます。 たとえば、1 + 6 / 2 \* 3 > 5
の式は true を返します。 式の閲覧や管理を簡単にするよう、式で操作する希望の順序を明示的に示すために、かっこを使用することをお勧めします。
参照
式の設計中に使用できる現在の ER コンポーネントのすべてのデータ ソースは名前付き参照を使用できます。 現在の ER コンポーネントは、モデル マッピングまたは形式のいずれかです。 たとえば、現在の ER モデル マッピングには、データ ソース: ReportingDate が含まれ、データ型: DateTime の値を返します。 生成ドキュメントでその値を正しく書式設定するために、DATETIMEFORMAT (ReportingDate, "dd-MM-yyyy")
の式のデータ ソースを参照できます。
アルファベットの文字で表されない参照元のデータ ソースの名前のすべての文字は、単一引用符 (') の後に続く必要があります。 参照データ ソースの名前がアルファベットの文字を表さない記号を少なくとも 1 つ含む場合、名前を単一引用符で囲む必要があります。 たとえば、これらアルファベットでない記号は、句読点またはそのほかの書面記号です。 次にいくつか例を挙げます。
- 今日の日付 & 時間データ ソースは、
'Today''s date & time'
のように ER の式で参照する必要があります。 - 顧客データ ソースの name() メソッドは、ER 式で
Customers.'name()'
のように参照する必要があります。
アプリケーション データ ソースのメソッドにパラメーターがある場合は、次の構文を使用して、これらのメソッドを呼び出します。
- データ ソース: システム の isLanguageRTL メソッドが、データ型: Stringの EN-US パラメーターを含む場合、このメソッドは
System.isLanguageRTL("EN-US")
の ER 式として参照する必要があります。 - メソッド名に英数字シンボルのみが含まれている場合、引用符は必須ではありません。 ただし、名前にかっこが含まれている場合、テーブルのメソッドに対しては必須です。
システム データ ソースが、グローバル アプリケーション クラスを参照する ER マッピングに追加されると、式 System.isLanguageRTL("EN-US ")
はブール値の FALSE を返します。 変更された式 System.isLanguageRTL("AR")
はブール値の TRUE を返します。
値がこのメソッドのタイプのパラメータに渡される方法を制限することができます。
- このタイプのメソッドに、定数だけを渡すことができます。 定数の値は、デザイン時に定義されます。
- このタイプのパラメーターでは、データ型: primitive (基本) のみがサポートされています。 プリミティブ データ型には、整数、実数、ブール値、および文字列が含まれます。
パス
式が構成されたデータ ソースを参照する場合、そのデータ ソースの特定のプリミティブ要素の選択にパス定義を使用できます。 ドット (.) は、構成されたデータ ソースの個別要素を区切るために使用します。 たとえば、現在の ER モデル マッピングには InvoiceTransactions データ ソースが含まれ、このデータ ソースはレコード一覧を返します。 InvoiceTransactions レコード構造には、AmountDebit および AmountCredit フィールドが含まれており、どちらのフィールドも数値を返します。 したがって、請求金額 InvoiceTransactions.AmountDebit - InvoiceTransactions.AmountCredit
を計算するための次の式をデザインできます。 この式の InvoiceTransactions.AmountDebit
構造は、レコード リスト タイプの InvoiceTransactions データ ソースの AmountDebit フィールドにアクセスするために使用されるパスです。
相対パス
構成されたデータ ソースのパスが "at" 記号 (@) で始まる場合は、相対パスとなります。 使用される階層ツリー構造の絶対パスの残り部分の代わりに、"at" 記号が表示されます。 次の図は、例を示します。 ここでは、絶対パス Ledger.'accountingCurrency()'
は、元帳データ ソースからの会計通貨値がデータ モデルの会計通貨フィールドに入力されることを示します。
次の図の例では、相対パスがどのように使用されるかを示します。 相対パス @.AccountNum
は、Intrastat データ ソースの AccountNum フィールド (データモデルの階層ツリーの AccountNum フィールドの 1 レベル上に表示される) が、データモデルの AccountNum フィールドに顧客または仕入先勘定番号を入力して使用されることを示します。
絶対パスの残りの部分は、ER フォーミュラ エディター でも表示されます。
詳細については、ER モデルと ER 形式のデータ バインディングに相対パスを使用する を参照してください。
ファンクション
ER 組み込み関数は、ER 式で使用できます。 式のコンテキストのすべてのデータ ソース (つまり、現在の ER モデル マッピングまたは ER フォーマット) は、呼び出し元関数の引数に従って呼び出し元関数のパラメータとして使用できます。 定数は、呼び出し関数のパラメータとしても使用できます。 たとえば、現在の ER モデル マッピングには InvoiceTransactions データ ソースが含まれ、このデータ ソースはレコード一覧を返します。 InvoiceTransactions レコード構造には、AmountDebit および AmountCredit フィールドが含まれており、どちらのフィールドも数値を返します。 したがって、請求額を計算するには、ER 丸め関数を使用する次の式をデザインできます: ROUND (InvoiceTransactions.AmountDebit - InvoiceTransactions.AmountCredit, 2)
。
ER モデル マッピングと ER レポートをデザインする場合は、次のカテゴリから ER 関数を使用できます。
関数の一覧の拡張
ER では ER の式で使用される関数の一覧を拡張できます。 これにはエンジニアリングの実績が要求されます。 詳細については、電子申告 (ER) 関数の一覧の拡張 を参照してください。
複合式
データ型が一致する場合、異なるカテゴリの関数を使用する複合式を作成できます。 関数を一緒に使用する場合は、1 つの関数からの出力のデータ型を別の関数が必要とする入力データ型に一致させます。 たとえば、フィールドの ER 形式要素へのバインディングで発生する "リストが空である" エラーを回避するには、次の例に示すように、リスト カテゴリの関数を 論理 カテゴリの関数と組み合わせます。 ここでは、数式は IF 関数を使用して IntrastatTotals リストが空であるかどうかをテストしてから、必要な集計の値をリストから返します。 IntrastatTotals リストが空の場合、数式は 0 (ゼロ) を返します。
IF(ISEMPTY(IntrastatTotals), 0.0, IntrastatTotals.aggregated.'$AmountMSTRounded')
複数のソリューション
多くの場合、異なるカテゴリからの関数または同じカテゴリからの異なる機能を使用して、同じデータ変換結果を複数の方法で取得できます。 たとえば、前の式は リスト カテゴリからの COUNT 関数を使用してコンフィギュレーションすることもできます。
IF(COUNT (IntrastatTotals)=0, 0.0, IntrastatTotals.aggregated.'$AmountMSTRounded')