DAX 用户关系函数
DAX Userelationship function
我对 DAX 中的 Userrelationship 函数有这个问题。
我有两个表 SalesFact 和 DimPromoSkus,如下所示:
图表视图。
数据视图中的2个table是这样的:
数据视图
这 2 个 table 链接自 SkuCampaign1、SkuCampaign2、SkuCampaign3 中的 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
中的相应行不会包含在总和中。
我对 DAX 中的 Userrelationship 函数有这个问题。 我有两个表 SalesFact 和 DimPromoSkus,如下所示:
图表视图。
数据视图中的2个table是这样的:
数据视图
这 2 个 table 链接自 SkuCampaign1、SkuCampaign2、SkuCampaign3 中的 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
中的相应行不会包含在总和中。