我有以下计算表:
MyCalculatedTable =
DISTINCT (
SELECTCOLUMNS (
FILTER (
'Dim A',
LEFT('Dim A'[Group],1) = "B" &&
LEFT('Dim A'[Id],1) <> "C" &&
'Dim A'[Code Type] IN {"A", "Y"}
),
"Group", 'Dim A'[Group]
)
)
我正在对维度 A 以及链接到维度 A 的其他表(如事实表)应用 RLS,因此在这种情况下不会应用 RLS,因为表是在数据加载/刷新期间生成的,而不是在查询时动态生成的。因此,计算表本身不会自动从基础表继承 RLS,除非在查看报告期间直接由这些表过滤计算表。
那么我该如何进行呢?
我的想法是基于 Group 列在 MyCalculatedTable 计算表和 Dim A 之间创建一对多关系,并将交叉过滤方向设为 Both,并选中在两个方向上应用安全过滤器。
我有一个基于计算表的测量方法:
Amount Paid =
CALCULATE (
SUM('Fact A'[Amount Paid]),
FILTER (
'Fact A',
RELATED('Dim B'[Invoice Number]) IN VALUES('MyCalculatedTable'[Group])
)
)
我猜测,在报告中评估度量时,RLS 会自动应用。这是因为度量是根据用户可见的数据实时计算的,并且此时会强制执行 RLS。
你的思维过程是正确的。
MyCalculatedTable
表与表之间的1对多关系。Dim A
Group
Both
并检查Apply security filter in both directions
。当 RLS 应用于
Dim A
表格时,MyCalculatedTable
表格将被过滤,因此VALUES('MyCalculatedTable'[Group])
度量中的 也将被过滤。这将产生一个过滤SUM('Fact A'[Amount Paid])
值。