Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 如何在Dax中对M2M表进行筛选_Powerbi_Dax_Ssas Tabular - Fatal编程技术网

Powerbi 如何在Dax中对M2M表进行筛选

Powerbi 如何在Dax中对M2M表进行筛选,powerbi,dax,ssas-tabular,Powerbi,Dax,Ssas Tabular,我试图筛选与事实表有M2M关系的表。这种关系如下所示 事实-->客户市场 双向筛选在与桥接表的两个关系中都处于启用状态。我只想返回某个市场。以下是查询的外观: EVALUATE FILTER ( SUMMARIZE ( Fact, 'Market'[Market Name], "Sales", [Sum of Sales] ), 'Market'[Market Name] = "My Market Name" ) 这会产生

我试图筛选与事实表有M2M关系的表。这种关系如下所示

事实-->客户市场

双向筛选在与桥接表的两个关系中都处于启用状态。我只想返回某个市场。以下是查询的外观:

EVALUATE
FILTER (
    SUMMARIZE (
        Fact,
        'Market'[Market Name],
        "Sales", [Sum of Sales]
    ),
    'Market'[Market Name] = "My Market Name"
)
这会产生以下错误:

在输入表中找不到“Summary”函数中指定的列“Market Name”

如何使此筛选器工作或使Dax识别关系


编辑:在事实和客户之间添加双向关系无助于此类模型的工作,您需要启用从CustomerBridge到客户的筛选器上下文传播。有几种方法可以使其工作:在数据模型中使用双向关系,或使用DAX(交叉筛选、汇总或扩展表筛选)

PowerBI中最简单的解决方案是使用双向关系。您需要的唯一双向连接是“CustomerBridge”和“Customer”之间的连接。所有其他关系应为常规关系(1:M): 然后:

工作原理:

  • 值从表“market”创建一个不同市场名称的列表
  • 将筛选列表中所需的市场名称
  • 因此,过滤器返回尽可能小的表,因此公式应该是快速的
  • 最后,ADDCOLUMS遍历该表,并计算每个市场名称的销售额
这种方法的缺点是:双向关系是危险的,可能会对模型产生非常微妙的不良影响,例如过滤器上下文中的意外更改和性能下降。最佳做法是尽可能避免双向关系

更好的方法是使用带有交叉过滤器的编程双向过滤。例如,这项措施:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    CROSSFILTER ( Customer[Customer_ID], CustomerBridge[Customer_ID], BOTH )
)
将在没有双向关系的情况下正常工作。如果您创建了一个销售总额矩阵,行上有市场名称,您将看到按市场名称列出的销售金额。这种方法的优点是,它只在需要时以编程方式启用双向过滤,并且没有不可预测的副作用

同样的结果也可以通过以下方式实现:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    SUMMARIZE ( CustomerBridge, Customer[Customer_ID] )
)
这个公式是如何工作的是一个有点高级的话题,但它工作得很好

最后,在过去,使用了“扩展表过滤”方法:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    CustomerBridge
)

在这里,双向过滤是由桥接表本身启用的(它到底如何工作也是一个高级主题)。我喜欢这个公式的优雅,但它可能是所有方法中最慢的,并且会降低模型性能

要使这种模型起作用,您需要启用从CustomerBridge到Customer的筛选器上下文传播。有几种方法可以使其工作:在数据模型中使用双向关系,或使用DAX(交叉筛选、汇总或扩展表筛选)

PowerBI中最简单的解决方案是使用双向关系。您需要的唯一双向连接是“CustomerBridge”和“Customer”之间的连接。所有其他关系应为常规关系(1:M): 然后:

工作原理:

  • 值从表“market”创建一个不同市场名称的列表
  • 将筛选列表中所需的市场名称
  • 因此,过滤器返回尽可能小的表,因此公式应该是快速的
  • 最后,ADDCOLUMS遍历该表,并计算每个市场名称的销售额
这种方法的缺点是:双向关系是危险的,可能会对模型产生非常微妙的不良影响,例如过滤器上下文中的意外更改和性能下降。最佳做法是尽可能避免双向关系

更好的方法是使用带有交叉过滤器的编程双向过滤。例如,这项措施:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    CROSSFILTER ( Customer[Customer_ID], CustomerBridge[Customer_ID], BOTH )
)
将在没有双向关系的情况下正常工作。如果您创建了一个销售总额矩阵,行上有市场名称,您将看到按市场名称列出的销售金额。这种方法的优点是,它只在需要时以编程方式启用双向过滤,并且没有不可预测的副作用

同样的结果也可以通过以下方式实现:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    SUMMARIZE ( CustomerBridge, Customer[Customer_ID] )
)
这个公式是如何工作的是一个有点高级的话题,但它工作得很好

最后,在过去,使用了“扩展表过滤”方法:

M2M Sale =
CALCULATE (
    [Sum of Sales],
    CustomerBridge
)

在这里,双向过滤是由桥接表本身启用的(它到底如何工作也是一个高级主题)。我喜欢这个公式的优雅,但它可能是所有方法中最慢的,并且会降低模型性能

谢谢,拉多。我会在周一测试,然后再回来看看结果。谢谢你,拉多。我会在周一测试这个,然后再回来看看结果。