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

DAX measure not working when RLS is turned on - Join paths are expected to form a tree

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

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

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

我有一段不活跃的关系。这种不活跃的关系被用在有问题的措施中。但由于它处于非活动状态,我认为这不会成为问题?措施是:

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

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

为大家的帮助干杯

做了一个快速测试: 这看起来不需要启用或禁用关系就可以工作。

RLS 之前:

RLS 之后:

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

我想补充 @user9824134 的回答,不幸的是没有太多解释(无法编辑)。

为什么 TREATAS:

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

为什么这有效:

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

下面的方法也有效,而且更短。如果未向 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 ) )