如何在 DAX 计算中隐藏未来日期?

本文翻译自国际Power BI大师Marco Russo的文章——《Hiding future dates for calculations in DAX》,该文介绍了未来日期的定义以及展示度量值时如何不显示未来日期的方法。

我们经常会用到DAX时间智能函数,如year-to-date (YTD)、year-over-year (YOY)和其他一些函数,然而,日期表中因有“未来”日期的存在会出现显示这些未来日期值的度量——这可能会令人困惑。所以我们需要考虑如何使度量值展示时不显示未来日期的值。

01 如何定义未来日期

我们先看下直接使用时间智能函数在未来日期显示不希望的值时出现的问题。
期初至今(YTD)销售额的计算方法:

Sales YTD visible :=
CALCULATE (
[Sales Amount],
DATESYTD ( 'Date'[Date] )
)

在本文使用的示例数据模型中,数据所在区间时2007年1月1日到2009年8月7日。
因此,计算中最后要显示的日期应该是2009年8月7日。
以下是目前计算的结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HW6CMD7x-1584618149992)(https://pbihub.cn/uploads/images/201906/25/125/jj556ag5ox.png)]
2009年9月至2009年12月之间的值应该是不可见的。我们的需求是在这些超出范围的“未来”月份中显示一个空白值。年同比计算(YOY)也存在类似的问题。即使该指标在当前或前一年出现缺失值时显示空白值,但2009年8月和2009年CY的金额可能也被认为是错误的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHsEnXxu-1584618149992)(https://pbihub.cn/uploads/images/201906/25/125/u2CFHZqkKl.png)]
Sales YOY %的结果取决于Sales PY,如下代码所示:

Sales YOY % =
VAR CurrentSales = [Sales Amount]
VAR PreviousSales = [Sales PY]
VAR DeltaSales = CurrentSales - PreviousSales
VAR Result =
IF (
NOT ISBLANK ( CurrentSales ),
DIVIDE ( DeltaSales, PreviousSales )
)
RETURN Result

Sales PY =
CALCULATE (
[Sales Amount],
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)

Sales PY度量通过SAMEPERIODLASTYEAR函数计算上一年同期的销售额。然而,即使2009年8月只有7天的销售Sales PY指标依然返回2008年8月的全部金额。下面的截图显示,2009年8月的Sales PY金额包含了2009年没有销售的所有在2008年相应日期有销售额的天。这也影响了CY 2009的计算,包括了截止到12月的所有月份。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALHbjkCo-1584618149992)(https://pbihub.cn/uploads/images/201906/25/125/mbLQ6r7SxY.png)]

2009年8月的正确销售额应该是128,866.59,而不是721,560.95。因此,Sales YOY %显示了一个不正确的值,因为它在内部计算中使用了Sales PY。
那么我们的目标是仅使用2008年8月的前7天的值计算Sales PY,并对日期大于2009年8月7日的数据返回空白。

02 通过计算列筛选数据

最简单和最有效的技术是创建一个计算列,该列标记小于或等于应该可见的最后一个日期的日期。
例如,在包含Sales表的模型中,可以在Date表中创建以下计算列:

DatesWithSales =
'Date'[Dat
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值