YTD metricsを年次表示する

YTD Metricsを以下のように計算した場合、年次表示にすると、過去の年の数値がYTDではなく、1月から12月までの集計が表示されてしまいます。過去の年の数値もYTDで計算したい場合どうすれば良いですか

periodToDateSumOverTime({Spend Competitiveness (Total)},{s_completed_time},YEAR)

  • 現在年(2026年)のデータ:YTD計算が正しく適用され、年初から現在までの値が表示される

  • 過去の年(2025年以前)のデータ:条件が適用されず、1月~12月の全データが集計されてしまう

@Hikari さん、ご質問ありがとうございます。

例えば、今日が2/22の場合、現在および過去の各年において、その年の1/1から2/22までの値を集計したいものと理解しましたが、認識に齟齬があればご指摘ください。

ご記載の通り、periodToDateSumOverTimeは集計粒度を年にすると各年での年間での合計となってしまいます。集計粒度を年のまま、特定の日付までの合計値を算出したい場合、引数のメジャーに sumIf 関数を組み合わせることで実現が可能です。以下に手順を示します。

※ フィールド名はご自身のデータセットに合わせ以下のように読み替えてください。

  • date → s_completed_time
  • value → Spend Competitiveness (Total)

まず、各年における集計の終了日を求める計算フィールド「endDate」を作成します。

endDate

ifelse(
    // 今日が閏日か判定
    concat(toString(extract('MM', now())), toString(extract('DD', now())))='0229',
    ifelse(
        // 計算対象の過去日付が閏年か判定
        mod(extract('YYYY', date), 400)=0 OR (mod(extract('YYYY', date), 4)=0 AND mod(extract('YYYY', date), 100)<>0),
        // 今日が閏日かつ過去日付も閏年なら2月29日まで考慮
        parseDate(concat(toString(extract('YYYY', date)), '/02/29'), 'yyyy/MM/dd'),
        // 今日が閏日でも過去日付が閏年でない場合2月28日まで考慮
        parseDate(concat(toString(extract('YYYY', date)), '/02/28'), 'yyyy/MM/dd')
    ),
    // 今日が閏日でない場合、今日と同じ月日まで考慮
    parseDate(
        concat(toString(extract('YYYY', date)), '/',
        toString(extract('MM', now())), '/',
        toString(extract('DD', now()))),
        'yyyy/MM/dd'
    )
)

次に、過去の日付が上記の endDate より以前か(=集計対象か)を判定する計算フィールド「isWithinYtd」を作成します。

isWithinYtd

ifelse(date <= endDate, 'y', '')

最後に、periodToDateSumOverTime のメジャーを isWithinYtd を条件とした sumIf 関数に置き換えます。

periodToDateSumOverTime(sumIf(value, isWithinYtd = 'y'), date, YEAR)

以上ですが、ご確認いただけますでしょうか?
もし上手くいかない場合には、マスク化したサンプルデータや、実際の分析上のビジュアルを添えていただけると助かります。

@Hikari
ご質問いただきありがとうございます。

本件、いかがでしょうか?

もし、解決されているようでしたら、@ytakahr の回答に Solution を付与していただければと思います。