はじめに
Qlik Senseでは、グラフやKPIなどのチャートが項目の選択状態に応じて更新されます。
この選択状態についての情報を取得するための関数は項目関数と呼ばれています。
本記事では、項目関数の中で特に便利なGetSelectedCount関数とGetFieldSelections関数の概要および使用例について紹介します。
GetSelectedCount関数の概要
GetSelectedCount関数は、項目内で選択状態の値の個数を返す関数です。
構文は以下になります。(Qlik Senseの公式ドキュメントより引用)
GetSelectedCount (field_name [, include_excluded [, state_name]])
引数
|
必須
|
説明
|
field_name
|
Yes
|
対象となる項目名
|
include_excluded
|
No
|
デフォルトは False()
選択状態の値(緑色になっている値)がカウントされます。
True()を設定した場合、field_nameに設定した項目と別の項目の選択によって除外値となった値(灰色になっている値)もカウントの対象となります。
|
state_name
|
No
|
デフォルトは '$'(並列ステート:デフォルトの状態)
ここで設定された文字列が並列ステート名として設定されているfield_nameがカウントの対象となります。
|
実際に使用してみます。
まずは、最もシンプルな例として「年月」(並列ステート:デフォルトの状態)の選択状態の値の個数は次の式で取得できます。
GetSelectedCount(年月) = 6
さらに、「1Qflg」で 1(1月~3月)が選択されている場合は、2つ目の引数include_excludedがFalse()(デフォルト)のとき、緑色になっている値の個数が、True()のとき、右にチェックマークがついている値の個数がそれぞれカウントされます。
GetSelectedCount(年月) = GetSelectedCount(年月,False()) = 3
GetSelectedCount(年月,True()) = 6
最後に、「年月」に並列ステート:State1が設定されている場合は、選択状態の値の個数は次の式で取得できます。
GetSelectedCount(年月,False(),'State1') = 5
GetFieldSelections関数
GetFieldSelections関数は、項目内で選択状態の値の情報を文字列で返す関数です。
構文は以下になります。(Qlik Senseの公式ドキュメントより引用)
GetFieldSelections ( field_name [, value_sep [, max_values [, state_name]]])
引数
|
必須
|
説明
|
field_name
|
Yes
|
対象となる項目名
|
value_sep
|
No
|
デフォルトは ', '(末尾に半角空白)
ここで設定された文字列が、項目の値が列挙される場合の区切り文字となります。
|
max_values
|
No
|
デフォルトは 6
選択状態の項目の値は(max_value)個までは、1つずつ表示されますが、(max_value)個より多くの値が選択状態の場合は、「x of y」や「NOT *」の形式もしくは「ALL」で表示されます。
|
state_name
|
No
|
デフォルトは'$'(並列ステート:デフォルトの状態)
ここで設定された文字列が並列ステート名として設定されているfield_nameがカウントの対象となります。
|
実際に使用してみます。
まずは、最もシンプルな例として「品目」(並列ステート:デフォルトの状態)の選択状態の値の情報は次の式で取得できます。
GetSelectedCount(品目) = GetSelectedCount(品目,', ') = '果物, 食器, 野菜'
次に、取得する文字列の区切り文字を変更してみます。
GetSelectedCount(品目,' or ') = '果物 or 食器 or 野菜'
次に選択する値を8(> 6 = (デフォルトのmax_value))個にしてみます。ここで、「品目」は30種類のデータが存在します。
GetSelectedCount(品目) = GetSelectedCount(品目,', ',6) = '8 of 30'
GetSelectedCount(品目,', ',12) = 'お酒, 化粧品, 家電, 果物, 食器, 精肉, 鮮魚, 野菜'
最後に、「品目」に並列ステート:State1が設定されている場合に、選択状態の値の情報は次の式で取得できます。
GetSelectedCount(品目,', ',6,'State1') = 'お酒, 化粧品, 家電, 精肉, 鮮魚'
GetSelectedCount関数、GetFieldSelections の活用例
-
選択状態をシート上に表示する(メジャーの数式に使用する)
項目の選択状態をシート上に表示させたい、ということが考えられます。このような場合は、「テキストと画像」チャートで次の数式をメジャーに設定することで表示できます。
'「品目」の値は' & GetSelectedCount(品目) & '個選択されています。' & Chr(10) & GetFieldSelections(品目)
ただし、この場合は「品目」の値を6個より多く選ぶと期待通りの表示がされません。(x of y や NOT * や ALL)
これを回避するためには、あらかじめロードスクリプトで、「品目」の値の種類数を取得し、変数に格納しておきます。
data:
Load
*
From [lib://・・・]
(ooxml, embedded labels, table is Sheet1);
品目:
Load
Count(Distinct 品目) as 品目数
Resident data;
Let vCountItem = FieldValue('品目数',1);
この変数をGetFieldSelections関数の引数(max_values)に指定します。
'「品目」の値は' & GetSelectedCount(品目) & '個選択されています。' & Chr(10) & GetFieldSelections(品目,', ',$(vCountItem))
-
チャートの表示非表示を選択状態により制御する(チャートの設定の数式に使用する)
チャートを表示する際に、集計対象のデータが多いと表示に時間がかかることがあり、これを解消したいということが考えられます。
このような場合は、Qlikで使用できる各種チャートのプロパティにある拡張機能に「演算実行条件」という設定箇所があり、ここでチャートの表示条件を指定することができます。
以下の設定を行います。
演算実行条件:GetSelectedCount(年月)=1
表示されたメッセージ:='年月を1つ選択してください'
すると「年月」が選択されていない場合や複数選択されている場合は、チャートは以下の表示となります。
-
選択状態に応じてチャートの集計範囲を動的にする(変数の数式に使用する①)
選択した「年月」を当月として、当月と前月のそれぞれで「売上」の集計をしたテーブルを表示したいなどチャートの集計範囲を動的にしたい、ということが考えられます。
このような場合は、変数で動的に当月と前月を定義し、それを数式に使用します。
まず、変数を以下のように定義します。
vMonth = GetFieldSelections(年月) // yyyy/m
VMonthBefore
= If(SubField(GetFieldSelections(年月),'/',2)=1,Num(SubField(GetFieldSelections(年月),'/',1)-1) & '/' & 12,Num(SubField(GetFieldSelections(年月),'/',1)) & '/' & Num(SubField(GetFieldSelections(年月),'/',2)-1) )
次に、テーブルのメジャーとして以下の2つを設定します。
当月:Sum({<年月={'$(vMonth)'}>} 売上)前月:Sum({<年月={'$(vMonthBefore)'}>} 売上)
これにより、動的にチャートの集計ができるようになります。
-
Set文の条件に使用するための変数を作成する(変数の数式に使用する②)
最後に、使用する状況はあまりないかもしれませんが、アイディアの1つとして、Set文の条件に使用するための文字列を設定することを考えます。
このような場合は、区切り文字の設定を工夫して、以下のような変数を設定します。
vSelectItem = GetFieldSelections(品目,''',''',$(vCountItem)) // a','b','..'x
この変数を用いて、Set文の中で
{<品目={'$(vSelectItem)'}>}
という条件を指定することができます。
以上になります。ご覧いただきありがとうございました。