Power BI非标准日历的计算思路

对于按照自然年月日来分析的业务数据,在PowerBI中可以轻松的使用时间智能函数来进行各种时间指标的计算,但如果不是按标准的日历,很多人就开始有点懵,不知道该如何计算了。

比如有的公司的业务月份是从26号到下个月的25号,如何计算本月收入和上月收入呢?

这种还比较简单,虽然不是标准的日历,其实还是很日历相关的,只是错位了几天而已,可以构建一个业务日历表,然后还是可以用时间智能函数来计算。

考虑个更加不标准的业务日历,假如某公司是按25天为一个业务周期,这种情况下,完全和自然的年月没有关系,时间智能函数无法使用,如何计算本期、上期、环比等指标呢?

这篇文章就来给你一个普遍意义上的时间指标计算思路。

以业务周期25天为例,首先根据业务的周期,在日期表中添加业务周期的字段,如下图,

添加了两个字段,其中一个是文本的期间P1、P2等,便于阅读,另外一个是数值的期数1、2……,便于排序以及不同期间的逻辑运算。

依然用这个表的日期与业务数据表的订单日期建立关系,

先写一个基础度量值:

收入 = SUM('订单表'[销售额])

下面就用度量值来计算几个常用的时间指标。

上期

收入 上期 =
VAR _period=SELECTEDVALUE('日期表'[期数])
RETURN
CALCULATE(
[收入],
FILTER(
ALL('日期表'),
'日期表'[期数]=_period-1
)
)

这个度量值的逻辑是,先利用VAR找到当前上下文的期数,然后在日期表中,找出比当前期数少一期的日期,并用这些日期筛选订单表中的对应订单日期的业务,求和即为上一期的收入。

这里用到的函数组合:

VAR+CALCULATE+FILTER+ALL

它是非常经典的DAX套路,在很多场合都会用到,即使还不理解也要先记住它,建议你重复练习直至彻底掌握。

有了上期数据,计算同比就很简单了,

同比 = DIVIDE([收入]-[收入 上年同期],[收入 上年同期])

结果如下:

同理还可以计算上年同期,不过这里假设的是25天一个业务月度周期,并没有上年的概念,不如再假设一个业务年度,仍然以12期为一年,那么上年同期就可以这么计算。

上年同期

收入 上年同期 =
VAR _period=SELECTEDVALUE('日期表'[期数])
RETURN
CALCULATE(
[收入],
FILTER(
ALL('日期表'),
'日期表'[期数]=_period-12
)
)
仔细观察就会发现,上年同期的度量值和上期的度量值非常相似,只是把 "_period-1" 替换为 "_period-12" 而已。

自然日历的计算不是同样如此吗,上月是本月之前1个月的月份,而上年同期就是本月往前推12个月的月份。

同比 = DIVIDE([收入]-[收入 上年同期],[收入 上年同期])

结果如下:

看以上几个度量值,好像没有用到日期,只用到期数,这是因为上面的计算粒度都是按"期"计算,并没有按"日"计算。

假设计算本期至今的数据,应该怎么写呢?

本期至今

收入 本期至今 =

VAR _period=SELECTEDVALUE('日期表'[期数])

VAR _date=MAX('日期表'[日期])

RETURN

CALCULATE(

[收入],

FILTER(

ALL('日期表'),

'日期表'[期数]=_period

&&'日期表'[日期]<=_date

)

)

本期至今的逻辑就是期数和当前上下文的期数相等,但小于等于当前日期的订单销售额之和。

所以用了两个变量来分别获取当前上下文的期数和日期。

结果如下:

通过上面几个时间指标的计算,你是不是已经知道非标准日期的计算逻辑了呢,其实这才是最普遍意义上的时间指标计算,就是根据业务的逻辑,按条件筛选汇总而已。

时间智能函数内部也是这样的逻辑,比如本月至今,有个时间智能函数是DATESMTD,它内部的运行逻辑依然是:

收入 本月至今 =

VAR _month=SELECTEDVALUE('日期表'[月份])

VAR _date=MAX('日期表'[日期])

RETURN

CALCULATE(

[收入],

FILTER(

ALL('日期表'),

'日期表'[月份]=_month

&&'日期表'[日期]<=_date

)

)

这个度量值和上面的本期至今,除了把 [期数] 替换为 [月份] ,其他完全一致;等于当前月份,但小于等于当前日期的数据之和不就是本月至今吗?

把常用时间维度的业务计逻辑进行封装,就形成了时间智能函数,大家平时只知道用,因为很方便,只要能计算出结果,就不去深入理解时间智能函数到底是如何工作的,这导致了实际业务中,日历稍微一变化,就不知道怎么计算了。

如果彻底理解了这些计算逻辑,并学会利用本文的DAX思路,再碰到各种奇葩日历的时间指标计算,都可以迎刃而解。

其实之前写过的按周分析的思路,同样的计算逻辑:

学会了这个思路,你也可以轻松进行周分析!


(0)

相关推荐

  • weekday返回一周中的第几天

    -01- 函数说明 weekday返回某个日期是一周中的第几天.有2个参数,语法结构如下: WEEKDAY(serial_number,[return_type]) 第1参数Serial_number ...

  • 计算指定年月的第n周有几天

    你好,我是刘卓.欢迎来到我的公号,excel函数解析.之前的文章我和你分享了year,month,day,date,today,eomonth,edate,weekday,weeknum等日期函数的用 ...

  • 简单6步,用Excel做一个动态万年历

    说到用Excel制作万年历,很多小伙们们都学得太难了. 虽然 Excel提供了各式各样的日历模板,需要时可搜索选择使用. 但是,这些模板有一个共同点,就是公式冗长复杂,难以理解,这让很多想要参考模板自 ...

  • 这么美的日历是Excel做的吗?

    下面这个日历看上去还不错吧! 但是我要告诉你是在Excel中制作的 你可能不大相信,但确实是的! 我们在[文件] - [新建] ,搜索日历,第一个便是 那个我们是否可以自己根据需要来制作一个呢?显然很 ...

  • Power BI财务报表分析:指标计算篇

    PowerBI财务报表分析系列之: 指标计算篇 财务报表分析,涉及到众多的财务指标计算,在PowerBI中利用度量值,计算出的不仅仅是一个个静态的指标数据,并且还可以和切片器配合,快速的完成不同公司. ...

  • 如何用Power BI进行工作日相关的计算?

    我们平时应该都会碰到针对工作日的分析,在Power BI中,并没有与工作日相关的函数,很多人因此就无从下手,不知道该如何计算了,那么,如何用PowerBI处理工作日的分析呢?这篇文章给你提供个思路. ...

  • 如何使用Power BI计算新客户数量?

    每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付出一定的费用支出,费用支出除以新客户数,就是新客成本,新客成本的高低也决定了 ...

  • 收藏 | Power BI计算列和度量值,一文帮你搞清楚

    对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来是度量值的DAX用在了计算列上,或者相反. 即使是已经学习了很长时间的人,对 ...

  • 手把手教你学会Power BI排名的计算

    这篇文章来自星友"特别提醒"的分享,作为一个刚学PowerBI不久的同学,尝试着用PowerBI分析一个常见的排名问题,并将操作步骤一步步呈现了出来,值得初学者借鉴哦. 手把手教你 ...

  • 如何用Power BI计算在职员工数量?

    经常碰到的一类问题是,如何根据起止日期来计算某个时间点的数量,比如: 已知合同的生效日期和到期日期,特定日期的有效合同有多少? 已知店铺的开业日期和注销日期,截至目前正在运营的店铺有多少? 已知员工的 ...

  • Power BI实践:利用DAX解决库存余额计算问题

    文/Davis PowerBI星球嘉宾,BI工程师,数据分析爱好者,微软MCSE   本文以解决在诸如高并发等场景下造成的负库存问题为例,讲解用DAX为新建字段设置检查约束的方法. 前述 年前,有人在 ...

  • Power BI帕累托分析:数值相等时累计占比计算“错误”问题

    最近有几个星友提到,做帕累托分析时,当有数据相等时,累计占比计算不正确,不知道是怎么回事,PowerBI为什么会出现这个"错误"呢?你是不是也碰到过这个问题? 这篇文章就来谈谈这是 ...

  • 认识Power BI中的非活动关系

    经常遇到星友们关于模型的问题:为什么明明已经建立了关系,但是没有筛选作用?仔细一看,原来建立的这个关系显示的是一条虚线. 这篇文章就来介绍一下,为什么有的关系线是虚线?虚线有什么作用,以及如何使用这个 ...