启用RLS时,DAX度量不起作用-连接路径应形成树形

时间:2019-04-18 10:41:25

标签: powerbi dax powerbi-desktop

在Power BI中,打开RLS时出现以下测量错误(关闭RLS时不会显示此错误):

Join paths are expected to form a tree but the table has two join paths

enter image description here

这些是模型中的相关关系:

enter image description here

我的关系不活跃。此非活动关系用于解决问题的措施。但是由于它是非活动的,所以我会认为这不是问题??措施是:

TTipsInvs =
VAR SalesValue =
    CALCULATE (
        SUM ( ANSAPBICustomerTransDetailed[Outstanding] ),
        USERELATIONSHIP ( 'ANSAPBICustomerTransDetailed'[SiteID], ANSAPBISites[Site ID] )
    )
RETURN
    IF ( ISBLANK ( SalesValue ), 0, ( SalesValue ) )

打开RLS时,有什么方法可以避免此问题?

为所有帮助欢呼

3 个答案:

答案 0 :(得分:1)

TTipsInvs =
VAR SiteID =
    CALCULATETABLE (
        VALUES ( ANSAPBISites[Site ID] ) )
VAR SalesValue =
    CALCULATE (
        SUM ( ANSAPBICustomerTransDetailed[Outstanding] ),
        TREATAS ( SiteID, 'ANSAPBICustomerTransDetailed'[SiteID] ) )
RETURN
    IF ( ISBLANK ( SalesValue ), 0, ( SalesValue ) )

答案 1 :(得分:1)

我想补充一下@user9824134 的答案,遗憾的是没有太多解释(无法编辑)。

为什么TREATAS

  • docs 说明此函数将第一个参数 (clientID) 的结果应用于第二个参数 ('ANSAPBICustomerTransDetailed'[SiteID]) 中的列

为什么会这样:

  • 不太确定 RLS 如何强制执行联合路径,但 @asp8811 解释的“永远在线”的想法对我来说很有意义。
  • 在这种情况下,TREATAS 本质上是作为 CROSSFILTER 的替代品。通过在 clientID 表的 SiteID 列上应用 ANSAPBICustomerTransDetailed 过滤器,它正在模拟 CROSSFILTER
  • 我必须测试效率,但我怀疑性能应该与 VALUES 已经只返回一个不同的列表相似。

下面的方法也有效,而且要短得多。如果未将过滤器传递给 CALCULATETABLE 表达式,则它不会执行任何操作,因此只需使用 VALUES 就足够了。

TTipsInvs =
VAR clientID = VALUES ( ANSAPBISites[Site ID] )
VAR SalesValue =
    CALCULATE (
        SUM ( ANSAPBICustomerTransDetailed[Outstanding] ),
        TREATAS ( clientID, 'ANSAPBICustomerTransDetailed'[SiteID] ) )
RETURN
    IF ( ISBLANK ( SalesValue ), 0, ( SalesValue ) )

答案 2 :(得分:0)

进行了快速测试: 看起来这种方法不需要启用或禁用关系。

Model

在RLS之前: Before RLS

RLS之后: After RLS