如果在外部时间范围内计算值

时间:2018-05-06 19:44:55

标签: powerbi dax

我有一个问题,我需要弄清楚项目是否有超出其开始和结束日期范围的值。

下面是维度表的简单关系,其中包含项目的开始和结束日期。以及包含时间注册的事实表。

enter image description here

下表中有一列'外部日期范围'我希望有一个真/假的价值。例如,如果Main2表包含2018年5月13日星期一的日期。该列应显示为false。

enter image description here

我试过像

这样的东西

Outside Date Range = CALCULATE(SUM(Main2[Value]), FILTER(Main2, Main2[Time] < LOOKUPVALUE(Main[Start], Main[Project], ALL(Main2[Project]))))

但不确定如何恰当地处理两个表之间的关系。

1 个答案:

答案 0 :(得分:2)

我建议的两种方法是计算列或度量。

计算栏:

Outside Date Range =
VAR rowsOutsideRange =
    CALCULATE (
        COUNTROWS ( Main2 ),
        FILTER (
            RELATEDTABLE ( Main2 ),
            Main2[Time] < Main[Start]
                || Main2[Time] > Main[Finish]
        )
    )
RETURN
    IF ( rowsOutsideRange > 0, TRUE (), FALSE () )

你的解决方案非常接近!由于您在两个表RELATEDTABLE之间存在关系,因此只返回相关的行,从而消除了LOOKUPVALUE()的必要性。此外,计算行是足够的,因为我们只想知道是否有任何行存在于范围之外,而不是多少行。

您还可以创建一个度量:

Outside Date Range Measure :=
VAR rowsOutsideRange =
    CALCULATE (
        COUNTROWS ( Main2 ),
        FILTER (
            Main2,
            Main2[Time] < MIN ( Main[Start] )
                || Main2[Time] > MAX ( Main[Finish] )
        )
    )
RETURN
    IF ( rowsOutsideRange > 0, TRUE (), FALSE () )

这与计算列非常相似,唯一的是我们需要聚合开始日期和结束日期。就其自身而言,这个衡量标准没有任何价值,需要通过项目进行切片才能正确。如果您真的想要,可以使用SUMX()类型的构造来创建一个整体的TRUE / FALSE语句,告诉您是否有任何项目的行超出其范围但是对于您的用例我不会看到它的好处。

计算列和度量之间的选择取决于代码的可读性和资源使用情况。计算的度量使用更多内存,度量使用更多CPU。

看看你的情况,我会选择一个计算列,这似乎是最简单明了的解决方案。

希望有所帮助!