2014年12月25日木曜日

QlikViewが遅い時は数式の最適化を検討する

インメモリ技術と圧縮技術による高速処理が売りのQlikViewですが、リレーションやチャートの実装内容によっては計算処理に時間がかかりパフォーマンスが悪化します。遅いだけでなく、メモリを使い切りハングしてしまうこともあるため、数式の最適化は重要です。

以下にパフォーマンスを改善する上でのトピックを記載します。

QlikView計算処理の負荷が小さいもの


・Sum

・SET分析

・関数

QlikView計算処理の負荷が大きいもの


・Count

件数をカウントする場合、整合性を確保する意味でもcountの利用は注意が必要です。
QlikViewではSQLのようにテーブル名で修飾することができないため、キー項目をカウントする場合はマスタの件数なのか、トランザクションの件数なのか判断できないことがあります。
 

QlikViewのカウント処理


顧客コードで関連付けられる下記のようなテーブルがあるとき、count(顧客コード)の結果はマスタとトランザクションを合計したレコード数が返却されます。

マスタテーブル

顧客マスタ:
 ・顧客コード
 ・顧客名
 
トランザクションテーブル

売上明細:
 ・明細番号
 ・売上日
 ・顧客コード
 ・商品コード
 ・売上金額

Distinctを付けた場合、(マスタに存在しない顧客コードはトランザクションに存在しないという前提なら)マスタのレコード件数を取得することが出来ますが、下記のようにロードスクリプトでカウンタ用の項目を保持するのがQlikViewに適した実装になります。

顧客マスタ:
LOAD 1 as 明細件数,
顧客コード,
顧客名・・・

・if文

・不要な正規化


if文による判定とSet分析の判定では処理速度に3~20倍も差が開くことがあります。

チャートに数式を埋め込む場合は、可能な限りSet分析で置き換えられないか検討してください。


関連記事


QlikViewパーソナルエディションをインストールする

国内導入実績No1、Dr.SumとQlikViewを比較する

QlikViewの開発は命名規則が重要

ロードスクリプトはタブ分けすることで開発生産性が高まる

QlikViewが遅い時は数式の最適化を検討する