お問い合わせ
6 分で読むことができます。

項目の選択状態の情報を取得する関数~GetSelectedCount(), GetFieldSelections()~

2025年3月12日

はじめに

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

field_fuctions_01

さらに、「1Qflg」で 1(1月~3月)が選択されている場合は、2つ目の引数include_excludedがFalse()(デフォルト)のとき、緑色になっている値の個数が、True()のとき、右にチェックマークがついている値の個数がそれぞれカウントされます。

GetSelectedCount(年月) = GetSelectedCount(年月,False()) = 3
GetSelectedCount(年月,True()) = 6
 

field_fuctions_02

最後に、「年月」に並列ステート:State1が設定されている場合は、選択状態の値の個数は次の式で取得できます。

GetSelectedCount(年月,False(),'State1') = 5

field_fuctions_03

 

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(品目,', ') = '果物, 食器, 野菜'
※「'」は文字列であることを示すもので、実際の出力結果には含まれません。以下同様。

 

field_fuctions_04

次に、取得する文字列の区切り文字を変更してみます。

GetSelectedCount(品目,' or ') = '果物 or 食器 or 野菜'

field_fuctions_05

次に選択する値を8(> 6 = (デフォルトのmax_value))個にしてみます。ここで、「品目」は30種類のデータが存在します。

GetSelectedCount(品目) = GetSelectedCount(品目,', ',6) = '8 of 30'
GetSelectedCount(品目,', ',12) = 'お酒, 化粧品, 家電, 果物, 食器, 精肉, 鮮魚, 野菜'
 

field_fuctions_06

最後に、「品目」に並列ステート:State1が設定されている場合に、選択状態の値の情報は次の式で取得できます。

GetSelectedCount(品目,', ',6,'State1') = 'お酒, 化粧品, 家電, 精肉, 鮮魚'

field_fuctions_07

 

GetSelectedCount関数、GetFieldSelections の活用例

  • 選択状態をシート上に表示する(メジャーの数式に使用する)

    項目の選択状態をシート上に表示させたい、ということが考えられます。このような場合は、「テキストと画像」チャートで次の数式をメジャーに設定することで表示できます。

    '「品目」の値は' & GetSelectedCount(品目) & '個選択されています。' & Chr(10) & GetFieldSelections(品目)

    field_fuctions_08

    ただし、この場合は「品目」の値を6個より多く選ぶと期待通りの表示がされません。(x of y や NOT * や ALL)

    field_fuctions_09

    これを回避するためには、あらかじめロードスクリプトで、「品目」の値の種類数を取得し、変数に格納しておきます。

    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))
     

    field_fuctions_10

  • チャートの表示非表示を選択状態により制御する(チャートの設定の数式に使用する)

    チャートを表示する際に、集計対象のデータが多いと表示に時間がかかることがあり、これを解消したいということが考えられます。

    このような場合は、Qlikで使用できる各種チャートのプロパティにある拡張機能に「演算実行条件」という設定箇所があり、ここでチャートの表示条件を指定することができます。

    以下の設定を行います。

    演算実行条件:GetSelectedCount(年月)=1
    表示されたメッセージ:='年月を1つ選択してください'
     

    すると「年月」が選択されていない場合や複数選択されている場合は、チャートは以下の表示となります。

    field_fuctions_11

  • 選択状態に応じてチャートの集計範囲を動的にする(変数の数式に使用する①)

    選択した「年月」を当月として、当月と前月のそれぞれで「売上」の集計をしたテーブルを表示したいなどチャートの集計範囲を動的にしたい、ということが考えられます。

    このような場合は、変数で動的に当月と前月を定義し、それを数式に使用します。

    まず、変数を以下のように定義します。

    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)'}>} 売上)

    これにより、動的にチャートの集計ができるようになります。

    field_fuctions_12
  • Set文の条件に使用するための変数を作成する(変数の数式に使用する②)

    最後に、使用する状況はあまりないかもしれませんが、アイディアの1つとして、Set文の条件に使用するための文字列を設定することを考えます。

    このような場合は、区切り文字の設定を工夫して、以下のような変数を設定します。

    vSelectItem = GetFieldSelections(品目,''',''',$(vCountItem)) // a','b','..'x

    この変数を用いて、Set文の中で{<品目={'$(vSelectItem)'}>}という条件を指定することができます。

以上になります。ご覧いただきありがとうございました。

Topics: Qlik
seri

Written by seri

Qlik_No1_2022
QSナレッジ事例バナー
DXバナー
Qlikseminar
qs_trial
Qllikseminar
Vizlibナレッジ
Vizlibセミナー
qv_knowledge
book_kawaii
Snowflake_バナー

新着記事

タグ別の記事

全て表示