Powerbi 打开RLS时DAX度量不起作用-连接路径应形成树

Powerbi 打开RLS时DAX度量不起作用-连接路径应形成树,powerbi,dax,powerbi-desktop,Powerbi,Dax,Powerbi Desktop,在Power BI中,当RLS打开时,我有以下测量错误(当RLS关闭时,此错误不显示): 以下是模型中的相关关系: 我的关系不活跃。此非活动关系用于问题的度量。但由于它是非活动的,我会认为这不会是一个问题??措施是: TTipsInvs = VAR SalesValue = CALCULATE ( SUM ( ANSAPBICustomerTransDetailed[Outstanding] ), USERELATIONSHIP ( 'ANSAPBIC

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

以下是模型中的相关关系:

我的关系不活跃。此非活动关系用于问题的度量。但由于它是非活动的,我会认为这不会是一个问题??措施是:

TTipsInvs =
VAR SalesValue =
    CALCULATE (
        SUM ( ANSAPBICustomerTransDetailed[Outstanding] ),
        USERELATIONSHIP ( 'ANSAPBICustomerTransDetailed'[SiteID], ANSAPBISites[Site ID] )
    )
RETURN
    IF ( ISBLANK ( SalesValue ), 0, ( SalesValue ) )
当RLS打开时,有什么方法可以避免此问题

为所有帮助干杯

做了一个快速测试: 这看起来是可行的,不需要启用或禁用关系

在RLS之前:

RLS之后: 做了一个快速测试: 这看起来是可行的,不需要启用或禁用关系

在RLS之前:

RLS之后:

我想补充@user9824134的答案,可惜没有太多解释(无法编辑)

为什么
TREATAS

  • 说明此函数将第一个参数(
    clientID
    )的结果应用于第二个参数(
    “AnsapBicCustomerTransDetailed”[SiteID]
    )中的列
为什么会这样:

  • 不太确定RLS是如何执行关节路径的,但是@asp8811解释的“始终打开”的想法对我来说是有意义的
  • 在这种情况下,
    TREATAS
    基本上是作为
    CROSSFILTER
    的替代品。通过在
    ANSAPBICustomerTransDetailed
    表的
    SiteID
    列上应用
    clientID
    过滤器,它正在模拟
    交叉过滤器
  • 我必须测试效率,但我怀疑性能应该与
    值类似,因为
    已经只返回一个不同的列表
下面的方法也很有效,而且要短得多。如果未向表达式传递筛选器,
CALCULATETABLE
表达式将不起任何作用,因此仅使用
值就足够了

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

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

为什么
TREATAS

  • 说明此函数将第一个参数(
    clientID
    )的结果应用于第二个参数(
    “AnsapBicCustomerTransDetailed”[SiteID]
    )中的列
为什么会这样:

  • 不太确定RLS是如何执行关节路径的,但是@asp8811解释的“始终打开”的想法对我来说是有意义的
  • 在这种情况下,
    TREATAS
    基本上是作为
    CROSSFILTER
    的替代品。通过在
    ANSAPBICustomerTransDetailed
    表的
    SiteID
    列上应用
    clientID
    过滤器,它正在模拟
    交叉过滤器
  • 我必须测试效率,但我怀疑性能应该与
    值类似,因为
    已经只返回一个不同的列表
下面的方法也很有效,而且要短得多。如果未向表达式传递筛选器,
CALCULATETABLE
表达式将不起任何作用,因此仅使用
值就足够了

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

你真的需要那种关系吗?为什么不使用桥接表CustomerandAgent?我需要通过AnsapVisite[SiteID]汇总AnsapBicCustomerTransDetailed[Understand],AnsapBicCustomerTransDetailed表包含列SiteID,但CustomerandAgent不包含列SiteID。DAX中是否有其他功能可以让我使用活动关系,但按站点分组。SiteID?那么,如果站点中没有站点,为什么要将站点连接到Customerandagent?看起来您更需要更改模型以正确反映您的业务逻辑我也需要在同一报告中按客户报告站点。一个客户可以拥有一个/多个站点,一个客户可以拥有一个/多个CustomerTransaction。我需要按站点和客户报告客户交易,我还需要按客户报告站点。希望这有意义?这是一种痛苦,但事实就是如此。你真的需要这种关系吗?为什么不使用桥接表CustomerandAgent?我需要通过AnsapVisite[SiteID]汇总AnsapBicCustomerTransDetailed[Understand],AnsapBicCustomerTransDetailed表包含列SiteID,但CustomerandAgent不包含列SiteID。DAX中是否有其他功能可以让我使用活动关系,但按站点分组。SiteID?那么,如果站点中没有站点,为什么要将站点连接到Customerandagent?看起来您更需要更改模型以正确反映您的业务逻辑我也需要在同一报告中按客户报告站点。一个客户可以拥有一个/多个站点,一个客户可以拥有一个/多个CustomerTransaction。我需要按站点和客户报告客户交易,我还需要按客户报告站点。希望这有意义?这是一种痛苦,但事实就是如此。嗨@mxix,从站点到客户站点是1:1的关系,而不是1:M-一个客户可以有多个站点,但一个站点只有一个客户记录。正因为如此,我无法真正激活您上面概述的关系。有什么想法吗?嗨@mxix,从站点到客户站点是1:1的关系,不是1:M-一个客户可以有多个站点,但一个站点只有一个客户记录。正因为如此,我无法真正激活您上面概述的关系。有什么想法吗?你能解释一下这是如何工作的,以及为什么UserRelationship()不适用于RLS吗?这与如何应用上下文有关吗?这个答案也解决了我的问题,但我希望对正在发生的事情进行更深入的解释。我的解释是行级安全性使用表关系创建直接路径。因此,当添加UserRelationship()时,有时可能会导致循环引用,如果RLS未打开,循环引用将不存在。为了确保我理解:RLS在使用时处于始终打开状态,因此它总是积极使用典型的活动物理关系。尝试使用用户计算度量值时
TTipsInvs =
VAR clientID = VALUES ( ANSAPBISites[Site ID] )
VAR SalesValue =
    CALCULATE (
        SUM ( ANSAPBICustomerTransDetailed[Outstanding] ),
        TREATAS ( clientID, 'ANSAPBICustomerTransDetailed'[SiteID] ) )
RETURN
    IF ( ISBLANK ( SalesValue ), 0, ( SalesValue ) )