首页 > 解决方案 > 从范围返回值的公式在 DAX 度量中不起作用,但在 DAX 列中起作用

问题描述

这让我发疯了。我以前从未遇到过这种情况。

我有一个表(基于 Excel 的称为“指标范围”,其中包含一系列指标及其评分范围值(下限和上限)。

指标值表

我需要创建一个度量,将度量的 ID 和值传递到此表中,并根据范围返回分数。下面的公式在表格列中工作正常并返回分数,但由于某种原因作为度量,它不会返回值。当我测试并返回所有 VAR 时,我得到了返回的值,所以我知道这不是那里的值,它是实际的计算,这是行不通的。返回的分数是一个空白值。

Net Savings Year to date =
VAR MetricValue = [Savings % Annualize Goal]
VAR MetricPrgm = "4003"
VAR MetricId = 1
VAR Score =
    CALCULATE(
        VALUES( 'Metric Ranges'[Score] ),
        FILTER(
            'Metric Ranges',
            'Metric Ranges'[MetricId] = MetricId
                && 'Metric Ranges'[Program] = MetricPrgm
                && MetricValue > 'Metric Ranges'[Lower Range]
                && MetricValue <= 'Metric Ranges'[Upper Range]
        )
    )
RETURN
    MetricId

标签: exceldaxpowerbi-desktop

解决方案


在计算计算列时,存在一个行上下文,并且要具有相应的过滤器上下文,需要一个 CALCULATE 来触发上下文转换。

相反,当评估度量时,存在筛选上下文但没有行上下文。

这意味着在评估FILTER( 'Metric Ranges' ...)度量中的 时,仅Metric Ranges使用过滤器上下文中的部分。相反,在计算列中使用了整个表。为了使这段代码工作,我们必须改变它以使用过滤器上下文。这可能是一个可能的解决方案

Net Savings Year to date =
VAR MetricValue = [Savings % Annualize Goal]
VAR MetricPrgm = "4003"
VAR MetricId = 1
VAR Score =
    CALCULATE(
        SUM( 'Metric Ranges'[Score] ),
        FILTER(
            ALL( 'Metric Ranges' ),
            'Metric Ranges'[MetricId] = MetricId
                && 'Metric Ranges'[Program] = MetricPrgm
                && MetricValue > 'Metric Ranges'[Lower Range]
                && MetricValue <= 'Metric Ranges'[Upper Range]
        )
    )
RETURN
    MetricId

推荐阅读