跨多个表的 DAX 乘法总和 (sumproduct)
Posted
技术标签:
【中文标题】跨多个表的 DAX 乘法总和 (sumproduct)【英文标题】:DAX sum of multiplication (sumproduct) across multiple tables 【发布时间】:2020-02-07 20:20:28 【问题描述】:我正在努力解决我认为非常愚蠢的问题。
我正在尝试从任意日期选择中获取“MTD 目标”值。我有一个表'out',它有许多维度+日期,还有一个目标表,它每天给我一个恒定的目标值,每个月。我的目标是获取每个月选择的天数,并将其乘以相关月份的相应每日目标。
例如,第 1 个月的每日目标是 2,第 2 个月的每日目标是 4。我第 1 个月有 4 天,第 2 个月有 3 天。我的累积目标应该是 2*4+3*2 = 14。
我可以这样做一个月没问题。但是,一旦我选择了一个跨越 2 个月或更长时间的日期范围,一切都会变得糟糕。
表“出”具有日期、国家和其他维度。 表“目标”具有年、月和国家/地区维度。
我正在尝试进行一些类似于 SUM(month_country * selected_days) 的连接和乘法
以下是我尝试过的 DAX 措施:
mtd_inv_tgt :=
CALCULATE (
SUM ( targets[daily_spend] ),
FILTER (
targets,
targets[market] = FIRSTNONBLANK ( out[co_market], "" )
&& targets[yyyymm] >= MIN ( out[yyyymm] )
&& targets[yyyymm] <= MAX ( out[yyyymm] )
)
)
* DISTINCTCOUNT ( out[date] )
mtd_inv_tgt :=
SUMX (
FILTER (
targets,
targets[market] = FIRSTNONBLANK ( out[co_market], "" )
&& targets[yyyymm] >= MIN ( out[yyyymm] )
&& targets[yyyymm] <= MAX ( out[yyyymm] )
),
targets[daily_spend] * DISTINCTCOUNT ( out[date] )
)
如果所选日期属于一个月,则此方法可以正常工作。如果我选择 2 个月,它将添加 2 个月的每日支出,然后将其乘以 2 个月的日期数。就像上面的例子一样,它会是 (2+3)*(4+2) = 30,这显然是错误的。
需要注意的是,我不能在“出”表上使用 SUMX,因为每个日期+国家/地区有很多记录,而目标是每个月+国家/地区的单个条目。
【问题讨论】:
【参考方案1】:我认为类似的东西应该可以工作:
mtd_inv_tgt :=
SUMX (
VALUES ( out[date] ),
LOOKUPVALUE (
targets[daily_spend],
targets[yyyymm], SELECTEDVALUE ( out[yyymm] )
)
)
这会迭代当前过滤器上下文中的每个不同的out[date]
值,并通过匹配yyymm
来查找每个日期的daily_spend
。
仅迭代 yyymm
可能更有效:
mtd_inv_tgt :=
SUMX (
VALUES ( out[yyymm] ),
DISTINCTCOUNT ( out[date] )
* LOOKUPVALUE (
targets[daily_spend],
targets[yyyymm], EARLIER ( out[yyymm] )
)
)
注意:如果这些不能按预期工作,请提供示例数据以进行检查,因为我没有实际测试过这些。
【讨论】:
以上是关于跨多个表的 DAX 乘法总和 (sumproduct)的主要内容,如果未能解决你的问题,请参考以下文章
DAX Measure: IF 所有用户的总和 = Max THEN 单个用户的返回值