# オンデマンド テンプレート アプリケーションのバインディング数式

テンプレート アプリケーションにおけるデータ バインディングでは、オンデマンド アプリケーションへのデータ ロード時に発行されるクエリの作成に使用される、テンプレートに対応した選択アプリケーションのデータが指定されます。

バインディング数式の基本的な形式 --$(odag\_FIELDNAME)-- は、数式をバインドするために使用できる唯一の方法ではありません。他のプレフィックスを使用して、選択を絞り込み、テンプレート アプリケーションがデータを正しくロードできます。

## 利用可能なバインディング プレフィックス

一般的なプレフィックス形式は odag[s|o][n][cnt] です。

* s - 選択した値のみを含む
* o - オプションの値のみを含む
* n - 既定では引用符で囲まれていない数値バージョンを選択
* cnt - 実際の値の代わりに値の数を挿入

次のテーブルに、使用可能なバインディング プレフィックスのすべてのバージョンのリストを示します。例では、選択された値 (緑の値) として1、2、3、オプションの選択された値（白の値）として 4 の MyField という名前の項目を想定しています。

バインディング プレフィックス

| プレフィックス | 説明 | 例 | 以下に置換済み |
| --- | --- | --- | --- |
| odag\_ | 選択した値 (緑) とオプションの値 (白) で置き換えられます。値のテキスト バージョンを選択します。 これは文字列値の標準のプレフィックスです。 | $(odag\_MyField) | '1','2','3','4' |
| odagcnt\_ | 対応する odag\_ バインディングの値の数に置き換えられます。 このプレフィックスは、クエリの最適化に使用されます。 | $(odagcnt\_MyField) | 4 |
| odagn\_ | 選択した値 (緑) とオプションの値 (白) で置き換えられます。値の数値バージョンを選択します。 これは数値の標準のプレフィックスです。<br><br>情報メモ<br><br>データ モデルに項目の選択された値またはオプションの値がない場合は、数式にnoValueを指定する必要があります。例: `$(odagn_MyField){"noValue":"-99999"}`。<br><br>詳細については、「[値の引用符と区切り文字の変更](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Changing)」を参照してください。 | $(odagn\_MyField) | 1,2,3,4 |
| odagncnt\_ | 対応する odagn\_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 | $(odagncnt\_MyField) | 4 |
| odago\_ | オプションの値 (白) で置き換えられます。値のテキスト バージョンを選択します。これはクエリの最適化のためです。<br><br>[大規模データベースの最適化](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi)。 | $(odago\_MyField) | '4' |
| odagocnt\_ | 対応する odago\_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 | $(odagocnt\_MyField) | 1 |
| odagon\_ | オプションの値 (白) で置き換えられます。値の数値バージョンを選択します。これはクエリの最適化のためです。<br><br>[大規模データベースの最適化](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi)。 | $(odagon\_MyField) | 4 |
| odagoncnt\_ | 対応する odagon\_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 | $(odagoncnt\_MyField) | 1 |
| odags\_ | 選択した値 (緑) で置き換えられます。値のテキスト バージョンを選択します。これはクエリの最適化のためです。<br><br>[大規模データベースの最適化](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi)。 | $(odags\_MyField) | '1','2','3' |
| odagscnt\_ | 対応する odags\_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 | $(odagscnt\_MyField) | 3 |
| odagsn\_ | 選択した値 (緑) で置き換えられます。値の数値バージョンを選択します。これはクエリの最適化のためです。<br><br>[大規模データベースの最適化](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi)。 | $(odagsn\_MyField) | 1,2,3 |
| odagsncnt\_ | 対応する odagsn\_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 | $(odagsncnt\_MyField) | 3 |

情報メモ

空の値は、テキスト バージョンでは除外されます。数値バージョンでは、非数値と NaN 値は除外されます。

## 大規模データベースの最適化

odags\_ および odagsn\_ プレフィックスは、クエリの最適化を目的としています。バインド項目に選択項目がない場合、odag\_ にはすべての値が含まれ、odags\_ には値が含まれません。場合によっては、odags\_ および odagscnt\_ プレフィックスを使用する方が効率的です。これにより、値のセットが空かどうかをテストできます。例えば、odag\_MyField のすべての値をテストするよりも、MyField で選択を行わない場合のほうが効率的です。

```
WHERE ($(odagscnt_MyField)=0 OR MyColumn IN ($(odags_MyField)))
```

オンデマンド項目ではない選択アプリケーションで選択できる代替項目がある場合、odags\_ は使用できません。例えば、ユーザーが CountryName で選択を行ったが、バインディング数式が関連項目 CountryCode にある場合、odags\_ は使用できませんでした。このような場合は、代わりに odago\_ を使用できます。odago\_ バインディングに値がない場合は、すべての値を含めるか、値を含めないことを意味する可能性があります。

## 数値のバインディング

オンデマンド アプリケーションにバインドするデータが文字列ではなく数値で構成されている場合は、数値項目を引用符で囲む動作を無効にすると効果的です。たとえば、売上レコードに数値の DAY\_OF\_WEEK 列が含まれており、選択アプリケーションのユーザーが DAY\_OF\_WEEK の任意の組み合わせを選択できるようにする場合は、選択アプリケーションをロードするために使用される集計クエリを増やして、SELECT リストと GROUP BY リストの両方に DAY\_OF\_WEEK を含めます。データベースで文字列から数値への自動型変換機能がサポートされていない場合、DAY\_OF\_WEEK の値を選択するときに引用符で囲まれていると、実行時にクエリ エラーが発生する可能性があります。

この状況を処理するには、バインディング数式サフィックスの数値バージョンを使用できます。これにより、項目バインディングは文字列値ではなく、選択アプリケーションからの数値を使用するようになります。次の数値バージョンを使用できます。

* odagn\_
* odagon\_
* odagsn\_

数値バージョンを使用することにより、選択された値を格納するデュアル値の数値部分から値が取得され、既定では値が引用されません。

## 一定数の選択の要求

状況によっては、オンデマンド アプリケーションのクエリに、特定の項目に関する、特定の数または範囲の値を含める必要があることがあります。たとえば、オンデマンド アプリケーションのクエリに開始日から終了日までの全売上高を取得するための BETWEEN 節が含まれている場合、 YEARQUARTER 項目のバインド数式には、YEARQUARTER の値を正確に 2 つ選択するように要求するサフィックス構文 [2] を以下に示すように含めることができます。

```
$(odag_YEARQUARTER)[2]
```

選択アプリケーションの [オンデマンド アプリケーションのナビゲーション ポイント] は、選択された YEARQUARTER の値が正確に 2 つにならない限り無効のままになります。YEARQUARTER の値を正確に 2 つ選択する必要があることを示すメッセージが表示されます。

選択数量の制約により、 [選択アプリケーション] と [オンデマンド アプリケーション] の間に前提条件の連鎖が作成されます。これは、数量の制約を使用しないバインド式とは異なります。たとえば、 [テンプレート アプリケーション] のスクリプトに、以下のように数量の制約なしのバインド数式が含まれているとします。

```
$(odag_MYFIELD)
```

[選択アプリケーション] に MYFIELD という名前の項目を含めたり、その項目に選択値 (存在する場合) を含めたりするように求める要件はありません。[選択アプリケーション] に MYFIELD という名前の項目が含まれていない場合、またはユーザーがそのアプリから何らかの選択を行うことを単に無視した場合でも、他の選択によってレコード制限値の条件が満たされているときは、[オンデマンド アプリケーションのナビゲーション ポイント] が有効となる可能性があります。

一方、次のようなバインド数式があるとします。

$(odag\_MYFIELD)[1+]

現在、選択アプリケーションには 2 つの要件が課せられています。

* [選択アプリケーション] には、MYFIELD という名前の項目を含める必要があります。
* ユーザーは、MYFIELD の値を少なくとも 1 つ選択する必要があります。

この種類のバインド数式では、 [テンプレート アプリケーション] と一緒に使用できる [選択アプリケーション] が制限されるため、注意して使用する必要があります。[テンプレート アプリケーション] にリンクするすべての [選択アプリケーション] に対して選択数量の要件を確実に課したい場合を除き、この数量の制約を [テンプレート アプリケーション] に課さないでください。

データ バインド プロセスを実行するため、オンデマンド アプリケーション サービスは、スクリプト内のコメントに影響されない、文字列代替手法を使用します。このため、アプリケーション生成後のバインド値のリストをコメントに含めたい場合を除き、コメント内ではバインド数式を使用しないでください。コメント内のバインディングは、オンデマンド アプリケーション生成リンクの項目リストにも表示されますが、これは望ましくない可能性があります。

数量に関するその他の制約を設定することも可能です。次の表に、選択数量の制約に関するさまざまな組み合わせの概要を示します。

選択数量の制約に関するさまざまな組み合わせ

| 制約のパターン | 選択要件 |
| --- | --- |
| $(odag\_YEARQUARTER)[2] | YEARQUARTER の値を正確に 2 個選択する必要があります。 |
| $(odag\_YEARQUARTER)[2-4] | YEARQUARTER の値を 2 ～ 4 個選択する必要があります。 |
| $(odag\_YEARQUARTER)[2+] | YEARQUARTER の値を 2 個以上選択する必要があります。 |
| $(odag\_YEARQUARTER)[2-] | YEARQUARTER の値を最大 2 個選択する必要があります。 |

情報メモテンプレート アプリケーションにおけるすべての数量制約が満たされているかどうかを確認するチェックは、アプリケーション生成プロセス中に実行されます。数量制約違反があった場合、アプリケーション生成リクエストは拒否され、エラー メッセージが表示されます。

## 値の引用符と区切り文字の変更

選択アプリケーションで選択された項目値のリストがテンプレート アプリケーションのスクリプトに挿入される場合、その値は単一引用符で囲まれ、コンマで区切られます。これらは、引用符と区切り記号のデフォルトの文字です。これらの値は、各項目のバインディング ステートメントに付加される構文で変更できます。例:

$(odag\_ORIGIN){"quote": "|", "delimiter": ";"}

新しい設定値は、選択アプリケーションから取得したバインディング値のリストを次に作成するときに使用されます。たとえば、選択した値が年の最初の 3 か月の場合、リストは以下のように作成されます。

|January|;|February|;|March|

引用符と区切り文字の既定値は、ほとんどの標準的な SQL データベースに対応しています。ただし、一部の SQL データベースでは機能しない場合があり、また NoSQL や REST を始めとする多くの動的データ ソースには対応していません。そうしたソースの場合は、このバインディング数式を付加して、引用符と区切り文字を変更する必要があります。

次のテーブルに、引用符と区切り文字を変更するためのフォーマット パラメーターの概要を示します。

パラメーターの書式

| パラメーター | デフォルト値 | 定義 |
| --- | --- | --- |
| 引用符 | テキスト プレフィックスの場合は ' (一重引用符)<br><br>数値プレフィックスの場合は空 | 各値の前後に追加されます |
| 区切り記号 | カンマ | すべての値の間に追加されます |
| quoteReplace | '' (二重一重引用符) | 値が空でなく、引用符も空でない場合、値内のすべての引用符の出現は、指定された文字列に置き換えられます。<br><br>情報メモquoteReplace は、odagn\_ などの数値プレフィックスのパラメーターとしてサポートされていません。quoteReplace は数値プレフィックスによって無視されます。 |
| noValue | 空 | 項目に値が選択されていない場合は、代わりにこの値が使用されます。このパラメーターは、選択範囲内の特定のフィールドの値がない場合に役立ちます。<br><br>値は、ソース データに存在しない値に設定する必要があります。例えば、数値の場合、データベース内のすべての値が正の場合は負の値を使用します。<br><br>情報メモ 引用符で囲まれていない値の場合、項目の選択した値を空のセットにできる場合は、noValue を指定する必要があります。 |

次のテーブルは、odag\_ および odagn\_ のフォーマット仕様と生成された値の概要を示しています。生成された挿入値は、VAL1、VAL2 の既定のデータ値に基づいています。

odag\_odag\_ の例のフォーマット仕様と生成された値

| 書式指定 | 説明 | 生成された挿入値 |
| --- | --- | --- |
| 指定なし | ' で囲まれた値のカンマ区切りのリスト。 | 'VAL1'、'VAL2' |
| {"quote": "", "delimiter": ""} | 連結値 | VAL1VAL2 |
| {"quote": "X", "delimiter": "Y"} | X で囲まれ、Y で区切られた値。 | XVAL1XYXVAL2X |
| {"quote": "XX", "delimiter": "YY"} | XX で囲まれ、YY で区切られた値。 | XXVAL1XXYYXXVAL2XX |
| {"quote": "X"} | X で囲まれ、, (既定) で区切られた値。 | XVAL1X,XVAL2X |
| {"delimiter": "YY"} | ' (既定) で囲まれ、YY で区切られた値 | 'VAL1'YY'VAL2' |
| {"quote": ""} | , で区切られた、引用符で囲まれていない値。 | VAL1,VAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | A で囲まれ、コンマ (既定) で区切られた値。項目内の値は \A に置き換えられます。<br><br>情報メモ<br><br>この例では、\ が json 形式のエスケープ文字であるため、二重の \ が必要です。 | AV\AL1A,AV\AL2A |

odagn\_odagn\_ の例のフォーマット仕様と生成された値

| 書式指定 | 説明 | 生成された挿入値 |
| --- | --- | --- |
| 指定なし | 引用符で囲まれていない値のカンマ区切りのリスト。数値が使用されることに注意してください。 | VAL1,VAL2 |
| {"delimiter": "YY"} | YY で区切られた、引用符で囲まれていない値 | VAL1YYVAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | odag\_ プレフィックスと比較すると、quoteReplace パラメーターは無視されます。 | AVAL1A,AVAL2A |

## 個々の値の処理

項目値の個別処理が必要な場合は、インライン メソッドを使用して変数 Values に値を生成し、Replace または別の関数で任意の処理を実行できます。以下の例では、Replace がプレースホルダー値とともに使用されています。

MyTempBindingData: LOAD \* INLINE [VAL $(odag\_MyField){"quote": "", "delimiter": "\n"} ]; \_TempTable: LOAD Concat(chr(39) & Replace(text, from\_str, to\_str) & chr(39), ',') as CombinedData Resident MyTempBindingData; LET Values = Peek('CombinedData',0,'\_TempTable'); drop table \_TempTable; drop table MyTempBindingData;