チャート式における並列ステートの例

これらの例は、QlikView 開発者 および/または QlikView パワー ユーザーが用いる並列ステートのベスト プラクティスを示すことを目的としています。これらの例は「Alternate States Functionality.qvw」ファイルにあります。

ステート間の選択を同期化

次の数式をひとつのチャートの中で使用できます。

count({$} DISTINCT [Invoice Number])

count({State1} DISTINCT [Invoice Number])

count({State2} DISTINCT [Invoice Number])

この方法で問題となるのは、エンド ユーザーが個々のステートで的確な選択を行うために QlikView の開発者は 3 つすべてのステートの選択 (リスト ボックスとマルチ ボックス) を重複させる必要があるということです。多くの場面で、QlikView の開発者はすべてのステートで利用できる "共通する" 選択条件を設定しようとします。これにより、エンド ユーザーが個々のチャートにコンテキストを設定し、ステート間の差異を表示するための特定の選択条件を利用できるようになります。Set 分析をステートと共に使用し、ステート間で特定の選択条件の一貫性を保つことができます。

count({State1<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])

count({State2<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])

QlikViewの開発者は、初期ステート の Year および Month と同期する State1 と State2 の Year および Month の選択条件を保ちます。QlikView の開発者は、ステート間でより多くの項目の一貫性を保つため、必要に応じて set 修飾子に要素を追加できます。

SET 演算子

ステートに Set 演算子 (+, *, -, /) を使用できます。次の数式は有効です。初期ステートまたは State1 のユニークな請求書番号をカウントします。

例:  

count({$ + State1} DISTINCT [Invoice Number])
は、初期ステートと State1 を合わせたユニークな請求書番号をカウントします。

count({1 - State1} DISTINCT [Invoice Number])
は、State1 にないユニークな請求書番号をカウントします。

count({State1 * State2} DISTINCT [Invoice Number])
は、初期ステートと State1 の両方に存在するユニークな請求書番号をカウントします。

注: このように Set 演算子を使用する場合は注意が必要です。場合によっては、期待する結果が得られない可能性があります。これは、既定のステートにおいて選択によって生成されたデータ セットが結合されたデータ セットと完全に対応していないからかも知れません。これは、データ モデルが複雑になるにつれてその傾向が強くなります。

暗黙的項目値定義

set 演算子を関数 P() や関数 E() と使用する方法があります。これらの関数は Set 数式内でのみ利用できます。

例:  

count({$<[Invoice Number] = p({State1} [Invoice Number])>} DISTINCT [Invoice Number])
この数式は、State1 で絞り込まれた請求書番号に基づいた初期ステートのユニークな請求書番号をカウントします。

ほぼ次の数式と同じですが、全く同じという訳ではありません。

count({$<[Invoice Number] = State::[Invoice Number]>} DISTINCT [Invoice Number])

数式の違いは、最初の数式では請求書番号の絞込値が State1 から初期ステートに渡されます。2 つ目の数式では選択値が State1 から初期ステートに渡されます。ユーザーが State1 で請求書番号の選択を行わなかった場合、初期ステートに渡される請求書番号の値はありません。

Set 演算子は Set 修飾子内で使用するのが最適です。次の数式では、State1 と State2 から共通する請求書番号の絞込値を 初期ステート の請求書番号に渡します。

例:  

count({$<[Invoice Number] = p({State1} [Invoice Number]) * p({State2} [Invoice Number])>} DISTINCT [Invoice Number])
初期ステートと State1 の共通する請求書番号を返す数式は次の通りです。

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1} [Invoice Number])>} DISTINCT [Invoice Number])

この数式では、要素関数と Set 識別子 の両方にステート (この場合は初期ステート) 使用されているため分かりにくいかも知れません。要素関数 p($) が 初期ステート の絞込値を返していることを覚えておいてください。set/state 識別子 {$} は要素関数の結果によって変更されています。現在、初期ステートに存在する請求書の選択条件は、要素関数の共通する値によって無効にされます。

上記数式は、初期ステート と State1 の共通する選択条件の同期に失敗するため、完全に正しいとは言えませんのでご注意ください。次の数式はそれを行います。

例:  

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1<Year = $::Year, Month = $::Month>} [Invoice Number])>} DISTINCT [Invoice Number])

すでに述べた通り、QlikView の開発者はステート間で選択条件の一貫性を保つため、修飾子に項目を追加できます。