DAX用户关联功能

时间:2019-03-15 11:08:53

标签: powerbi relationship dax powerpivot

我在DAX中存在Userelationship功能的问题。 我有两个这样的表 SalesFact DimPromoSkus

图视图。

Diagram View

“数据视图”中的2个表如下:

数据视图

Data View

这两个表从 SalesFact 中的 SkuCampaign1 SkuCampaign2 SkuCampaign3 链接到来自DimPromoSkus的SkuCampaign

因此,DimPromoSkus表的基本目的是指示产品是在广告系列C1,C2还是C3中。 例如,广告系列C1在2019年1月1日至2019年1月4日之间发生,但只有SKUS A1和A2在促销中出售。 A2和A3不在促销中,但在广告系列C1期间出售。

我的目标是计算每个广告系列C1,C2和C3的促销销售额。当然,这可以使用lookupcolumn来完成,然后计算要在其中找到该键的Sales,但是我想使用 USERELATIONSHIP 函数。

因此,要计算广告系列C1的PromoSales,我在理论上的度量应为:

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

获得的结果应为25,但返回155,这是行的总和,因此实际上没有做任何事情 如果我使用处于非活动关系的SkuCampaign2或SkuCampaign3,但结果仍然给出155,但 USERELATIONSHIP 应该激活它。.

对正在发生的事情有任何想法,还是我错过了什么? :) 谢谢

2 个答案:

答案 0 :(得分:1)

DAX完全按照预期的方式运行。通过调用USERELATIONSHIP函数,您正在“激活”关系,但是您仍然需要通过切片器或DAX本身提供过滤器上下文。

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

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

答案 1 :(得分:1)

@StelioK是正确的,您需要一种方法来将过滤器上下文应用于和。您无需显式提供值。您可以简单地传入DimPromoSkus表作为过滤器上下文。

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

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