DAX TREATAS通过另一个表进行过滤,以促销所有产品

时间:2019-11-22 16:21:52

标签: powerbi dax

如何过滤促销中的所有产品?假设我们有两个表Sales和Budget没有物理关系。在这里,模型得到了简化,并假设是这种情况,我们无法创建物理关系。我们必须使用虚拟关系。

model

我们可以看到摘要:

summary

前两列是Sales表的。第三栏BudgetTreats是衡量标准:

BudgetTreatas =
CALCULATE (
    SUM ( Budget[amount] ),
    TREATAS (
        VALUES ( Sales[id] ),
        Budget[id]
    )
)

现在我想解决两件事:

  1. 如何制作切片器以仅过滤出具有BudgetTreatas的产品(id)?
  2. 如何创建一种用于计算销售量但仅针对具有预算的产品的量度?类似于上面介绍的BudgetTreatas的度量。

当然还有示例数据: DAX TREATS.pbix

我发布了我问题的答案,但这不是显示答案,而是显示可行的解决方案,并为您提供预期结果的想法。如果有任何答案或意见,我将不胜感激。

参考:

The Logic behind the Magic of DAX Cross Table Filtering

Virtual Filters Using TREATAS

How To Use The TREATAS Function - Power BI & DAX

Creating Virtual Relationships Using TREATAS - Advanced Power BI Technique

1 个答案:

答案 0 :(得分:0)

衡量通过预算表中的ID过滤的销售量。

令人惊讶的是,这不起作用:

//not working:

SalesFilteredByBudget1 =
CALCULATE (
    [Sales],
    TREATAS ( VALUES ( Budget[id] ), Sales[id] )
)

似乎我们需要一个额外的表。如果我们将具有所有销售ID的桥表添加到模型中,然后将其连接到ID上的Sales表(而不将其连接到Budget表!),则可以解决此问题。

//works:

SalesFilteredByBudget2 =
CALCULATE (
    [Sales],
    TREATAS ( VALUES ( Budget[id] ), Bridge[id] )
)

因此,似乎过滤器从TREATAS( VALUES中使用的表传播到通过物理关系连接的表。

如果要在没有Bridge表的情况下进行度量,可以将额外的表作为表变量。

// works:
SalesFilteredByBudget3 =
VAR Lineage =
    TREATAS ( VALUES ( Budget[id] ), Sales[id] )
VAR tbl =
    CALCULATETABLE ( Sales, KEEPFILTERS ( Lineage ) )
VAR result =
    CALCULATE ( SUMX ( tbl, [amount] ) )
RETURN
    result