我在DAX中存在Userelationship功能的问题。 我有两个这样的表 SalesFact 和 DimPromoSkus :
图视图。
“数据视图”中的2个表如下:
数据视图
这两个表从 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 应该激活它。.
对正在发生的事情有任何想法,还是我错过了什么? :) 谢谢
答案 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
中的对应行不会包含在总和中。