有时您需要限制用户访问多维数据集中的某些数据。 似乎没有什么复杂的事情:在角色中安装行过滤器就可以了,但是有一个问题-过滤器会修剪表中的数据,结果是您只能通过可用的行来查看速度,我们需要所有的速度,但是细节只能是可用的对于其中一些。
例如,用户应查看所有产品的营业额,并可能有完整的详细信息,但与此同时,客户不应仅显示全部客户,而仅显示部分或全部客户,但在某些属性(字段)中具有部分隐藏的数据。
为了防止用户查看客户的营业额,您可以通过度量公式来克服此问题,如果用户尝试查看特定客户的营业额,则可以显示一个空值,
此处介绍了这些选项之一。 但是,事实并非如此。 当有几十个度量时,然后在每个度量中编写一个公式……如果您忘记了? 但是您肯定有一天会忘记它的。。。如果用户需要特定客户卡中的数据,那么如果不选择过滤措施,任何事情都不会阻止他查看。 怎么办
我们需要实现以下显示:

允许您获得相似结果的整个原理是基于一个小技巧,它包括将合成行添加到表(在本例中为客户端),以便关于同一实体的记录至少重复一次-第一个将包含完整的信息,并且大多数列中的第二个填充有
#N / A类型插头,但是两个记录的标识符相同。 此外,使用角色过滤器和执行过滤的特殊列,我们为用户保留了某些行-完全填充字段的行或带有存根的行。 由于 由于多维数据集具有“折叠”重复数据的功能,并且用户无法访问提供唯一值的任何其他属性,因此在结果表中,所有具有代码
#N / A的客户端都将变成一行。 我认为现阶段一切都已经很清楚了,您将无法阅读。 结果在文章标题中。
但是,如果有人需要详细信息-我有它们。
直到1400版(包括SQL 2017在内)的表格模型都不允许创建多对多关系,但是在重复的情况下,我们需要这样的关系,因此我们将通过一个仅包含一列具有唯一客户标识符的中间表来创建它。 该表最初是不可压缩的,因为 它仅包含唯一值,因此您可以对其进行计算,因为在这种情况下,如果通过t-sql填充它,我们将得不到任何收益(还记得处理原理和表压缩顺序吗?)。 仅由于引擎具有压缩重复数据的能力,多维数据集中的数据量将略有增加,并且由于通过角色进行过滤,用户会话的记录集减少了,即 过滤集后的最终记录数将保持不变,没有重复。 因此,不必担心,即使表最初足够大,添加重复项也不会显着影响性能和卷(当然,情况是不同的,但在大多数情况下,情况只会如此)。
下图显示了多维数据集模型和表内容:

例如,添加一个简单的过滤器:

仅此而已。
我想警告使用此方法的一个功能。 默认情况下,SSAS服务器上的管理员用户会绕过所有角色进入多维数据集,即使在这些角色中指定了他们的姓名也是如此。 这导致角色过滤器不起作用,并且在管理员下所有重复项都可见。 但是请不要失望,在连接字符串中足以明确指示要使用的角色,并且一切都准备就绪,此外,在测试时,您将不得不在角色之间进行多次切换。
如您所知,您可以对同一条记录进行几种组合,以使真实数据的列充满度不同。 您还可以在多维数据集中创建一个单独的隐藏表,该表将通过ADSI填充帐户,并将用户分配到不同的域组,然后根据特定组中用户成员身份的组合填写此表。 我们在逐行角色过滤器中将链接写到该表,这将使我们能够控制度量,也可以在度量中引用它,以便在必要时一些度量显示为空。 通过这样的组织,可以对数据的访问权限进行微调,并将所有内容存储在一个地方。 但是度量之间存在细微差别:如果高级用户自己向多维数据集写查询,那么只要他知道基本列的名称和公式,就不会阻止他使用没有书签的度量...尽管,如果需要,您可以在此处进行操作限制,但这是另一个主题。