QlikViewのリストボックスで、ドロップダウンリストを作る

QlikViewのドロップダウンリストはマルチボックスで実現できるーというのはQlikViewユーザであれば皆が知るところだと思う。
しかし、マルチボックスを使いたくない場面もままある。
そんなときはリストボックスでドロップダウンリストを作ってみよう。

#シンプルなドリップダウンリスト

まずは以下のスクリプトでデータモデルを作っておく。

```vimscript:データ作成
LET vCustomerCnt =10000;
LET vCategoryCnt = 5;
LET vTranCnt = 50;
LET vDateStart = 43831;
LET vDuration = 365;


Customer:
LOAD *,
	 Floor(customer_age,10) as customer_decade;
LOAD RowNo()            as customer_id,
     Hash128(RowNo())   as customer_name,
     Floor(Rand()*100)	as customer_age,
     if(Rand()<0.5,'男','女') as gender
AutoGenerate $(vCustomerCnt);

Category:
LOAD RowNo()                as category_id,
     'Category_' & RowNo()  as category_name
AutoGenerate $(vCategoryCnt);

Transaction:
LOAD RowNo()                                        as tran_id,
     Date($(vDateStart) + Floor((Rand() * $(vDuration))),'YYYY/MM/DD') as date, 
     Ceil(Rand()*$(vCustomerCnt))                   as customer_id,
     Ceil(Rand()*$(vCategoryCnt))                   as category_id,
     Mod(Floor(pow(Rand(),2)*10),3)+1               as unit,
     Ceil(Sqrt(Rand()*10000000))                    as amount
AutoGenerate $(vTranCnt);

MasterCalendar:
LOAD tmp_date                                       as date,
     Year(tmp_date)                                 as year,
     Month(tmp_date)                                as month,
     Date(MonthStart(tmp_date),'YYYY/MM')           as yearmonth;
LOAD
    Date(mindate + IterNo())                        as tmp_date,
    maxdate
WHILE mindate + IterNo() <= maxdate;
LOAD min(FieldValue('date',RecNo()))-1              as mindate,
     max(FieldValue('date',RecNo()))                as maxdate
AutoGenerate FieldValueCount('date');
```

できたら早速作ってみよう。

最初に変数 "vDispFlag"を作っておく。この変数は1のときドロップダウンで表示、0のときは閉じるというフラグの役割を果たす。

次にリストボックスを作成する。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/263849/f913a668-a861-24fe-3ba2-d8b5cc508823.png)

```vimscript:数式
=if(vDispFlag=1,gender)
```
キャプションアイコンは全て非表示にしておこう。
![11.png](https://qiita-image-store.s3.amazonaws.com/0/263849/99df6640-79dc-ec2e-fa33-261ccfa16995.png)

さらにドロップダウンリストを閉じるためのボタンを作成する。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/263849/1d0b56d8-5952-5baa-4707-273934e1e0f2.png)

```vimscript:数式
=if(vDispFlag=1,'▲','▼')
```
背景色は透過性を100%とし、透明化しておく。
さらにこのボタンにアクションを設定する。

「変数の設定」で以下のように設定する。
このボタンは「レイヤー」は前面にし、サイズを調整しておく(12×12)。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/263849/7e4e0631-6214-b9de-969c-62203017f7ac.png)

▲のテキストオブジェクトをリストボックスのキャプションに移動すると、下記のように▲ボタンで開閉するドロップダウンリストができあがった。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/263849/3f0ee49f-e555-bfc4-b6c8-1538378dc526.png)

#マルチなドロップダウンリスト
シート上のスペースを極力取らずに、いろんな項目の選択ができるリストボックスを作ってみる。
予め変数"vListField"を作成しておく。この変数には項目名がセットされる。
「制約」タブで以下のとおり設定する。
・リスト値は

```vimscript:数式
-;gender;customer_decade
```

![03.png](https://qiita-image-store.s3.amazonaws.com/0/263849/ac352a90-e993-7f0e-983d-fb23b54e257b.png)

次にリストボックスを作成する。
リストボックスの基本設定にて数式を選択し、数式を設定する。
![01.PNG](https://qiita-image-store.s3.amazonaws.com/0/263849/78d5f9af-0dbf-fda8-165f-3ccc9de11b05.png)

数式は先程作成した$(vListField)とする。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/263849/9a6cf377-014e-316c-9e0a-48d4e98f8ea1.png)

「シンプルなドロップダウンリスト」で作成した▲ボタンと同じ要領で「閉じるボタン」を作成する。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/263849/e72179b9-70a4-eff0-3a9d-f0f6e4087cd9.png)


```vimscript:数式
=if(vListField<>'-','▲')
```

アクションは「変数の設定」にて vListFieldに'-'を代入するように設定する。
![06.png](https://qiita-image-store.s3.amazonaws.com/0/263849/53d279ae-131d-6661-d06e-8dc920ff35f8.png)


完成形は以下のとおり。
vListFieldで項目を選択すると、その項目の値をドロップダウンリストから選択することができる。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/263849/3707f24a-86a4-8963-ec05-31caa91e142f.png)

Web画面のようなUIを作るときは、リストボックスをうまく使うといいよね。
ではまた！