Qlik Trainingブログ

  • Qlik Sense
  • Qlik Cloud
  • 開発者
  • データロード
2022.07.20

同じ年月が複数表示される!?

同じ年月が複数表示される

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の高速性を支えるアーキテクチャ(シンボルテーブルとビットスタッフト・ポインター)

関連している記事

  • Qlik Cloud
  • Qlik Sense
  • 運用者
2024.04.24

Qlik Cloud 日本リージョンへの移行方法(qlik-cli利用時の注意点)

先日、本ブログにて、日本リージョンへテナントを移行する方法の全体像をご紹介しました。今回は、コマンドラインのqlik-cliを用いたテナント移行時の注意点と、コマンドやスクリプトの記述例をご紹介します。

  • Qlik Sense
  • Qlik Cloud
  • 開発者
  • 運用者
2024.04.17

Qlik Application Automation活用術:Microsoft Teamsにメッセージを配信する

Qlik Sense SaaSを使用していて、メジャーの結果と事前に設定した閾値を比較して、閾値を超えたら通知を飛ばせたら良いな、と考えたことはありませんか?本記事では、Qlik Sense SaaSの「Qlik Application Automation」でMicrosoft Teamsにメッセージを配信する方法を紹介します。

  • Qlik Cloud
  • Qlik Sense
  • 運用者
2024.04.01

Qlik Cloud 日本リージョンへの移行方法

2024 年 3 月 26 日に QlikTech 社より Qlik Cloud の日本リージョン開設の ニュースリリースが発表されました。本ブログではすでに Qlik Cloud(Qlik Sense Enterprise SaaS) をご利用中のユーザー様に向けて、日本リージョンへテナントを移行する方法をご紹介します。

ページの先頭へ戻る