【问题标题】:Calculate value if outside time range如果超出时间范围,则计算值
【发布时间】:2018-10-16 15:33:27
【问题描述】:

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

下面是包含项目开始和结束日期的维度表的简单关系。还有一个包含时间登记的事实表。

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

我尝试了类似的东西

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

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

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

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

    计算列:

    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。

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

    希望有帮助!

    一月

    【讨论】:

    • 像魅力一样工作。非常感谢你的帮助。我采取了措施:)
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多