DAX Userelationship 函数

4

我在DAX中使用Userelationship函数时遇到了问题。我有两个表SalesFactDimPromoSkus,如下所示:

图表视图。

Diagram View

Data View包含2个表:

Data View

Data View

这两个表通过SalesFact中的SkuCampaign1SkuCampaign2SkuCampaign3与DimPromoSkus中的SkuCampaign相关联。

因此,DimPromoSkus表的目标是指示产品是否参加了C1、C2或C3活动。例如,C1活动发生在2019年1月1日至2019年4月1日之间,但只有A1和A2在促销期间出售。A2和A3虽然在C1期间销售,但未参加促销活动。

我的目标是计算每个C1、C2和C3活动的促销销售额。当然,可以使用lookupcolumn进行计算,并计算找到该键的销售额,但我想使用USERELATIONSHIP函数。

因此,在理论上,对于C1活动的促销销售额,我的措施应该是:

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

获得的结果应该是25,但返回的是155,这是行的总和,实际上并没有做什么 如果我使用SkuCampaign2或SkuCampaign3,则结果仍为155,这些关系是不活动的,但是USERELATIONSHIP应该激活它.. 有什么想法或者我错过了什么吗? :) 谢谢
2个回答

1
使用USERELATIONSHIP函数可以激活关系,但仍需要通过切片器或DAX本身提供筛选上下文。以下代码可能有所帮助。
PromoSalesC1 :=
CALCULATE (
    SUM ( SalesFact[Sales] ),
    USERELATIONSHIP ( SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign] ),
    DimPromoSkus[Campaign] = 'C1'
)

1
@StelioK是正确的,你需要一种方法让度量值应用筛选上下文到总和中。但是你不需要显式提供一个值,只需将DimPromoSkus表作为筛选上下文传递即可。
PromoSalesC1 =
    CALCULATE(
        SUM(SalesFact[Sales]),
        DimPromoSkus,
        USERELATIONSHIP(SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign])
    )

请记住CALCULATE函数可以将表格作为筛选参数。在这里,我们提供DimPromoSkus作为筛选器,以便不对未通过指定关系的任何值求和。例如,由于A3 C1不在DimPromoSkus中,因此SalesFact中相应的行不会被包含在总和中。


有趣!谢谢Alexis!这些会产生相同的结果吗? - StelioK
1
在这种情况下,我认为是这样的,但对于更一般的场景,例如与Campaign1相关联的多个代码(例如C10C11C12),您不能仅指定一个并获得相同的结果。 - Alexis Olson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接