我在DAX中的用户关系函数有这个问题。我有两张桌子SalesFact和DimPromoSkus是这样的:
图视图

数据视图中的两个表如下所示:
数据视图

这两个表从SkuCampaign1、SkuCampaign2、SalesFact中的连接到DimPromoSkus的SkuCampaign。
因此,基本上,DimPromoSkus表的目标是指示产品是在C1、C2还是C3中。例如,活动C1发生在2019/1/2019至4/1/2019天之间,但只有SKUS、A1和A2在促销上出售。A2和A3不做广告,但在竞选C1期间出售。
我的目标是计算每个活动C1、C2和C3的促销销售额。当然,这可以通过查找列来完成,然后计算找到该键的销售额,但是我想使用USERELATIONSHIP函数。
因此,要计算竞选活动的PromoSales C1,理论上我的衡量标准应该是:
PromoSalesC1:=CALCULATE(SUM(SalesFact[Sales]);USERELATIONSHIP(SalesFact[SkuCampaign1];DimPromoSkus[SkuCampaign]))得到的结果应该是25,但返回的是155,这是行的总数,所以没有真正做任何事情。如果我使用SkuCampaign2或SkuCampaign3 (非活动关系),则结果会一直给出155,但是SkuCampaign2应该激活这个关系。
你知道是怎么回事还是我错过了什么吗?:)谢谢
发布于 2019-03-15 15:28:50
@StelioK是正确的,您需要一种方法来对和应用筛选上下文。不过,您不需要显式地提供一个值。您只需将DimPromoSkus表作为过滤器上下文传递即可。
PromoSalesC1 =
CALCULATE(
SUM(SalesFact[Sales]),
DimPromoSkus,
USERELATIONSHIP(SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign])
)请记住,CALCULATE函数可以将表作为筛选器参数。在这里,我们提供DimPromoSkus作为筛选器,这样我们就不会对没有通过指定关系的任何值进行求和。因此,例如,由于A3 C1不在DimPromoSkus中,所以SalesFact中的相应行没有包含在和中。
发布于 2019-03-15 15:02:52
DAX正在做它想要做的事情。通过调用USERELATIONSHIP函数,您将“激活”该关系,但仍然需要通过切片程序或DAX本身提供过滤器上下文。
使用下面的代码,看看它是否有帮助
PromoSalesC1 :=
CALCULATE (
SUM ( SalesFact[Sales] ),
USERELATIONSHIP ( SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign] ),
DimPromoSkus[Campaign] = 'C1'
)https://stackoverflow.com/questions/55181262
复制相似问题