1 背景
目前,在设置数据模型的行权限时,只能针对单个表/查询中的字段进行设置。
如果在维表中设置了行权限,这一权限会自动应用到关联的事实表,导致事实表也受到行权限的控制,这种设置行权限的做法是最常用的做法;
然而,有时候如果客户只想控制事实表的输出结果,并不想控制维表的输出结果,那么就直接在事实表上设置行权限。
1、需要开启数据模型引擎V2.0才能正常使用该功能。
2 示例说明
场景描述:有4张表:客户表、贷款明细、贷款与担保关系、担保明细表
一个客户可以有零或多笔贷款,一笔贷款可以有零或多笔担保,而一笔担保可以关联到一笔或多笔贷款
客户表数据:
贷款明细:
贷款与担保关系:
担保明细表:
1、把数据导入到数据模型中,并且设置好关系联系以及筛选方向,保存模型,并且命名为”贷款与担保模型“
以下示例都是以该模型作为演示示例。
2、在用户管理中创建另外一个用户:demo,赋予它能引用查看该模型以及基于它做的的报表的权限。
2.1 在维度表上设置行权限
在维表中设置了行权限,这一权限会自动应用到关联的事实表;根据筛选方向,能传递到的事实表均会受到行权限的控制。这种设置行权限的做法是最常用的做法。
1、假设我们在 ”客户表“中设置行了权限,设置行权限操作可查看:数据模型行权限。
并且只应用于 demo 用户,并且设置能查看“客户A”、“客户B”,效果如下图:
2、保存行权限并基于该模型去创建透视分析: 查看所有客户的贷款信息
效果如下:
3、切换成demo用户查看该报表,发现只能查看”客户A、客户B“的效果:
或者直接只查看"贷款信息"表的信息,发现也只能查看”客户A、客户B“
再来查看贷款与担保信息,会发现,也只能查看:客户A、客户B的信息:
对”客户表“来说,”贷款信息“表是它的事实表,它是”贷款信息“表的维表, 并且能通过筛选方向传递到”贷款与担保关系“表, 所有即使没有勾选维表”客户表“的字段,行权限仍然会生效。
2.2 在事实表中设置维表的行权限
1、把“贷款与担保模型” 另存一份,并且把2.1 设置的行权限删除。
2、选择事实表设置行权限,选择在“贷款信息”表中设置行权限,操作如下图:
当选择了事实表设置行权限时候,重点说明一下,在选择字段列时:可以显示它对应的子图,即能筛选它的表的字段都可以设置行权限。
3、设置demo用户,只能查看,客户表下的”客户编号“为”客户A“、”客户B“,设置好之后保存行权限。
4、去创建透视分析,查看:所有客户的贷款信息,效果如下:
5、切换成demo用户查看该报表,发现只能查看”客户A、客户B“的效果:
或者直接只查看"贷款信息"表的信息,发现也只能查看”客户A、客户B“
直接查”“客户信息”表,能查看所有客户的信息:
通过示例可以看到:如果只想控制事实表的输出结果,并不想控制维表的输出结果,可以在事实表中设置行权限,并且可以设置多个字段的直接是and 或OR的关系。
如果在某些特殊情况下,在事实表中设置了行权限,还想控制维表的数据,这时需要在维表再设置一次行权限:
如果同时查询维表与事实表之间的字段,由于多个表之间设置的行权限是AND关系,可能会导致数据变少。这时可以勾选“权限仅作用于”,勾选之后,该表设置的行权限不会传递到他关联的表上。
3 在”高级模式“下设置行权限
在设置行权限时,选择高级模式,高级模式的逻辑与简单模式一致,在高级模式下,也能使用子图的字段进行条件控制,并且在SQL的子查询中,可以使用不在子图中表的字段。