需求:假设今天是2024年3月10日,需要统计以下数据
1,本年累计年数据,统计2024年1月1日至2024年3月3日的数据
2,本月累计月数据,统计2024年3月1日至2024年3月3日的数据
3,上年同期累计年数据,统计2023年1月1日至2024年3月3日的数据
4,上年同期累计月数据,统计2023年1月1日至2024年3月3日的数据
解决:主要的思路的通过变量获取月份,再利用CALCULATE函数进行条件筛选
度量值写法
本年累计年数据
总学费_本年累计 =
VAR _today=TODAY()
VAR PreviousYearEnd = _today-1
VAR PreviousYearStart = DATE(YEAR(PreviousYearEnd), 1, 1)
RETURN
CALCULATE (
[总学费],
FILTER (
ALL('日期表'),
'日期表'[Date] >= PreviousYearStart && '日期表'[Date] <= PreviousYearEnd
))
和下方使用DATESYTD或者TOTALMTD时间智能函数的区别是DATESYTD函数会返回2024年1月1日至2024年12月31日的数据,而不是2024年1月1日至当日(TODAY)的数据
总学费_本月累计_dateamtd =
CALCULATE ([总学费],DATESMTD('日期表'[Date]))
总学费_本月累计_totalmtd = TOTALMTD([总学费],'日期表'[Date])
结果如图
本月累计月数据
科室预算目标收入_本月累计_当日累加 =
CALCULATE ([科室预算目标收入],DATESMTD('日期表'[Date]))
//科室预算目标收入_本月累计_totalmtd = TOTALMTD([科室预算目标收入],'日期表'[Date])
科室预算目标收入_本月整月_按日分开合计汇总 =
VAR _today=TODAY()
VAR PreviousYearEnd = _today-1
RETURN
CALCULATE(
[科室预算目标收入],
'日期表'[年度]=YEAR(PreviousYearEnd)&&
'日期表'[月份]=MONTH(PreviousYearEnd))
科室预算目标收入_本月整月_按日按月均汇总 =
VAR _today=TODAY()
VAR PreviousYearEnd = _today-1
VAR PreviousYearStart = DATE(YEAR(PreviousYearEnd), MONTH(PreviousYearEnd), 1)
RETURN
CALCULATE (
[科室预算目标收入],
FILTER (
ALL('日期表'),
'日期表'[Date] >= PreviousYearStart && '日期表'[Date] <= PreviousYearEnd
))
三者的区别:
上年同期累计年数据
首先需要统计出当年累计共有多少天,这里新建一个年天数的度量值
年天数 =
DATEDIFF(
DATE(YEAR(TODAY()), 1, 1), // 当年的第一天
DATE(YEAR(TODAY()) + 1, 1, 1), // 下一年的第一天
DAY)-1
再按照同年的数据为当前日期减去“年天数”就可以得到的逻辑进行下一步度量值的写法
总学费_上年同期 =
CALCULATE (
[总学费],
SAMEPERIODLASTYEAR('日期表'[Date])
)
//CALCULATE ([总学费],DATEADD('日期表'[Date], -1, YEAR))
总学费_上年同期累计 =
VAR _today=TODAY()
VAR PreviousYearEnd = _today-[年天数]-1
VAR PreviousYearStart = DATE(YEAR(PreviousYearEnd), 1, 1)
RETURN
CALCULATE (
[总学费],
FILTER (
ALL('日期表'),
'日期表'[Date] >= PreviousYearStart && '日期表'[Date] <= PreviousYearEnd
))
上年同期累计月
总学费_上年同期月累计 =
VAR _today=TODAY()
VAR PreviousYearEnd = _today-[年天数]-1
VAR PreviousYearStart = DATE(YEAR(PreviousYearEnd),MONTH(PreviousYearEnd), 1)
RETURN
CALCULATE (
[总学费],
FILTER (
ALL('日期表'),
'日期表'[Date] >= PreviousYearStart && '日期表'[Date] <= PreviousYearEnd
))
//CALCULATE ([总学费],SAMEPERIODLASTYEAR(DATESMTD('日期表'[Date])))
这种写法的好处在于不用考虑当年是闰年或者是平年,因为直接把一年有多少天使用年天数度量值定义好了。
联系客服