Tableau うるう年、会計年度、前年同日対比、前年同曜日対比 メモ
うるう年、会計年度、前年同日対比、前年同曜日対比 メモ
はじめに
およそ4年に一度来るうるう年、これのTableauに与える影響と回避策をメモします。
Tableauで明確に影響が出るのは、日次レベルの表示を行う際のグラフになります。
tableauのうるう年を気にする時は例えば以下のシチュエーションです。
・会計年度
・前年同日対比
これを、ひとつずつ見ていきます。
会計年度について
日本企業では会計年度の始まりが4月の場合が多いと思います。
Tableauの日付表示のデフォルトは1月始まりのため、これを変える必要があります。
そこで、会計年度の開始月を変えたとき、年の日付フィールドが示す年度が、
例えば、2017年1月~3月は2017年度、2017年4月~12月は2018年度と表示されてしまいます。
これでは日本の会計年度の考え方より1年度大きくなってしまいます。
そこで、DATEADD("year",-1,[年月日])や、DATE(DATEADD("month",-12,[年月日]))を適応したくなります。
しかしこれを適応したとき、日次レベルの時にどんな問題が起きるのかというと、
閏年の日(2020/02/29)の情報がその前日(2020/02/28)に丸め込まれます。
うるう年366日の情報を通常年365日の枠に圧縮するような計算をした際に、うるう年の日があふれるので
日次レベルの時にはtableauはうるう年の日はその前日に丸めています。
こんなときの会計年度の対処方法については、以下の記事が詳しく解決方法を示してくれています。(感謝)
Tableau 会計年度と閏年(うるうどし)
前年同日対比について
前年同日対比については、以下のブログ記事が詳しいです。
日次YoYと曜日調整YoYと移動合計YoY
このメモではその補足をします。
対比の例一覧を表にしますと、以下の通りになります。
※2020年はうるう年です
当年の説明 | 当年の例 | 前年同日 |
---|---|---|
うるう年の前年 | 2019年2月28日 | 2018年2月28日 |
うるう年のうるう日前 | 2020年2月28日 | 2019年2月28日 |
うるう年のうるう日 | 2020年2月29日 | 2019年2月28日 または 2019年3月1日 |
うるう年の翌年 | 2021年2月28日 | 2020年2月28日 |
補足としては、ブログ内で、うるう年の判定は簡易的なものでした。これを完全なものにします。
閏年のWikiに、プログラミングにおける判定方法がありましたのでそれをTableauで表現しています。
以下の計算式を利用ください。
"うるう年判定"
MIN(YEAR([年月日])) % 4 = 0 AND
NOT MIN(YEAR([年月日])) % 100 = 0 OR
MIN(YEAR([年月日])) % 400 = 0
"前年がうるう年か判定"
MIN(YEAR([年月日])) % 4 = 1 AND
NOT MIN(YEAR([年月日])) % 100 = 1 OR
MIN(YEAR([年月日])) % 400 = 1
"売上額 前年同日"
// うるう年の2/29は、の2/28と対比させます
LOOKUP(
SUM([売上額]),
// うるう年の2/29以降と、うるう年翌年の2/28までの場合-366日前を取得します
IF ([うるう年判定] AND MIN([年月日]) >= MAKEDATE(MIN(YEAR([年月日])), 2, 29)) OR
([前年がうるう年か判定] AND MIN([年月日]) <= MAKEDATE(MIN(YEAR([年月日])), 2, 28)) THEN
-366
ELSE
-365
END
)
これで、うるう年を正確に判定した前年同日を表現できました。
前年同曜日対比について
前年同曜日の考え方は2つほど考えられます。
・52週前の前年同曜日
・前年同週同曜日
これをひとつずつ見ていきます。どちらが正解かはその場によると思います。
特に後者は計算式はなく概念の紹介に留めます。
52週前の前年同曜日について
これは以下の計算式で表現できます。
"52週前の前年同曜日"
LOOKUP(SUM([売上額]),-364)
なぜ-364日前か簡潔に説明します。
特定の日の7日前は、同じ曜日です。
7日間で曜日が一周するのは変わりません。
一年間は約52週間です。
よって、52*7で導かれる364、これを引いています。
ちなみにこの場合うるう年の有無でルールは変わらないため考慮は必要ありません。
「一年間は約52週間?なにか引っ掛かる」
そうですね、その通りです。一年間は53週間と考えることもあります。
ただ、ここでは単純に52週間前の日を"前年"として、前年同曜日としています。
そして、この52週前か53週間前かを考慮した場合、結果的に前年同週同曜日を考えていることになるはずです。
前年同週同曜日について
これは、前年の第1週目とした週の同曜日と比較するというものです。
年末年始付近の前年同曜日が、52週前の前年同曜日と比較して変わってきます。
以下は例です。
当年の例 | 52週前の前年同曜日 | 前年同週同曜日 |
---|---|---|
2022年12月18日 | 2021年12月19日 | 2021年12月19日 |
2022年12月25日 | 2021年12月26日 | なし |
2023年1月1日 | 2022年1月2日 | 2021年12月26日 |
2023年12月24日 | 2022年12月25日 | 2022年12月18日 |
前年同週同曜日は単純ではなく、何をもって第1週目とするかについても定義の確認が必要になります。
参考: グレゴリオ暦と ISO 8601 規格
グレゴリオ暦と ISO 8601 規格とはなにかについては以下も参考になると思います。
Discussion