
Qlik Senseで日付の書式を、日付(YYYY/MM/DD)から年月(YYYY/MM)に変更したら、同じ年月(YYYY/MM)が複数表示されてしまった…なんてことはありませんか?
日付データの書式を変えて使用するときは、注意が必要です。
表示例はこちら。
▼フィルターパネル

▼棒チャート

単位違いで、日時(YYYY/MM/DD hh:mm:ss)から日付(YYYY/MM/DD)に変更したら、同じ日付が複数表示されてしまった…なんてパターンも。
▼フィルターパネル

▼棒チャート

このようなケースの原因・対処方法をご紹介します。
目次
※本記事は「2022年06月時点のSaaS」で作成しています。
原因
Qlik製品は、表示上の値とは別に、内部的な値も持っています。
表示上は同じ年月(もしくは日付)が複数あるように見えますが、実際は、以下画像の状態です。
▼日付(YYYY/MM/DD)から年月(YYYY/MM)を取得しようとしたパターン(画像1)

▼日時(YYYY/MM/DD hh:mm:ss)から日付(YYYY/MM/DD)を取得しようとしたパターン(画像2)

表示上の値は同じでも、内部的な値が異なる日付データになっているので、その分の年月(もしくは日付)が表示されている状態です。
では、表示上の値と内部的な値を揃えるためには、どうすれば良いでしょうか。
日付データの書式を変えて使用する場合は、以下の2つが必要です。
表示上の書式の変更
データ型の変換
上記の画像1・画像2の『表示上の値』は、以下スクリプトで取得しました。
▼日付(YYYY/MM/DD)から年月(YYYY/MM)を取得しようとしたスクリプト
Date(日付,'YYYY/MM') as 年月▼日時(YYYY/MM/DD hh:mm:ss)から日付(YYYY/MM/DD)を取得しようとしたスクリプト
Date(日時,'YYYY/MM/DD') as 日付Date関数は「Date#とDateの違い」でもご紹介したように、書式設定関数です。
データ型の変換は行いません。
表示上の値と内部的な値が揃っていない原因は、【表示上の書式の変更】だけが行われており、【データ型の変換】が不足しているためです。
対処方法
上記のとおり【データ型の変換】が不足しているので、加えましょう。
データ型の変換を行うDate#関数を加えると、同じ日付は1つだけ表示されるようになります。
変更例と結果は以下のとおりです。
▼日付(YYYY/MM/DD)から年月(YYYY/MM)を取得するスクリプト
Date#(Date(日付,'YYYY/MM')) as 年月
▽変更後のフィルターパネル

▽変更後の棒チャート

▼日時(YYYY/MM/DD hh:mm:ss)から日付(YYYY/MM/DD)を取得するスクリプト
Date#(Date(日時,'YYYY/MM/DD')) as 日付
▽変更後のフィルターパネル

▽変更後の棒チャート

補足
前述の画像1・画像2では、内部的な値について『(YYYY/MM/DD 形式)』といった注釈を加えました。
理由は、Qlik製品で日付データは、内部的にはシリアル値という数値で扱われているためです。YYYY/MM/DDといった書式では扱われておりません。
以下のように日付データにNum関数を使用すると、シリアル値が確認できます。
Num(日付) as 日付シリアル値Num(日時) as 日時シリアル値
これまで例に挙げた日付データで、Qlik製品のシリアル値を見てみましょう。


Qlik製品でシリアル値は、1899年12月30日からの経過日数として定義されています。
1899年12月30日は「0」、1899年12月31日は「1」です。
日付単位のデータは整数で、時刻単位のデータは小数で扱われます。
そのため、以下記事の『一つの項目を複数の項目に分割して、一意の件数を減らす。』で紹介した例文でも、日時から日付を取得できます。
・QlikViewの高速性を支えるアーキテクチャ(シンボルテーブルとビットスタッフト・ポインター)
Date(Floor(日付時刻)) as 日付
上記例は、Floor関数で小数点以下の数値を切り捨て、Date関数(書式設定関数)で書式を変更しています。
こちらは、小数点以下の数値を切り捨てによる【データ型の変換】→【表示上の書式の変更】の順に行っています。
さいごに
フィルターパネルは、ユニークな(一意の)値を表示します。
同じ値が何件ロードされていても、同じ値であればフィルターパネルで表示されるのは1件のみです。
そのため、フィルターパネルに対象の項目もしくは数式を設定すると、以下のとおり簡単に判別できます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
フィルターパネルに同じ日付が複数表示される
=【表示上の書式の変更】のみ行われており、【データ型の変換】が足りない
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
日付データをユニークな(一意の)値として扱うことの重要性を、以下の記事で紹介しています。あわせてご確認ください。
・QlikViewの高速性を支えるアーキテクチャ(シンボルテーブルとビットスタッフト・ポインター)