跨多个表的 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中使用多个过滤器

DAX Measure: IF 所有用户的总和 = Max THEN 单个用户的返回值

为啥dax=adx?

数据可视化之DAX篇(二十一)连接表的几个DAX函数,一次全掌握

wps表格如何跨表根据月份求金额总和?

Dax vs M(power query)表组合大表的最佳实践