粒度不同的两列的DAX条件求和

时间:2019-08-29 15:51:45

标签: powerbi dax

这是被问到的here的跟进问题。但是,这次两列具有不同的粒度,并且位于不同的表中。因此,先前提出的简单SUMX解决方案不适用。我附加了SumDifferntGranularity.pbix文件。

如何构造DAX度量,该度量将返回BudgetProduct(如果可能)或BudgetBrand的总和。如果产品为空,则逻辑为品牌。因此预期结果如下:

+---------+-------------+---------------+-----------------+
| Manager | BudgetBrand | BudgetProduct | Expected result |
+---------+-------------+---------------+-----------------+
| Alice   |          16 |            15 |              15 |
| John    |           7 |               |               7 |
| Martha  |          21 |            21 |              21 |
| Zadar   |          11 |               |              11 |
+---------+-------------+---------------+-----------------+
| Total   |          55 |            36 |              54 |
+---------+-------------+---------------+-----------------+

在此示例中,所有经理均在“品牌”上定义了预算,但某些经理(爱丽丝和玛莎)在“产品”上定义了预算。如果可能的话,如何构建一种方法来采用预算中的产品预算,但是如果不可能的话,则如何采用品牌中所定义的预算。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

我认为这会起作用:

Expected Result =
VAR Summary =
    SUMMARIZE (
        Unique_Manager,
        Unique_Manager[Manager],
        "Budget_Brand", SUM ( Budget_Brand[BudgetBrand] ),
        "Budget_Product", SUM ( Budget_Product[BudgetProduct] )
    )
RETURN
    SUMX (
        Summary,
        IF ( ISBLANK ( [Budget_Product] ), [Budget_Brand], [Budget_Product] )
    )

这将Manager分组,并计算一个汇总表,其中每个汇总为BudgetBrandBudgetProduct,并使用指定的逻辑通过SUMX遍历此汇总表


这里的实现方式更简洁

Expected Result =
SUMX (
    VALUES ( Unique_Manager[Manager] ),
    VAR SumBrand = CALCULATE ( SUM ( Budget_Brand[BudgetBrand] ) )
    VAR SumProduct = CALCULATE ( SUM ( Budget_Product[BudgetProduct] ) )
    RETURN
        IF ( ISBLANK ( SumProduct ), SumBrand, SumProduct )
)

我这是一个,我们不需要计算表即可进行迭代。相反,我们遍历了本地过滤器上下文中Manager的所有不同值,并在该上下文中求和BudgetBrandBudgetProduct。请注意,我将总和包装在CALCULATE中。这样做是为了执行从SUMX内部的行上下文(特定的Manager)到将Manager作为BudgetBrand和{{1}上的筛选器上下文的上下文转换}。将这些总和存储为变量将使BudgetProduct行更具可读性,并且只计算IF一次,而不是两次。