QlikViewナレッジ - INSIGHT LAB

【QlikView】カレンダーを一ヶ月、一週間、一日ごとに表示する

作成者: KJ|2014年9月22日

今回はQlikView(クリックビュー)で一ヶ月、一週間、一日をリストボックスで選択し、

カレンダーオブジェクトの日付を選択した期間に切り替わる方法をご紹介していきます。

 

 

初めにマスターカレンダーを作成する必要があります。

マスターカレンダーの作成方法は「マスターカレンダー作成」を参考にしてください。

確認のため、入力されたロードスクリプトは以下の画像のようになっています。

スクリプト文も記載しておきます。

 

 

売上:
LOAD 伝票番号,
仕入金額,
仕入先営業所コード,
日付コード,
Date(Date#(日付コード,'YYYYMMDD'),'YYYY/MM/DD') as 年月日,
製品小分類コード,
売上金額,
売上数量,
顧客コード
FROM
売上明細.csv
(txt, codepage is 932, embedded labels, delimiter is ',', msq);

 

新しいタブを追加して、以下のように入力してください。

※【ロードスクリプトの編集】画面のツールバー【タブ】をクリックし、【タブの追加】ボタンを選択します。

 

日付期間:
Load
Max(年月日)    AS DateMax,
Min(年月日)    AS DateMin
Resident 売上;

LET varMaxDateFieldValue('DateMax', 1);

LET varMinDateFieldValue('DateMin', 1);

マスタカレンダー:
LOAD
    Year(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD'))                   as ,
    Date(Makedate(Year(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD')),
         Month(Date((IterNo())+ DayStart($(varMinDate)-1),'YYYY/MM/DD'))),'YYYY/MM')    as 年月,
    Month(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD'))                  as ,
    Date(Makedate(Year(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD')),
         Month(Date((IterNo())+ DayStart($(varMinDate)-1),'YYYY/MM/DD')),
    Day(Date((IterNo())+ DayStart($(varMinDate)-1),'YYYY/MM/DD'))),'YYYY/MM/DD')                         as 年月日,
    Day(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD'))                          as ,
    WeekStart(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD'))                     as ,
    WeekDay(Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD'))                     as 曜日
AutoGenerate (1)
While Date((IterNo()) + DayStart($(varMinDate)-1),'YYYY/MM/DD') <= Date($(varMaxDate),'YYYY/MM/DD');

 

【リロード】をします。

スクリプト内にマスターカレンダーのデータが入っているのを確認します。

 

 

マスターカレンダーを作成していきます。

【シートオブジェクトの追加】から【スライダー】を選択します。

【スタイル】を【カレンダ】にして、【項目】を「年月日」にします。

 

 

【ドキュメント初期設定を上書きする】にチェックを入れて、【日付】を選択します。

 

 

【キャプションの表示】にチェックを入れて、「開始日」を入力します。

【OK】ボタンを押します。

 

 

カレンダーが完成しました。

※ 右側の日付アイコンから日付を選択してください。

 

 

完成したカレンダーをコピー&ペーストで増やします。

 

増やしたスライダーの【タイトルテキスト】を「終了日」とします。

 

 

二つのカレンダーが完成しました。 現在は一つのカレンダーの日付を選択しても、二つのカレンダーの日付が変更されてしまいます。

後ほど、変数を設定してカレンダーの日付を別々で表示できるように変更させていきます。

 

 

次にリストボックスを作成していきます。 ロードスクリプトを開き、インラインロードを入力していきます。

Mainシートの下にスクリプト文を入力していただいてOKです。

LOAD * INLINE [
期間指定
カスタム
1日前
1週間前
1ヶ月前
];

リロードします。

 

リストボックスを作成します。

「期間指定」を追加して【OK】を押します。

 

 

プロパティを開いて、【キャプションの表示】のチェックを外します。

 

 

リストボックスが完成しました。

 

 

変数を設定していきます。変数は三つ作成します。

【設定】から【変数一覧】を選択します。

【追加】を押して、変数を以下に設定します。

一つ目は【変数】を「vCalender1」、二つ目は「vCalender2」にします。 二つとも【定義】は設定しなくても大丈夫です。

 

 

三つ目の変数を追l加します。

【変数名】は「vSelectlist」にして、【定義】は「0」にします。

【OK】を押します。

 

変数の設定ができました。

次にリストボックスで選択した値を表示するためのオブジェクトを作ります。

【シートオブジェクト】の追加から、【テキストオブジェクト】を追加します。

【テキスト】に「=GetFieldSelections(期間指定)」を追加します。

【レイアウト】を「左揃え」、【透過性】を「100%」にします。

 

 

【アクション】で【変数】を「vSelectlist」、【値】を「=if(vSelectlist=0,1,0)」にします。

 

 

【レイアウト】で【枠線の幅】を「1pt」にします。

 

 

【キャプション】タブで【背景色】の色を任意で変更します。

【OK】ボタンを押します。

 

 

リストボックスで選択した日付がテキストオブジェクトに表示されるようになりました。

 

 

変数を使ってリストボックスに【条件付き表示】の設定をしていきます。

リストボックスの【プロパティ】を開きます。

【レイアウト】タブの【条件付き表示】に以下の数式を追加します。【OK】を押します。

=if(vSelectlist=0,1,0)

 

 

テキストオブジェクトを押すとリストボックスの表示/非表示が切り替わります。

もう一度、【テキストオブジェクト】を追加していきます。 今度はリストボックスが開いているときは「▲」、閉じているときは「▼」が表示されるようにします。

【シートオブジェクトの追加】から、【テキストボックス】を選びます。

【テキスト】に「=IF(vSelectlist=1,'▼',IF(vSelectlist=0,'▲'))」を入力して、【透過性】を「100%」にします。

 

 

【レイアウト】の【枠線の幅】を「1pt」にします。

 

 

【キャプション】を任意の色に変更します。 【OK】ボタンを押します。

※ 先程作成したテキストボックスのところに移行します。大きさの調整もします。

 

オブジェクトが全て完成しました。

ここから、トリガーを設定して、選択した期間に日付が表示されていくようにします。

カレンダーの日付を別々で表示させるため、トリガーはリストボックスとカレンダーをリンクさせるために設定します。

 

 

【ドキュメントプロパティ】から【トリガー】を選択します。

【項目イベント トリガー】の「期間指定」を選んで、【選択時】から【アクションの追加】をします。

 

 

【追加】を押して、【変数の設定】を選択します。

 

 

【変数】を「vSelectlist」にして、【値】は「0」にします。

 

 

変数をさらに追加していきます。

二個目の変数を追加します。

【変数】は「vCalender1」にして、【値】は以下の数式を入力します。

=IF(期間指定='カスタム',vCalender1, IF(期間指定='1日前',DayStart(varMaxDate,-1), IF(期間指定='1週間前',WeekStart(varMaxDate,-1), IF(期間指定='1ヶ月前',MonthStart(varMaxDate,-1)))))

 

 

三個目の変数を追加します。

【変数】は「vCalender2」にして、【値】は以下の数式を入力します。

=IF(期間指定='カスタム',vCalender2, IF(期間指定='1日前',DayEnd(varMaxDate,-1), IF(期間指定='1週間前',WeekEnd(varMaxDate,-1), IF(期間指定='1ヶ月前',MonthEnd(varMaxDate,-1)))))

 

 

追加したら【OK】ボタンを押します。

トリガーの設定が完了しました。先ほど作成したオブジェクトに、変数を適用させていきます。

「開始日」のプロパティを開いて、【項目】から【変数】に変えます。

【変数】を「vCalender1」にします。

【最小値】は「varMinDate」、【最大値】を「varMaxDate」にします。

 

 

【OK】ボタンを押します。

今度は期間終了日を変数に適用させていきます。

【変数】は「vCalneder2」に変更して、【最小値】と【最大値】を「varMinDate」、「varMaxDate」にします。

 

 

 

 

【OK】ボタンを押します。

オブジェクトに変数の適用ができました。

オブジェクトを以下の画像のように配置します。これで完成です。

 

 

 

 

期間を選択するとカレンダーにリストボックスで選択した期間の最大の日付がテキストオブジェクトに表示されるようになります。