经常有朋友问在 Power Pivot 中是否有类似 Excel 中的 DATEDIF 函数,用来计算 2 个日期之间的间隔。如果你用的是 Excel 2016 或 Office 365,或 Power BI Desktop, 那么 DAX 中提供了新的 DATEDIFF 函数可以实现。如果你用的是 Excel 2013,还没有这个 DAX 函数,就需要用其它组合函数来实现。

    我们先来看一下 Excel 中 DATEDIF 的用法:

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图1

    通过函数 \=DATEDIF(A2,B2,”Y”) 得到两个日期之间的年的间隔。如果把第三个参数 “Y” 换成 “M” 或 “D”, 则分别对应月和日。

    将数据导入到 Power Pivot 中,输入 DATEDIFF(注意,是 DATEDIFF, Excel 中是 DATEDIF,差了一个__F),DATEDIFF 需要 3 个参数,日期 1,日期 2,和间隔单位。

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图2

    \=DATEDIFF(‘测试’[开始日期],’测试’[结束日期],YEAR)

    最终计算结果如下:

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图3

    同理,如果我们把 DATEDIFF 的第三个参数改成 Month 和 Day,则可以获取 2 个日期之间间隔的月份数和天数。还可以得到季度、小时、分钟、秒数等。

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图4

    使用 DATEDIFF 可以方便地计算日期时间间隔,但有一点需要注意,大家看下图中红圈的内容。Excel 里的 DATEDIF 和 DAX 里的 DATEDIFF 计算结果不一致:

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图5

    当开始日期是 6/30/2016,结束日期是 6/29/2017 时,Excel 中 DATEDIF(A2,B2,”Y”) 公式的计算结果严格按照日期计算,没有到一年就算 0,而 DAX 中 DATEDIFF(‘测试’[开始日期],’测试’[结束日期],YEAR) 的计算则是按照两个日期所处的年份来计算,2017-2016=1 年 。

    所以如果你在 Power Pivot 中不想要这样的计算方法,比如计算年龄的时候,想实现 Excel 中 DATEDIF 的计算方法,则可以使用下面的公式:

    \=YEARFRAC(‘测试’[开始日期],’测试’[结束日期])

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图6

    然后通过 ROUNDDOWN 向下取整实现 Excel 中 DATEDIF 整年的计算:

    \=ROUNDDOWN(YEARFRAC(‘测试’[开始日期],’测试’[结束日期]),0)

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图7

    同理,如果我们用向上取整函数 ROUNDUP 则可以实现和 DAX 中 DATEDIFF 一样的计算结果。而这个函数组合也可以在 Excel2013 中使用,也就是没有 DATEDIFF 的情况下实现间隔年的计算。

    【间隔月份的计算】

    间隔月份也是工作中比较常见的计算,下面我们同样拿 Excel 中的公式:

    \=DATEDIF(A2,B2,”M”)

    和 Power Pivot 中的公式

    \=DATEDIFF(‘测试’[开始日期],’测试’[结束日期],MONTH)

    来进行对比

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图8

    我们看到两个计算结果依然存在差异,Excel 中的 DATEDIF 当日期没有满一个月的时候不计算,而 Power Pivot 中计算(参考上图第一行数据)。

    我们尝试用其它函数组合实现该计算(Excel2013 的 Power Pivot 也可用):

    \=(YEAR(‘测试’[结束日期])-YEAR(‘测试’[开始日期]))*12+MONTH(‘测试’[结束日期])-MONTH(‘测试’[开始日期])

    该计算的意思是先用两个日期间隔的年份数乘以 12 个月,然后加上[结束日期]中的月份数减去[开始日期]中的月份数,结果和 DATEDIFF-DAX 一样,忽略日期,直接用月份相减。

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图9

    我们还是关注第一行数据,如果开始日期是 6/30/2016,结束日期是 6/29/2017,还差 1 天才满 12 个月,如果我们希望只计算间隔的整月,也就是计算结果为 11,可以对公式进一步调整:

    \=IF(DAY(‘测试’[结束日期])>=DAY(‘测试’[开始日期]),0,-1)+(YEAR(‘测试’[结束日期])-YEAR(‘测试’[开始日期]))*12+MONTH(‘测试’[结束日期])-MONTH(‘测试’[开始日期])

    通过判断 2 个日期之间日的区别,来决定是否计算:如果结束日期的日大于等于开始日期的日,则直接计算即可,否则在计算结果上 - 1,实现间隔整月的计算。

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图10

    这个计算方法,不管是在 Excel2013 还是 2016 的 Power Pivot 中都可以使用。

    【间隔日,小时、分钟、秒的计算】

    剩下的间隔日、小时、分、秒就比较简单了。可以直接用 DATEDIFF 来实现

    间隔日 = DATEDIFF(‘测试’[开始日期],’测试’[结束日期],DAY)

    间隔小时 = DATEDIFF(‘测试’[开始日期],’测试’[结束日期],HOUR)

    间隔分钟 = DATEDIFF(‘测试’[开始日期],’测试’[结束日期],MINUTE)

    间隔秒 = DATEDIFF(‘测试’[开始日期],’测试’[结束日期],SECOND)

    在 Excel2013 Power Pivot 中也可以直接用日期相减:

    间隔日 =’测试’[结束日期]-‘测试’[开始日期]

    间隔小时 = 24*(‘测试’[结束日期]-‘测试’[开始日期])

    间隔分钟 = 2460(‘测试’[结束日期]-‘测试’[开始日期])

    间隔秒 = 246060*(‘测试’[结束日期]-‘测试’[开始日期])

    这就是我们今天的分享内容,更多 Power Pivot DAX 函数的用法请参考我们的视频课程 -Excel Power Pivot 数据建模分析(基础篇)。

    网易学习节最后一天

    点击 “阅读原文”

    购买系列课程可享 6 折优惠

    *PowerPivot 工坊原创文章,欢迎转载,请注明出处


    延伸阅读:

    使用 USERELATIONSHIP 实现两表之间多个关系的调用

    在 Power Pivot 中计算父行汇总百分比

    图解 Earlier 函数

    使用切片器实现报告的参数控制

    Power Pivot 时间智能之 YTD(年初至今累计)

    一张图看懂微软 Power BI 系列组件


    如果您想深入学习微软 Power BI,欢迎登录网易云课堂试听学习我们的 “从 Excel 到 Power BI 数据分析可视化”系列课程。点击左下角 “阅读原文” 可直达云课堂。或者关注我们的公众号(PowerPivot 工坊)后猛戳”在线学习”

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图11


    长按下方二维码关注 “Power Pivot 工坊” 获取更多微软 Power BI、Power Pivot 相关文章、资讯。欢迎小伙伴儿们转发分享~

    在Power Pivot中用DATEDIFF函数计算两个日期之间的间隔 - 图12
    https://mp.weixin.qq.com/s?__biz=MzI4NTEzNzQ2NQ==&mid=2650501074&idx=1&sn=e313e37f6dc2c8e55598fd22ce6f93ef&chksm=f3ff0084c48889925ef78a18db13f5fd900da2f73e3acdb8fd13988b3d01da511d3b51ca9ed9&scene=21#wechat_redirect