【Anaplan】週次カレンダー(Weekly)のTimeフィルター攻略法

週次カレンダー(Weekly Calendar / 4-4-5カレンダーなど)は、小売業やサプライチェーン管理(SCM)のプロジェクトで頻繁に使用されますが、月次カレンダーとは少し異なるアプローチが必要です。

特に、「週」と「月」の親子関係を正しく扱うことがポイントになります。

以下に、ブログ記事の続編として**「週次カレンダー編」**の原稿を作成しました。


前回の記事では、一般的な「月次(Monthly)」カレンダーのフィルター作成方法を紹介しました。

しかし、小売業やメーカーの需給調整でよく使われる**週次カレンダー(4-4-5カレンダーなど)**の場合、「今月」や「来月」という概念を週単位にどう落とし込むかで悩む方が多いようです。

今回は、週次モデル特有のTimeフィルターの作り方を、**「Lookup(参照)」**テクニックを使って解説します。

週次カレンダーの落とし穴

Anaplanの CURRENTPERIOD() 関数は、モデル設定にもよりますが、基本的には「現在の(例:Oct 24)」を返します。「現在の(Week 1 FY24)」ではありません。

そのため、「今月の週だけを表示したい」といった場合、週(Week)から親である月(Month)を参照するロジックが必要になります。

Step 1. 月次モジュール(SYS Month)を準備する

まず、週の親となる「月(Month)」単位のシステムモジュールで、現在の月を判定するフラグを作ります。

(※前回の記事で作成したものでOKです)

  • Module: SYS01 Time Settings (Month)
  • Applies To: Time (Month)
Line Item NameFormatFormula
Current Period?BooleanITEM(Time) = CURRENTPERIOD()

Step 2. 週次モジュール(SYS Week)で親を参照する

次に、週単位のシステムモジュールを作成し、そこから「その週がどの月に属しているか」を確認してフィルターを作ります。

  • Module: SYS02 Time Settings (Week)
  • Applies To: Time (Week)

ここで重要なのが、PARENT関数LOOKUP の組み合わせです。

パターンA:当月の週のみ表示 (Weeks in Current Month)

「今が10月なら、10月に含まれるすべての週(Week 1〜Week 4)を表示する」という設定です。

Line Item NameFormatFormula
Parent MonthTime (Month)PARENT(ITEM(Time))
Filter: Current Month’s Weeks?BooleanSYS01 Time Settings (Month).'Current Period?'[LOOKUP: Parent Month]
  • 解説:
    1. Parent Month で、その週の親(月)を取得します。
    2. その月が Current Period かどうかを、月次モジュール(SYS01)から LOOKUP で引っ張ってきます。
    • Pro Tip: 直接 PARENT(ITEM(Time)) = CURRENTPERIOD() と書くこともできますが、システムモジュール間をLOOKUPで繋ぐ方が、計算効率(パフォーマンス)が良いとされています。

パターンB:ローリング〇〇週 (Rolling Weeks)

「今週を基準に、向こう13週(約3ヶ月分)を表示したい」というケースです。

週次カレンダーの場合、ADDMONTHS ではなく、単純に 日数(7の倍数) で計算するのが最も確実です。

Line Item NameFormatFormula
Filter: Next 13 Weeks?BooleanSTART() >= START(CURRENTPERIOD()) AND START() < START(CURRENTPERIOD()) + (13 * 7)
  • 注意点: CURRENTPERIOD() が月を指している場合、START(CURRENTPERIOD()) は「その月の1日」になります。
  • より厳密に「今週」基準にする場合:もし「今日が含まれる週」を基準にしたい場合は、別途「Current Date」を入力する設定モジュールを用意し、START() >= ‘SYS Global Settings’.Current Date のように判定させるのが一般的です。

パターンC:過去週と未来週 (Historical vs Future Weeks)

実績データ入力用と、フォーキャスト入力用でビューを分けたい場合です。

Line Item NameFormatFormula
Filter: Historical Weeks?BooleanSTART() < START(CURRENTPERIOD())
Filter: Future Weeks?BooleanNOT Filter: Historical Weeks?

【上級編】53週目の罠に注意

週次カレンダー(4-4-5など)を採用している場合、数年に一度「53週目」が発生する年があります。

  • ハードコーディングは厳禁: WEEKVALUE(TIME) <= 52 のような式を書くと、53週目がある年にデータが表示されなくなってしまいます。
  • 解決策: 上記の「パターンA(親の月を見る)」や「パターンB(日付で判定する)」の方法であれば、53週目があっても自動的に判定されるため、メンテナンスフリーで運用できます。

まとめ

週次カレンダーのTimeフィルター作成のポイントは以下の通りです。

  1. **月次(Month)**側で Current Period フラグを作る。
  2. **週次(Week)**側から PARENT 関数で親の月を特定し、LOOKUPする。
  3. ローリング計算は 7 (日数) を掛けて計算する。

特に小売・流通業のプロジェクトでは必須の知識ですので、ぜひテンプレートとして活用してください。