Powerbi 具有不同粒度的两列的DAX条件和

Powerbi 具有不同粒度的两列的DAX条件和,powerbi,dax,Powerbi,Dax,这是所问问题的后续问题。但是,这一次,两个列具有不同的粒度,并且位于不同的表中。因此,前面提出的简单SUMX解决方案不适用。我附上文件 如何构造返回BudgetProduct(如果可能)或BudgetBrand之和的DAX度量。逻辑是,如果产品为空,则取品牌。因此,预期结果如下所示: +---------+-------------+---------------+-----------------+ | Manager | BudgetBrand | BudgetProduct | Expec

这是所问问题的后续问题。但是,这一次,两个列具有不同的粒度,并且位于不同的表中。因此,前面提出的简单
SUMX
解决方案不适用。我附上文件

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

+---------+-------------+---------------+-----------------+
| Manager | BudgetBrand | BudgetProduct | Expected result |
+---------+-------------+---------------+-----------------+
| Alice   |          16 |            15 |              15 |
| John    |           7 |               |               7 |
| Martha  |          21 |            21 |              21 |
| Zadar   |          11 |               |              11 |
+---------+-------------+---------------+-----------------+
| Total   |          55 |            36 |              54 |
+---------+-------------+---------------+-----------------+
在本例中,所有经理都对品牌定义了预算,但一些经理(Alice和Martha)对产品定义了预算。如果可能,如何构建一个将采用产品定义的预算的措施,如果不可能,则将采用品牌定义的预算


我认为这会奏效:

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
BudgetProduct
上的筛选上下文。将这些总和存储为变量有助于更可读的
IF
行,并且只需计算一次而不是两次requires
SumProduct

谢谢:-)因此,我认为规则是首先构建一个表,然后按照您在初始问题中建议的方法进行。但是,如果我想保留对乘积(或任何其他维度)使用切片器的选项,那么我应该为SUMX的第一个参数构建所有这些维度的笛卡尔乘积。如果是这样的话,这样的笛卡尔积如何应用于您的两种方法?我的意思是
交叉连接(价值观(独特的管理者[管理者]),价值观(独特的品牌[品牌]),价值观(独特的产品[产品])
我认为你不需要这样做。由于我们尚未删除任何具有
ALL()
类型函数的筛选器上下文,因此这些上下文仍应遵循切片器的任何筛选。请为产品添加切片器,并仅选择Apple。我只希望Alice和Martha有结果,因为只有他们有产品预算,只有他们有苹果。相反,它将Alice和Martha缩小为苹果公司,但也会为其他经理返回总预算。当你还没有选择产品时,为什么你希望看到Jonn和Zadar?似乎你希望在使用切片机时应用不同的逻辑。相反,当我在切片机中选择苹果时,我希望John或Zadar什么也看不到。但该指标计算出约翰或扎达尔的品牌总数。无论你选择什么产品,约翰和扎达尔都会分别得到7分和11分。