カスタム SQL を使用した Direct Query アプリの作成
Direct Query アプリのカスタム SQL クエリを使用して、ロード スクリプトでデータ モデルを作成します。 カスタム SQL は、データ モデル マネージャー を使用して Direct Query のデータ モデルを定義するための代替手段を提供します。
カスタム SQL を使用して Direct Query データ モデルを作成すると、SQL ステートメントを使用して SQL クエリ自体によって生成されるテーブルと項目を定義できます。さらに、Qlik アプリのカスタム SQL ステートメントでは、ロード スクリプト変数と Qlik 数式マクロを使用できます。これにより、より動的なデータ モデルが可能になり、カスタム SQL で定義したテーブルと列を変数または数式の評価結果に応じて調整できるようになります。
カスタム SQL は、ロード スクリプト内で単独で使用できます。データ ロード エディター で データ モデル マネージャー とカスタム SQL を組み合わせて使用して、データ モデルを定義することもできます。
データ モデルの一部を データ モデル マネージャー で指定できる場合は、SQLのパフォーマンスを最適化するために データ モデル マネージャー を使用してそれらの一部を指定します。データ モデル マネージャー は、定義されたデータ モデルで Direct Query クエリを実行するときに使用するテーブル定義において、より効率的です。
カスタム SQL を使用してデータ モデルを作成するには:
-
ロード スクリプトに section directquery を追加します。
ロード スクリプト内に存在できる SECTION DIRECTQUERY セクションは 1 つだけです。このセクションは、ロード スクリプトの最後のセクションである必要があります。
データ モデル マネージャー でデータ モデルを定義していない場合でも、ロード スクリプトに LIB CONNECT ステートメント、section directquery ステートメントの順に追加してスクリプトをロードすると、アプリが Direct Query アプリに変わります。
-
次のステートメントを使用してデータ モデルを構築します。
-
SELECT
SELECT ステートメントを使用して、ロードするテーブルと列を選択します。例: <TableName> SELECT <custom SQL>。
ロード スクリプトで独自のテーブル名を定義しない場合、テーブルには Table<スクリプトのライン番号> という名前が付けられます。
-
CREATE RELATIONSHIP
CREATE RELATIONSHIP を使用して、データ モデルの項目とテーブル間の関係を定義します。
-
DROP RELATIONSHIP
DROP RELATIONSHIP を使用して、以前に定義したリレーションシップをデータ モデルからドロップします。
-
DROP TABLE
DROP TABLE を使用して、以前に定義したテーブルをデータ モデルからドロップし、テーブル間の競合の可能性を回避します。
-
LET、 SET
LET および SET ステートメントを使用して、変数または Qlik 数式を定義します。
データ モデル全体を通して、テーブルと項目には一意の名前を付ける必要があります。データ モデル マネージャー でテーブルを定義し、そのテーブルをカスタム SQL で再定義しようとすると、データ モデル マネージャー で作成したテーブルをドロップするか、カスタム SQL でテーブルと項目の名前を変更しない限り失敗します。
-
section directquery セクション内でサポートされていないスクリプト ステートメントは、データのロード時にエラーを生成します。スクリプトのデバッグや強制続行の設定はすべて無視されます。
カスタム SQL ロード スクリプトの例については、「Direct Query のカスタム SQL の例」を参照してください。
カスタム SQL、変数、数式
Direct Query のカスタム SQL 定義を使用すると、カスタム SQL ステートメント内でスクリプト変数と Qlik 数式マクロの両方を使用できます。
この機能により、アプリのデータ モデルに動的な変数と数式の影響と柔軟性がもたらされ、カスタム SQL 定義のテーブルと列は変数または Qlik 数式の評価結果に適応します。
カスタム SQL の変数
SET または LET ステートメントを使用して変数を定義します。$(<variable name>) 形式を使用して、ロード スクリプトに変数を追加します。
カスタム SQL の変数参照はリロード時に評価されます。アプリの使用中に変数値が変更された場合、スクリプトのリロードが実行されない限り、その変数を使用するカスタム SQL には変更が反映されません。
カスタム SQL 定義で動的変数を使用する場合は、Qlik 数式の一部として変数を参照し、カスタム SQL 定義を使用するすべてのクエリ実行で変数が強制的に評価されるようにします。
変数の詳細については、「データ ロード エディタでの変数の使用」を参照してください。
カスタム SQL の数式
数式を使用して、リモート データベースに送信されるカスタム SQL の内容を変更し、アプリのデータ モデル内のテーブルと列を表すことができます。データ モデルで使用される式は、単一の値に解決される必要があります。
数式が単一の値に評価されるかどうかをテストするには、KPI に数式として追加します。うまく機能する場合は、カスタム SQL で数式を使用できます。
数式は、これらの SQL 定義を使用するすべてのクエリ実行で動的に評価されます。クエリの実行中にテーブルまたは項目のカスタム SQL ステートメントで Qlik 数式が使用されるたびに、それらの Qlik 数式が最初に評価され、数式の現在の結果が取得されます。これらの結果は、元のクエリに代わって実行されるカスタム SQL ステートメントに挿入されます。Qlik 数式のこれらの評価により、リモート データベースへの SQL クエリが生成される可能性があります。Qlik 数式のこれらの評価により、リモート データベースへの SQL クエリが生成される可能性があります。
ロード中に数式の展開に失敗した場合は、null 値が返されます。これは、数式が無効であることを意味するものではありません。数式を評価するには、アプリ内でユーザーによる選択が必要になる場合があります。
カスタム SQL と データ モデル マネージャー を使用したデータ モデルの作成
カスタム SQL と データ モデル マネージャー を組み合わせて、Direct Query のデータ モデルを作成できます。ただし、現実的な考慮事項がいくつかあります。
-
ベスト プラクティスとして、ロード スクリプトにカスタム SQL を追加する前に、データ モデル マネージャー で実行するモデリングを完了してください。 カスタム SQL と データ モデル マネージャー は、ロードされたテーブルと項目間の関係を定義するために データ モデル マネージャー を使用し、追加のカスタマイズにカスタム SQL を使用する場合に併用するのが最適です。
-
データ モデル マネージャー によって作成されたデータ モデルの部分とカスタム SQL によって作成された部分は個別に管理され、スクリプトのリロード時に結合されます。データ モデル マネージャー は、カスタム SQL によって定義されたデータ モデルを表示しません。完全なデータ モデルを表示するには、データ モデル ビューア を使用します。
-
データ モデル マネージャー によって作成されたデータ モデルとカスタム SQL によって定義されたデータ モデルは、同じデータベース接続を使用する必要があります。
-
データ モデル マネージャー によってロード スクリプトに追加された IMPORT LIVE ステートメントを移動できます。ロード スクリプトは順番に評価されるため、新しい位置がカスタム SQL 要件に影響を与える可能性があります。たとえば、最終的なデータ モデルに不要なリレーションシップが作成されたり、テーブル名が重複したりする可能性があります。
-
データ モデル全体を通して、テーブルと項目には一意の名前を付ける必要があります。データ モデル マネージャー でテーブルを定義し、そのテーブルをカスタム SQL で再定義しようとすると、データ モデル マネージャー で作成したテーブルをドロップするか、カスタム SQL でテーブルと項目の名前を変更しない限り失敗します。
制限事項
Direct Query のカスタム SQL には次の制限があります。
-
カスタム SQL では単一のデータベースのみを使用できます。
-
Qlik 数式マクロが埋め込まれた 1 つ以上のカスタム SQL ステートメントを使用する Direct Query アプリは、On-Demand アプリの選択アプリとして使用できません。生成されたテンプレート アプリはインメモリ アプリであるため、ロード スクリプトで Qlik 数式マクロをサポートできないためです。
-
Direct Query カスタム SQL は、Analytics アクティビティ センターに追加されたスクリプトではサポートされていません。 スクリプトの詳細については、「カタログ内のスクリプトの操作」を参照してください。