On-demand テンプレート アプリの作成

On-demand テンプレート アプリは通常の Qlik Sense アプリですが、1 つ重要な違いがあります。そのロード スクリプトには、データ ソースに対するクエリの作成に使用されるデータ バインディング数式が含まれます。それらのデータ バインディング数式は、選択アプリの選択ステートから値を読み取り、その値をテンプレート アプリ スクリプトにバインドして、生成されたアプリがユーザー制御のデータ サブセットと一緒にロードされるようにするために、On-demand アプリの生成時に使用されます。

テンプレート アプリは、通常、選択アプリと同じデータ ソースに接続されます。選択アプリのロード スクリプトは通常、集計データをロードしてデータ量を減らしつつ、重要な軸やメジャーのインタラクティブなビジュアライゼーションを可能にします。テンプレート アプリのロード スクリプトは、制御されたより詳細なデータ サブセットをロードするクエリを使用します。

注: On-Demand テンプレート アプリは、データを直接ロードしません。テンプレート アプリからデータをロードしようとすると、エラーになります。テンプレート アプリ接続は有効でなければならず、正しく接続されているかどうかをテストするには、On-Demand アプリを生成しなければなりません。On-Demand アプリが生成されると、On-Demand アプリ サービスによってロード スクリプトが修正され、On-Demand 選択アプリの選択ステートがロードされます。On-Demand アプリがエラーなしで生成されれば、テンプレート アプリの接続が正常であるとわかります。
注: Kubernetes で On-demand テンプレート アプリを開発する場合は、アプリのサイズを考慮します。展開によっては、ストレージの制限があったり、大容量のストレージを使用するとクラウド展開が拡大縮小したりする可能性があります。詳しくは、システム管理者にお問い合わせください。

テンプレート アプリの構造

テンプレート アプリは、On-Demand アプリのナビゲーション リンクを使用して選択アプリにリンクされます。アプリのナビゲーション リンクには、On-demand アプリがデータと一緒にロードされるときにクエリされるレコードの数を制御するためのプロパティが含まれます。テンプレート アプリのロード スクリプトにはデータ バインディング数式が含まれています。その数式により、On-demand アプリにデータをロードするときに発行されるクエリを作成するために使用される、選択アプリの項目データが指定されます。

注: Qlik Sense Enterprise on Windows インストール (ProgramData\Qlik\Examples\OnDemandApp\sample) に、サンプルの On-Demand テンプレート アプリがあります。 この機能は Kubernetes では使用できません。

データ バインディング数式の形式は次のとおりです。

$(od_FIELDNAME)

od_ プレフィックスは、選択アプリの選択ステートを On-demand アプリのロード スクリプトにバインドするために使用され、テンプレート アプリをコピーして作成されます。データ バインディング数式で od_ プレフィックスに続く部分は、選択アプリの項目と一致する名前にする必要があります。On-demand アプリが生成されると、選択アプリの現在の選択ステートを使用して、各項目をバインドするための適切な値が取得されます。新規作成された On-demand アプリのロード スクリプトに含まれる各 $(od_FIELDNAME) 数式は、選択アプリの選択ステートの対応する項目において選択された値のリストに置き換えられます。

INLINE Load ステートメントを使用する値をバインドする方法については、「On-demand テンプレート アプリのバインディング数式」を参照してください。

複数の値をフィルタリングするテンプレートアプリの SELECT ステートメントを有効な SQL 構文にするには、IN 節を使用する必要があります。推奨される手法では、サブルーチンを作成して適切な WHERE 節を作成します。

SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB;

ExtendWhere サブルーチンを呼び出す前に、WHERE_PART 変数を設定する必要があります。

SET WHERE_PART = '';

選択アプリによって挿入される節に加えて、SQL ステートメントに、変化しない WHERE 節を組み込みたい場合は、SET ステートメントに 'WHERE <condition>' を挿入します。それ以外の場合は、単純な SET ステートメントを使用します。

以下は、ExtendedWhere サブルーチンの使用方法の例です。

FOR EACH fldname IN 'ORIGIN', 'DEST', 'YEAR', 'QUARTER', 'ORIGIN_STATE_ABR', 'DEST_STATE_ABR' LET vallist = $(fldname); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname

項目名のリストは、作成した各項目バインディングで使用される項目名に一致する必要があります。

各項目の値のリストを作成したら、SELECT ステートメントを記述できます。例:

SQL SELECT "MKT_ID", "YEAR", "QUARTER", "ORIGIN", "ORIGIN_STATE_ABR", "DEST", "DEST_STATE_ABR", "TICKET_CARRIER", "FARE_CLASS", "PASSENGERS", "DISTANCE", 1 AS "FLIGHT_COUNT" FROM "SAPH7T"."/QT/AIRPORT_FACT" $(WHERE_PART);

この SELECT ステートメントの $(WHERE_PART) 部分は、展開されて、上記の FOR-NEXT ループの実行により生成される WHERE 節に置き換えられます。SELECT キーワードに続く列のリストの表記は、個々のデータベース テーブルの列に合わせて修正してください。

警告: 変数をバインドする On-Demand アプリを作成する場合、テンプレート アプリ モデルの項目名の使用は避けてください。スクリプトで定義される変数は、データ ビジュアライゼーションの作成時に参照されるテンプレート アプリ モデル内で利用可能となります。モデル内の項目に重複しない変数をバインドする On-Demand アプリを選択することで、テンプレート アプリ モデル内の項目と、データ ロード スクリプト内の変数をバインドする On-Demand アプリとの間の意図せぬ混乱が回避されます。変数をバインドする On-Demand アプリにプレフィックスを付けるのは 1 つの良い方法です。たとえば、ORIGIN の代わりに、X_ORIGIN を使用します。

シングル サインオン (SSO)

On-Demand アプリでは、SSO をサポートするデータ ソースで single sign-on (SSO) を使用できます。エンジンとデータ ソースは、SSO を許容するように構成する必要があります。

注: この機能は Kubernetes では使用できません。

詳細については、「Qlik Sense で SAML シングル サインオンを有効にするための SAP HANA の設定」および「シングル サインオンを有効にするための Cloudera Impala の構成」を参照してください。

エンジンおよびデータ ソースを SSO 用に構成したら、次の構文をテンプレート アプリのスクリプトに追加することによって、テンプレート アプリで SSO を有効にする必要があります。

///!ODAG_SSO

On-Demand App Service は、On-Demand アプリが生成されたとき、およびそのアプリがリロードされるごとに、スクリプトを解析します。

On-Demand アプリが SSO でロードされると、エンド ユーザーの ID がデータ ソースに送信されます。エンド ユーザーには、テンプレート アプリのデータ接続で使用されるソースへのアクセス権が必要です。大きなデータ セットが選択された場合でも、それらのソースで、そのユーザーがアクセス権を持っているデータのみがロードされます。

警告: single sign-on (SSO) を使用するテンプレート アプリから生成された On-Demand アプリは公開できません。

テンプレート アプリのノードのリロード

管理者は、テンプレート アプリに対して負荷分散ルールを設定することにより、マルチノード環境において On-demand アプリをリロードする場所を制御できます。負荷分散ルールを設定する場合、テンプレート アプリへのリンクから生成されるアプリはすべて、テンプレート アプリに適用されるルールに従ってロードされます。詳細については、「On-Demand アプリの管理」を参照してください。

注: この機能は Kubernetes では使用できません。