【问题标题】:DAX TREATAS filtering by another table to get sales of all products on promotionDAX TREATAS 按另一个表过滤以获取所有促销产品的销售额
【发布时间】:2019-11-22 16:21:52
【问题描述】:

如何过滤所有促销产品?假设我们有两个没有物理关系的表 Sales 和 Budget。这里的模型被简化了,让我们假设是这样,我们不能创建物理关系。我们必须使用虚拟关系。

我们可以看到总结:

前两列属于 Sales 表。第三列 BudgetTreats 是一个度量:

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

现在我想解决两件事:

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

当然还有样本数据:DAX TREATS.pbix

我发布了我的问题的答案,但不是为了显示答案,而是为了显示有效的解决方案,并让您了解预期的结果。如果有任何答案或 cmets,我将不胜感激。

参考资料:

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

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    衡量计算按预算表中的 id 过滤的销售额。

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

    //not working:
    
    SalesFilteredByBudget1 =
    CALCULATE (
        [Sales],
        TREATAS ( VALUES ( Budget[id] ), Sales[id] )
    )
    

    看来我们需要一张额外的桌子。如果我们向模型添加一个包含所有销售 id 的 Bridge 表并将其连接到 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
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多