从范围返回值的公式在DAX度量中不起作用,但在DAX列中起作用



这让我抓狂。我以前从未遇到过这种情况。

我有一个表(基于Excel,称为"度量范围"(,其中包含一系列度量及其评分范围值(下限和上限(。

度量值表

我需要创建一个度量,将度量的ID和Value传递到此表中,并返回基于范围的分数。下面的公式在表格列中运行良好,并返回Score,但由于某种原因,作为Measure,它不会返回值。当我测试并返回所有VAR时,我会返回值,所以我知道这不是那里的值,而是实际的计算,这不起作用。返回的Score为空值。

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

当计算列时,存在行上下文,并且要具有相应的筛选器上下文,需要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