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