DAX 用户关系函数

DAX Userelationship function

我对 DAX 中的 Userrelationship 函数有这个问题。 我有两个表 SalesFactDimPromoSkus,如下所示:

图表视图。

数据视图中的2个table是这样的:

数据视图

这 2 个 table 链接自 SkuCampaign1SkuCampaign2SkuCampaign3 中的 SalesFact 到 DimPromoSkus 的 SkuCampaign

所以基本上 DimPromoSkus table 的目标是表明产品是在活动 C1、C2 还是 C3 中。 例如,活动 C1 发生在 2019 年 1 月 1 日至 2019 年 4 月 1 日之间,但只有 SKUS A1 和 A2 在促销活动中售出。 A2 和 A3 没有促销,但在活动 C1 期间售出。

我的目标是计算每个活动 C1、C2 和 C3 的促销销售额。当然,这可以通过查找列来完成,然后计算找到该键的销售额,但我想使用 USERELATIONSHIP 函数。

因此,要计算活动 C1 的 PromoSales,我在理论上的衡量标准应该是:

PromoSalesC1:=CALCULATE(SUM(SalesFact[Sales]);USERELATIONSHIP(SalesFact[SkuCampaign1];DimPromoSkus[SkuCampaign]))

获得的结果应该是 25,但返回给我的是 155,这是行的总和,所以实际上什么都不做 如果我使用非活动关系的 SkuCampaign2 或 SkuCampaign3,结果会一直给出 155,但 USERELATIONSHIP 应该激活它..

知道发生了什么或者我错过了什么吗? :) 谢谢

DAX 完全按照预期的方式运行。通过调用 USERELATIONSHIP 函数,您是 'activating' 关系,但您仍然需要通过切片器或在 DAX 本身中提供筛选器上下文。

使用下面的代码看看是否有帮助

PromoSalesC1 :=
CALCULATE (
    SUM ( SalesFact[Sales] ),
    USERELATIONSHIP ( SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign] ),
    DimPromoSkus[Campaign] = 'C1'
)

@StelioK 是正确的,您需要一种方法让度量将过滤上下文应用于总和。不过,您不需要明确提供一个值。您可以简单地传入 DimPromoSkus table 作为过滤器上下文。

PromoSalesC1 =
    CALCULATE(
        SUM(SalesFact[Sales]),
        DimPromoSkus,
        USERELATIONSHIP(SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign])
    )

请记住,CALCULATE 函数可以将 table 作为过滤器参数。在这里,我们提供 DimPromoSkus 作为过滤器,这样我们就不会对任何不流经指定关系的值求和。因此,例如,由于 A3 C1 不在 DimPromoSkus 中,因此 SalesFact 中的相应行不会包含在总和中。