Qlikの日付処理のベストプラクティス〜第3回 前年比較の表現〜

こんにちは!Yokoです。
2026年になりまして、本当は1発めに書きたかった記事なのですが、やながさんに先を越されてしまいました😅
日付処理のベストプラクティスの第3回めは、年も改まったということで、前年比較について触れてみたいと思います。
色んな方法があるとは思うのですが、弊社が作成する時は、概ねこのやり方に準拠していて、ほぼコピペでやっていますので、これも是非コピペしていただければと思います。

目次

経営ダッシュボードの日付処理で留意すべき点

一般にBIツールは集計、分析結果を可視化するものであって、静的なレポートツール的なものとされてきました。一方、Qlikは動的に探索したり、深堀りするためのツールですので、出来上がったものを「アプリ」といいます。
これまで色んなBIツールを経験してきましたが、「データを分析するためのアプリ」を作れるのはQlikだけで、他のBIツールとは全然違うと僕は感じています。データを分析するためのアプリを作るという所作を知らない人が作ったら、他のBIツール以下の成果物になってしまいます。とても残念なことなんですが、実際そんなアプリで溢れているような気もします。

さて、分析寄りのアプリを作っていくと、操作が複雑になっていくのも事実で、特に経営ダッシュボードでは、Qlikの操作に不慣れなユーザには「使いにくい」と感じてしまうことがあります。
経営ダッシュボードは経営層やマネジメント層のユーザが利用するので、必ずしもQlikの作法に慣れているとは言えませんよね。だから、何もしなくてもきれいに集計されていることが最も重要視されるべきです。
日付処理をいう観点から整理すると、以下の要件を満たしている必要があります。

  1. デフォルトはフィルターの操作などしなくても、今期の数字が表示されるべき
  2. 日付処理は推移や傾向を見るものなので、年度で見る→月でみる→日で見るというようにドリルダウンできなければならない
  3. 前期との比較などは、特別な操作なしに同一のチャート上に表示されなければならない

では、この要件を満たすべく、作っていきましょう。

変数の準備

期間をフィルターで選択してその期間を表示するだけならシンプルな数式でいいのですが、デフォルト表示や前年表示などを考えると、やはりSET文にしておくべきです。
そのために、今年度の期間を指定するための変数2つと前年度の期間を指定する変数を2つ準備します。

変数名定義
vMinDate=If(Count(Distinct 売上日)=Count({1} Distinct 売上日),
Date(Min({$<[売上日.$(vCalendar).Year]={$(=Year(Max([売上日.$(vCalendar).Year])))}>} 売上日)),
Date(Min(売上日))
)
vMaxDate=Date(Max(売上日))
vLast_MinDate=AddYears(‘$(vMinDate)’,-1)
vLast_MaxDate=If(vMaxDate = Date(DayStart(MonthEnd(vMaxDate))),
Date(DayStart(MonthEnd(AddYears(‘$(vMaxDate)’,-1)))),
AddYears(‘$(vMaxDate)’,-1)
)

わかりにくいと思いますので、解説しますね。

■ vMinDate
Count(Distinct 売上日)=Count({1} Distinct 売上日) ならば、今年度の初日を指定します。Count(Distinct 売上日)=Count({1} Distinct 売上日)ということは、売上日が選ばれていない状態ということです。
Date(Min({$<[売上日.$(vCalendar).Year]={$(=Year(Max([売上日.$(vCalendar).Year])))}>} 売上日)) は売上日の最大の年度に等しいということなので、今年度を意味します。
尚、売上日が選ばれていれば、売上日の最小値を取得します。

■ vMaxDate
こちらは売上日の最大を意味します。

■ vLast_MinDate
vMinDate(今年度の最小)の1年前を取得するので、AddYearsを使用します。

■ vLast_MaxDate
前年のMaxha少し厄介です。というのは、月で比較する場合に、前年がうるう年でならば、AddYears(, -1)とすると1日不足してしまうためです。よって、今年度のMaxが月末日の場合は、AddYearsせずに、前年も月末日となるようします。もし、月末日であければ、前年は1年前の日付を取得して構いません。

次に、チャートで必要となる変数を2つ追加します。

変数名定義
vMonthDateMonth
vSET_DateString=’売上日.$(vCalendar).Year, 売上日.$(vCalendar).Month, 売上日.$(vCalendar).YearMonth’

vMonthDateはチャート上で月表示を日表示を切り替えるための変数です。Monthを入力されているのは、デフォルトを月表示とするためです。
vSET_DateStringは、選択状態を無視する日付項目を列記したものです。ここでは「年度」「月」「年月」のフィルターの選択状態を無視するようにします。これは、特に前年の期間(vLast_MinDate〜vLast_MaxDate) を表示する際に、選択状態を無視しなければ、前年が表示できなくなるのを回避するための設定ですが、SET文にいちいち入力するのが面倒なので、変数で指定しておくことにします。

月・日表示切り替えのためのドロップダウン

変数入力(Variable Input)をシート上に配置し、以下のように設定します。

設定項目設定内容
Variable > NamevMonthDate
Variable > Show asDrop down
Values > Fixed or dynamic valuesDynamic
Values > Dynamic valuesMonth~月|MonthDay~日

上記の設定で、vMonthDateが月(Month)表示と日(MonthDay)表示を切り替えできるようになります。

チャートへの実装

では、チャートに実装していきます。
チャートの種類は「折れ線チャート」とし、以下のように設定します。

■ 軸の設定

設定項目設定内容
項目=[売上日.$(vCalendar).$(vMonthDate)]
ラベル=vMonthDate

■ メジャー1の設定

設定項目設定内容
数式Sum({$<売上日={“>=$(vMinDate)<=$(vMaxDate)”}>} [売上金額])
ラベル=Year(‘$(vMinDate)’) & ‘年度’

■ メジャー2の設定

設定項目設定内容
数式Sum({$<売上日={“>=$(vLast_MinDate)<=$(vLast_MaxDate)”},$(vSET_DateString)>} [売上金額])
ラベル=Year(‘$(vLast_MinDate)’) & ‘年度’

軸はドロップダウンの設定により、MonthとMonthDayが切り替わります。
メジャー1は今年度のvMinDate〜vMaxDateの間の売上金額の合計を求めます。
メジャー2は前年度のvLast_MinDate〜vLast_MaxDateの間の売上金額の合計となりますが、vSET_DateStringのフィルターの選択状態を無視します。

期間を表示するテキストの設定

当期と前期の期間を明示するためのテキストオブジェクトを追加します。設定は以下のとおりです。

設定項目設定内容
数式=’当期:$(vMinDate)〜$(vMaxDate)’
& Chr(10)
& ‘前期:$(vLast_MinDate)〜$(vLast_MaxDate)’

表示の確認

以上、設定が完了したら、動作確認を行います。

デフォルト表示は今年度の期間が表示され、前の期間は同期間で自動集計されています。
また、「月」と「日」のドロップダウンで時間軸の切り替えが可能です。
年月のフィルターで2025年8月〜10月を選択すると前年表示は2024年8月〜10月で表示されます。
以上、要件を満たすシートができあがりました。

まとめ

今回は、今年と前年を比較できるチャートを作成しました。期間はSET文で指定しますが、今期と前期の期間は予め変数で設定しておきます。
この変数を使用して、同様の数式で様々なメジャーの数式を作れます。
この数式をマスターアイテムとして登録しておけば、さらに効率的に実装できますよね。

前年対比なんて怖くない。
チャッチャとやってしまいましょう。
ではまた!

関連記事はこちら
Qlikの日付処理のベストプラクティス〜第1回 Auto Calendar〜
Qlikの日付処理のベストプラクティス〜第2回 カレンダーの切り替え〜

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次