首页 > 解决方案 > 将未来日期的行的值更改为 0

问题描述

故事: 基本上,我试图展示本月至今与平行月的对比以及增量。

通常这只会用于当月。我能够添加未来的日期,但本月至今的值在未来的所有日子里都会重复

目标: 我希望该值为 0,而不是在整个未来日期重复最后一个值

本质上,我希望以下代码用于我的度量,但它不起作用:

_Join MTD = 
IF(
    TODAY()<Current Row date,
    0,
    TOTALMTD(SUM('Fact Table'[Join Count]),'Date Table'[Date])
)

标签: powerbidax

解决方案


措施没有“当前行”的概念。度量仅受过滤器上下文影响。起初这可能会让人感到困惑,因为表格视觉对象或矩阵视觉对象具有行标签,但这些东西正在贡献过滤器上下文。唯一可以找到行上下文的地方是向数据表或迭代器函数中添加计算列时。

您可能可以执行如下所示的操作,但如果您需要更多帮助,则需要共享数据模型的样本(表格、列、每个示例中的一些示例行、表格之间的关系)以及视觉你正在建设。

_Join MTD = 
IF(
    TODAY () < MIN ( 'Date Table'[Date] ), // here we find the smallest day in filter
                                           // context with MIN. If there is only one day
                                           // in context, well then that is the min
    0,
    TOTALMTD ( SUM ( 'Fact Table'[Join Count] ), 'Date Table'[Date] )
)

当您想要一个“当前选定的”值时,DAX 中的一个常见习惯用法是取列的MAXor MIN,尽管还有更多选择性功能,例如SELECTEDVALUE如果您想保证只有一个值在过滤器上下文中。

编辑:根据评论,目标是与昨天而不是今天进行比较。我们可以简单地采取上述措施并修改其谓词如下:

( TODAY () - 1 ) < MIN ( 'Date Table'[Date] )

算术运算符对 DAX 中的日期和时间类型执行合理的操作。有时也有用的是,该DATE函数可以优雅地处理溢出和下溢,如下例所示:

DATE ( 2018, 1, 366 )  // => 2019-01-01
DATE ( 2018, 0, 1 )    // => 2017-12-01
DATE ( 2019, 2, 31 )   // => 2019-03-03
DATE ( 2019, 3, 0 )    // => 2019-02-28

因此,如果必须,您也可以滥用此功能进行日期转换,尽管它通常是最后的手段。


推荐阅读