这是被问到的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 |
+---------+-------------+---------------+-----------------+
在此示例中,所有经理均在“品牌”上定义了预算,但某些经理(爱丽丝和玛莎)在“产品”上定义了预算。如果可能的话,如何构建一种方法来采用预算中的产品预算,但是如果不可能的话,则如何采用品牌中所定义的预算。
答案 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
分组,并计算一个汇总表,其中每个汇总为BudgetBrand
和BudgetProduct
,并使用指定的逻辑通过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
的所有不同值,并在该上下文中求和BudgetBrand
和BudgetProduct
。请注意,我将总和包装在CALCULATE
中。这样做是为了执行从SUMX
内部的行上下文(特定的Manager
)到将Manager
作为BudgetBrand
和{{1}上的筛选器上下文的上下文转换}。将这些总和存储为变量将使BudgetProduct
行更具可读性,并且只计算IF
一次,而不是两次。