目标:
数据:
ind YEAR MON Figures
1 2020 JAN 12321
2 2020 FEB 344
3 2020 MAR 5000
4 2020 APR 325
5 2020 MAY 747
1 2019 JAN 54091
2 2019 FEB 349
3 2019 MAR 789
4 2019 APR 901
5 2019 MAY 2356
期望结果:
用法-默认过滤器为最新年份= 2020,用户可以选择特定的一年以查看记分卡中的更改
ind YEAR MON Figures YTD Change
1 2020 JAN 12321 12321 0
2 2020 FEB 344 12665 344
3 2020 MAR 5000 17665 5000
4 2020 APR 325 17990 325
5 2020 MAY 747 18737 747
1 2019 JAN 54091 54091 0
2 2019 FEB 349 54440 349
3 2019 MAR 789 55229 789
4 2019 APR 901 56130 901
5 2019 MAY 2356 58486 2356
我该如何实现?
答案 0 :(得分:1)
您与日历有关系吗?还是在您的表中是MonthNo的列? 如果是,那么是计算YTD的最简单方法:
YTD = CALCULATE (
SUM ( 'Table'[Figures] ),
FILTER (
ALL ( 'Calendar'[Year], 'Calendar'[MonthNo] ),
'Calendar'[Year] = SELECTEDVALUE ( 'Calendar'[Year] )
&& 'Calendar'[MonthNo] <= SELECTEDVALUE ( 'Calendar'[MonthNo] )
)
)
在这里,我们将本月(从表上下文中)到1个月到X个月(当前为行)的[Figures]列相加。
YTD_LY = CALCULATE (
SUM ( 'Table'[Figures] ),
FILTER (
ALL ( 'Calendar'[Year], 'Calendar'[MonthNo] ),
'Calendar'[Year] = SELECTEDVALUE ( 'Calendar'[Year] ) -1 //add -1 here
&& 'Calendar'[MonthNo] <= SELECTEDVALUE ( 'Calendar'[MonthNo] )
)
)
答案 1 :(得分:1)
如果不需要汇总结果,并且假设Ind列按月排序,并且每年重新启动(如示例数据中所示),则可以考虑创建两个计算列。在这里,我假设表的名称为“ Tab”
YTD累计当前列年份的数字值,直到当前月份为止
YTD =
VAR CurrentYear = Tab[YEAR]
VAR CurrentIndex = Tab[ind]
RETURN
SUMX(
FILTER(
Tab,
Tab[Year] = CurrentYear
&& Tab[Ind] <= CurrentIndex
),
Tab[Figures]
)
然后更改,在行级别上为Just Figures,除非i月份的月份为0
Change =
IF( Tab[Ind] = 1, 0, Tab[Figures] )
然后,您可以在具有YEAR和MON列的表中使用这些列,以获取正确的粒度级别。
如果您只需要当前选定年份的最后一个值(例如在卡中使用),则可以实施一项措施以获取最后一次更改
Last Change =
VAR LastYear =
MAX( Tab[YEAR] )
VAR LastIndex =
CALCULATE(
MAX( Tab[Ind] ),
Tab[YEAR] = LastYear
)
RETURN
CALCULATE(
VALUES( Tab[Change] ),
Tab[Year] = LastYear,
Tab[ind] = LastIndex
)