はじめに
とあるダッシュボードを作っている際、週毎の売上推移を見るため、日付のディメンジョンを「週」だけにしたとき、正しく並ばない問題が発生しました。
▼の例だと、時系列順であれば、「45週から始まり、4週で終わる」並びですが、単純に昇順で並んでしまっています。
この解決方法を見つけたので、記事にまとめました。
解決方法
年月日の「Year」と「Week」を結合し、その結果を大小比較して並べる。
おそらく最もシンプルな解決法は、「年月日のディメンジョンを入れる」ことだと思います。
ただ今回は、「週」のディメンジョンのみという要求仕様があったため、解決には少々工夫が必要でした。
① Prep上で、レコード毎に「Year」と「Week」を文字列結合
文字列を結合するときの前提は以下の通りです。
- 文字列の構造は、[Year]+[Week]で、6桁とする。
- [Week]が1~9週の場合、結合結果を6桁とするために、Weekの冒頭に'0'を付与する。
この前提に従って、文字列結合を行う計算フィールドを作ります。
▼2022年の52週は、'202252'となっていますので、正しく結合されていますね。
② 結合結果を「数値型」に変換する。
大小比較をしたいので、文字列型を「数値型」に変えておきます。
③ ②を基準として、ORDER BYで昇順に並び替える。
「週」に「年」を付加した6桁の数値に作り変えたので、これを基準で並び替えます。
▼の場合、「週」だけ見ると、前年(2022年)の方が大きいですが、6桁の数値で見ると、当年(2023年)の方が大きいため、正しく時系列順に並んでいます。
おわりに
いかがでしょうか。もっとシンプルな方法や関数などあれば、ぜひ教えてください!