无日期上下文的本月至今的同比环比 本年同比和本月同比


无日期上下文的本月至今的同比环比 本年同比和本月同比

文章插图
前面的文章曾介绍了无日期上下文的同比环比,不过数据是整月的累计,如果想计算本月至今的数据,以及相对应的上月、去年同期对比,应该怎么做呢?
其逻辑依然是不利用外部上下文,仅利用今天的日期TODAY,构造一个从本月1号到今天的日期列表,然后再执行汇总计算,度量值可以这样写:
收入 MTD =
CALCULATE(
[收入],
FILTER(
ALL('日期表'),
'日期表'[日期]>=EOMONTH(TODAY(),-1)+1
&&'日期表'[日期]<=TODAY()
)
)
这里用到了EOMONTH函数,它的用法如下:
EOMONTH是一个日期函数,返回移动指定月份后的当月的最后一天日期,比如EOMONTH("2021-3-15",-1)将返回2021年2月的最后一天日期:2021-2-28 。
EOMONTH可以返回移动后的月份的最后一天的日期,所以通过这个函数构造出EOMONTH(TODAY(),-1)+1,将返回本月第一天的日期,利用这个逻辑,顺利计算出本月至今的数据 。
同样的方式,计算上个月的本月至今,可以这样写:
收入 MTD PM =
CALCULATE(
[收入],
FILTER(
ALL('日期表'),
'日期表'[日期]>=EOMONTH(TODAY(),-2)+1
&&'日期表'[日期]<=EDATE(TODAY(),-1)
)
)
EOMONTH(TODAY(),-2)+1返回上个月的第一天,然后上个月的今日,利用了另外一个日期函数EDATE,EDATE(TODAY(),-1)返回上月的今日 。
EDATE的用法如下:
EDATE也是一个日期函数,返回移动指定月份后的对应日期,比如EDATE("2021-3-15",1)将返回"2021-4-15",如果移动后的日期在对应的月份中不存在,晚于当月最后一天,则自动返回该月的最后一天,比如EDATE("2021-3-30",-1),2月是没有30号的,则自动返回为最后一天2021-2-28 。
这里用到了两个常用的日期函数,它们功能非常容易理解,只和提供的参数有关,和其他上下文没有关系,也不需要日期表,比时间智能函数的逻辑简单多了,在某些场景下很好用 。
当然TODAY本身也是个日期函数 。
同理,可以很容易的计算出本月至今的上年同期数据:
收入 MTD PY =
CALCULATE(
[收入],
FILTER(
ALL('日期表'),
'日期表'[日期]>=EOMONTH(TODAY(),-13)+1
&&'日期表'[日期]<=EDATE(TODAY(),-12)
)
)
用矩阵显示如下:
计算上月同期数据时候,还有个小问题是,如果本月的天数比上个月少,比如2021年2月份,2月28号是最后一天,本月至今就是2月整月累计的数据,但上期是1月1号到28号的数据,如果想让1月也显示出整月的累计数,可以加个判断逻辑,这样来写本月至今的上月的度量值:
上面利用了日期函数,很方便了计算出了本月至今和环比、同比的数据,那么能不能利用时间智能函数来完成这些运算呢,也是可以的 。
下面看看利用时间智能函数的写法:
收入 MTD1 =
CALCULATE(
[收入],
DATESMTD(
TREATAS({TODAY()},'日期表'[日期]))
)
因为没有外部日期上下文,这里利用了TREATAS将TODAY视同为日期表里的日期,作为DATESMTD的上下文,这样就会返回从月初至今的日期列表,然后执行汇总计算 。
TREATAS的第一个参数必须是个表,而日期函数返回一个值,所以在外面套个大括号{ },就可以将值变成表 。
同理本月至今的上月以及上年同期,时间智能函数的写法是这样的:
收入 MTD PM1 =
CALCULATE(
[收入],


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: