DAX代码从计算列更改为度量

时间:2019-03-26 14:37:54

标签: dax calculated-columns measure

我有一个事实表,其中包含结算日期,product_id,service_id,location_id,ticket_id和srv_adjusted_earning列。

我已确定DAX查询生成一个计算列,该列将对以下日期范围内的srv_adjusted_earning列求和:结算日期和结算日期-27天(即4周窗口)为:

=CALCULATE(
    SUM(factService[SRV_ADJUSTED_EARNING]),
    DATESBETWEEN
    (
        factService[SETTLEMENT_DATE],
        DATEADD(factService[SETTLEMENT_DATE], -27, DAY), 
        factService[SETTLEMENT_DATE]
    ),
    FILTER(factService, factService[PRO_ID] = EARLIER(factService[PRO_ID])),
    FILTER(factService, factService[SER_ID] = EARLIER(factService[SER_ID])),
    FILTER(factService, factService[LOC_ID_SELLING] = 
        EARLIER(factService[LOC_ID_SELLING])),
    FILTER(factService, factService[TIS_ID] = EARLIER(factService[TIS_ID]))
)

我正在尝试将此DAX计算列转换为度量,并且尝试了以下操作:

blob:=CALCULATE
(
    SUM(factService[SRV_ADJUSTED_EARNING]),
    DATESBETWEEN
    (
        factService[SETTLEMENT_DATE], 
        DATEADD(factService[SETTLEMENT_DATE], -27, DAY), 
        factService[SETTLEMENT_DATE]
    ),
    ALLEXCEPT(factService, factService[PRO_ID]),
    ALLEXCEPT(factService, factService[SER_ID]),
    ALLEXCEPT(factService, factService[LOC_ID_SELLING]),
    ALLEXCEPT(factService, factService[TIS_ID])
)

但是我得到: 错误:度量'factService'中的计算错误[blob]:无法确定表'factService'中列'SETTLEMENT_DATE'的单个值。当度量公式引用包含许多值但未指定诸如最小值,最大值,计数或总和之类的聚合的列时,就会发生这种情况。

有人知道我该如何解决吗?

1 个答案:

答案 0 :(得分:0)

正如错误所提到的,问题出在factService[SETTLEMENT_DATE]上。在度量中,没有行上下文,因此它知道您在说哪个日期,因此您需要以某种方式指定它。我建议按照以下方式使用变量:

blob :=
VAR SettleDate = MAX ( factService[SETTLEMENT_DATE] )
RETURN
    CALCULATE (
        SUM ( factService[SRV_ADJUSTED_EARNING] ),
        DATESBETWEEN (
            factService[SETTLEMENT_DATE],
            SettleDate - 27,
            SettleDate
        ),
        ALLEXCEPT (
            factService,
            factService[PRO_ID],
            factService[SER_ID],
            factService[LOC_ID_SELLING],
            factService[TIS_ID]
        )
    )

此处,变量选择当前过滤器上下文中的最大结算日期。如果这不是您真正需要的,请相应地调整定义。