h.yamada/ 2023年 1月 5日/ 技術

ヤマダです。
2023年もコツコツ投稿していこうと思います。今年もよろしくお願いいたします。

今回はQlikSenseのオンデマンドアプリ(On Demand App Generation:ODAG)を実装してみました。QlikViewとどのような違いがあるか調査してみようと思います。

ODAGとは?

公式ドキュメントはこちらになります。
簡単に言うと、アプリ(qvfファイル)から引数を渡し、別アプリをリロードする手法となります。リロードするアプリは引数を受け取り、ロードスクリプトのリロード条件に設定することでデータ件数を少なくすることができます。

ODAGの構成

アプリは2つ作成する必要があります。
・引数を渡すアプリ(以降、選択アプリ)
リストボックスを表示し、データを選択できる画面を作成します。

・引数を貰うアプリ(以降、テンプレートアプリ)
選択アプリから引数を受け取り、ロードスクリプトに設定します。

実装方法

1.サンプルデータの説明
2.管理コンソールでODAGの設定をONにする
3.選択アプリの実装
4.テンプレートアプリの実装
5.選択アプリのODAGボタンの作成

サンプルデータの説明

分類コード、商品コード、金額の項目があるデータを使用します。

分類コード 商品コード 金額
S02 A001 400000
S01 B001 5000
S01 C001 2000
S01 D001 20000
S03 E001 150000
S02 A001 200000
S01 B001 15000
S01 C001 10000
S01 D001 60000
S03 E001 180000
S02 A001 1000000
S01 B001 10000
S01 C001 8000
S01 D001 120000
S03 E001 210000
S02 A001 600000
S01 B001 20000

管理コンソールの設定

サーバーのODAGの設定をOFF→ONにします。

選択アプリの実装

分類コード、商品コードをロードし、シートにリストボックスを設定します。
アプリ名は「uriage_selection」とし保存します。

テンプレートアプリの実装

ロードスクリプトで引数の設定を行います。

IF '$(odagActive)'='' THEN
  SET odags_商品コード='''A001''';
END IF;

LOAD
    商品コード,
    分類コード,
    金額
FROM [lib://DataFiles/売上データ.xlsx]
(ooxml, embedded labels, table is Sheet1)
Where Match(商品コード,$(odags_商品コード));

変数$(odagActive)は選択アプリからリロードされた場合に「1」がセットされます。自身でリロードした場合は空白になります。1~3行目は開発用のコードとなります。
5行目のデータロードで商品コードの抽出を記載をしております。変数$(odag_商品コード)には選択アプリで選択した商品コードの値がセットされます。
(今回の例は商品コードのみですが、分類コードも設定することは可能です)
アプリ名は「uriage_detail」とし保存します。

ODAGまわりの変数名は全てプレフィックスにがつきます。リファレンスはこちらになります。主に使用するのはODAG_ODAGA_くらいかと思います。

選択アプリのODAGボタンの作成

シートの編集画面で画面左側の「アプリのナビゲーションリンク」→「新規作成」をクリックします。

設定画面が表示されますので、各情報を入力します。

設定情報は以下になります。

項目 説明 設定値
名前 ボタンのラベルを入力 odag実行
テンプレートアプリ テンプレートアプリの設定 uriage_detail
数式 ODAGの実行条件の数式を設定 count(distinct [商品コード])
最大行数 ODAGの実行条件の最大行数を設定 1
生成されたアプリの最大数 ODAGのアプリの保持数を設定 1
生成されたアプリを上書き ODAGのアプリを上着きするかの設定 チェックOFF
保持期間 ODAGアプリの保存期間 有効期限なし
起動時のデフォルト表示 初期表示するシート名を設定 シート1

数式、最大行数の補足ですが、今回の例では数式で商品コードの件数を集計し、集計結果が「1」のみODAG実行となっております。つまり、選択アプリで商品コードを1つ選択した場合のみODAGが実行可能となります。

設定後はODAGのオブジェクトをドラッグしてボタンを作成します。

ODAGの実行

選択アプリを開き商品コードを1つ選択し以下の操作を行います。

アプリを開くと選択したデータのみ取り込まれていることがわかります。

まとめ

QlikViewではODAGサポート対象外だったのですが、QlikSenseからはサポート対象となりました。また、GUIで全て設定できるようになりました。(QlikViewではdllのデプロイ、ローカルユーザの作成などが必要でした)
ODAGはユーザがリロードを任意に実行できる分、都度メモリを消費します。また、アプリ数も増えますので、運用面、サーバーリソースの十分な検討が必要です。

次回はDynamicViewについて触れようと思います。
ではまた!

About h.yamada

BIやってます。 初めに触ったBIはPentaho、一番長いのはQlikViewで約10年、Tableauも少々。 Tableau Desktop Certified Associateの資格も持ってました(有効期限切れ)