メイン コンテンツをスキップする

On-demand テンプレート アプリのバインディング数式

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

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

警告: 最初から On-demand App GenerationQlik Sense 拡張を使用して作成されたテンプレート アプリは、以下に説明する手法を使って項目から大量の選択をバインディングするよう変更する必要があります。

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

一般的なプレフィックス形式は 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_

選択した値 (緑) とオプションの値 (白) で置き換えられます。値の数値バージョンを選択します。 これは数値の標準のプレフィックスです。

注:

データ モデルに項目の選択された値またはオプションの値がない場合は、数式にnoValueを指定する必要があります。例: $(odagn_MyField){"noValue":"-99999"}

詳細については、「値の引用符と区切り文字の変更」を参照してください。

$(odagn_MyField) 1,2,3,4
odagncnt_ 対応する odagn_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 $(odagncnt_MyField) 4
odago_

オプションの値 (白) で置き換えられます。値のテキスト バージョンを選択します。これはクエリの最適化のためです。

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

$(odago_MyField) '4'
odagocnt_ 対応する odago_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 $(odagocnt_MyField) 1
odagon_

オプションの値 (白) で置き換えられます。値の数値バージョンを選択します。これはクエリの最適化のためです。

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

$(odagon_MyField) 4
odagoncnt_ 対応する odagon_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 $(odagoncnt_MyField) 1
odags_

選択した値 (緑) で置き換えられます。値のテキスト バージョンを選択します。これはクエリの最適化のためです。

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

$(odags_MyField) '1','2','3'
odagscnt_ 対応する odags_ バインディングの値の数に置き換えられます。 これはクエリの最適化のためです。 $(odagscnt_MyField) 3
odagsn_

選択した値 (緑) で置き換えられます。値の数値バージョンを選択します。これはクエリの最適化のためです。

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

$(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_ バインディングに値がない場合は、すべての値を含めるか、値を含めないことを意味する可能性があります。

数値のバインディング

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

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

  • odagn_
  • odagon_
  • odagsn_

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

一定数の選択の要求

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

$(odag_YEARQUARTER)[2]

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

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

$(odag_MYFIELD)

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

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

$(odag_MYFIELD)[1+]

この場合は、以下の 2 つの要件が [選択アプリ] に課されます。

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

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

データ バインド プロセスを実行するため、On-Demand アプリ サービスは、スクリプト内のコメントに影響されない、文字列代替手法を使用します。このため、アプリ生成後のバインド値のリストをコメントに含めたい場合を除き、コメント内ではバインド数式を使用しないでください。

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

選択数量の制約に関するさまざまな組み合わせ
制約のパターン 選択要件
$(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 データベースでは機能しない場合があり、また NoSQLREST を始めとする多くの動的データ ソースには対応していません。そうしたソースの場合は、このバインディング数式を付加して、引用符と区切り文字を変更する必要があります。

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

パラメーターの書式
パラメーター 既定値 定義
引用符

テキスト プレフィックスの場合は ' (一重引用符)

数値プレフィックスの場合は空

各値の前後に追加されます
区切り記号 カンマ すべての値の間に追加されます
quoteReplace '' (二重一重引用符)

値が空でなく、引用符も空でない場合、値内のすべての引用符の出現は、指定された文字列に置き換えられます。

注: quoteReplace は、odagn_ などの数値プレフィックスのパラメーターとしてサポートされていません。quoteReplace は数値プレフィックスによって無視されます。
noValue

項目に値が選択されていない場合は、代わりにこの値が使用されます。このパラメーターは、選択範囲内の特定のフィールドの値がない場合に役立ちます。

値は、ソース データに存在しない値に設定する必要があります。例えば、数値の場合、データベース内のすべての値が正の場合は負の値を使用します。

注: 引用符で囲まれていない値の場合、項目の選択した値を空のセットにできる場合は、noValue を指定する必要があります。

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

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 に置き換えられます。

注:

この例では、\ が json 形式のエスケープ文字であるため、二重の \ が必要です。

AV\AL1A,AV\AL2A
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;