Transform数据权限浅析1之mdl语句批量加载权限
Cognos建模工具除了Framework之外,还有一个Transform,两者的最大区别就是在于Framework是通过结构直连关系数据库的,数据根据数据仓库的变化而变化,而Transform是生产立方体,数据和最后一次执行cube时对应的数据库数据保持一致,而且如果不再次生成cube的话,最新数据永远停留在那一刻.
关于cube权限,大家都知道的就是直接打开Transform在Custom Views窗口手动的去添加Custom View →添加role/user→设置对应Custom view下对应的维度,然后通过过滤掉一些此视图不需要看到的维度值来实现权限的控制,这种方式不再多说,就是纯粹的一一手工的去添加权限,如果有100个用户或者100个角色,而且每一个用户角色的权限都是交叉相错的,针对复杂的大量的权限设置,我们手工添加就显得苍白无力了,那么如何通过mdl语句给cube添加权限呢?下面我们就来了解一下
前提条件:
1:模型格式
模型设计好之后,如果是pyj格式保存为mdl格式
1)pyi是二进制的,mdl是ASCII码的,这是为了移植。比如说我在nt平台下做得模型,要移植到unix上,pyi无法移植,mdl可以。
2)利用mdl格式可以把以前版本的文件用现在的版本打开,而新版本则不可以打开pyi格式的老文件.
3 )模型比较大的时候,PYI访问速度快,特别在编写Transformer宏的时候,比较明显
PYI可以保留数据库用户名和密码,所以通常建议,在项目中使用PYI而不是MDL,并且定期将PYI保存为MDL以防止PYI文件失效。
4)pyi格式是二进制,性能要大大的优于mdl,个人感觉十倍的速度都不止,耗费cpu和网络的资源比较少。而且,移植以后不受cognons的影响,可以正常打开,而且在服务器上生成cube的速度也要比mdl 的速度高一些。
5)mdl是ASCII码的文件,可以用文本打开,进行手工的修改,或者编辑程序对mdl进行批量处理,对于理解模型十分有用。
综述:pyi和mdl模型各有千秋,合理互补使用会给工作带来效益。推荐同时保存两种模型,并使之同步。
2:首次开发
首次开发模型只需要导入数据源,创建好维度层次,度量,cube,如下图,因为mdl语句是基于cube中现有对象进行权限控制的

维度名称,cube名称在mdl语句中都是具体的对象,下面还有重要的一步操作→ Generate Categories生产维度层级,保证在赋权的时候维度层级里面是数据库里面
最新的维度信息,是否是最新信息可以再Show Diagram里面查看维度结构,之后保存mdl文件

3:mdl文件相关
----3.1:文件格式举例
下面举例一个最简单的mdl文件,只有一个custom view在cube中,custom view中只授权一个角色
OpenMDL "D:\\Model\\TR\\Intrust.mdl"
SecurityNameSpaceMake "Intrust" SecurityNamespaceCAMID 'CAMID("Intrust")'
ViewMake "信托一部经理" Dimension "区域维度" ViewSecurity "信托一部经理" Filter "" Filter "" Filter ""
CustomViewMake "信托一部经理" DimensionView "区域维度" "信托一部经理"
SecurityObjectMake 'CAMID("Intrust:r:10002")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "信托一部经理" SecurityObjectType SecurityType_Role
CustomViewList "信托一部经理" EndList
PowerCubeCustomViewListUpdate Cube "信托产品分析"
StartList
"信托一部经理"
ENDLIST
SaveMDL "D:\\Model\\TR\\Intrust.mdl"
----3.2:mdl代码详解
3.2.1--打开需要修改权限的文件
OpenMDL "D:\\Model\\TR\\Intrust.mdl"
3.2.2--指定cube安全的名称空间
SecurityNameSpaceMake "Intrust" SecurityNamespaceCAMID 'CAMID("Intrust")'
3.2.3--创建一个名为信托一部经理的视图,并为该视图赋权过滤掉区域维度中1000302 20000的数据
ViewMake "信托一部经理" Dimension "区域维度" ViewSecurity "信托一部经理" Filter "" Filter "" Filter ""
CustomViewMake "信托一部经理" DimensionView "区域维度" "信托一部经理"
ps:如果需要添加多个custom view,就需要写多个类似上面的语句
3.2.4--给视图信托一部经理添加角色或者用户
SecurityObjectMake 'CAMID("Intrust:r:10002")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "信托一部经理" SecurityObjectType SecurityType_Role
CustomViewList "信托一部经理" EndList
ps:如果需要给该custom view添加多个role,就需要写多个类似上面的语句
3.2.5--把视图添加到cube模型中
PowerCubeCustomViewListUpdate Cube "信托产品分析"
StartList
"信托一部经理"
ENDLIST
ps:如果该cube有多个custom view,就需要在StartList和ENDLIST之间加入所有视图名称,多个视图名称之间有空格隔开.
3.2.6--保存修改权限后的模型
SaveMDL "D:\\Model\\TR\\Intrust.mdl"
----3.3:赋权关键字解释
Exclude: 把指定类别及全部下层类别都排除,既看不见,也不参加汇总。
Cloak: 把指定类别及全部下层类别都屏蔽,全都看不见,但它们参加汇总。
Suppress: 仅把本层指定的类别屏蔽,其下层类别提升。不影响其他兄弟类别,也不影响汇总。
Summarize: 把指定类别的全部下层类别屏蔽,使它们看不见,把它们的值汇总到当前类别,当前指定的类别看上去就象是处在最低层。
Apex: 以当前类别作为本维度层次构架的顶点,即只保留当前类别及其以下的部分。旁系分支全部排除,既看不见,也不参加汇总。
----3.4:赋权关键字缺失
在ViewMake的时候后面如果没有带任何赋权的参数,比如Filter、Apex的话,就表示该视图下的角色可以访问所有数据
3.4.--给视图赋权
ViewMake "信托一部经理" Dimension "区域维度" ViewSecurity "信托一部经理" Filter ""
CustomViewMake "信托一部经理" DimensionView "区域维度" "信托一部经理"
3.4.--缺失赋权操作,则此视图里面的角色可以访问所有数据
ViewMake "信托一部经理" Dimension "区域维度" ViewSecurity "信托一部经理"
CustomViewMake "信托一部经理" DimensionView "区域维度" "信托一部经理"
----3.5:赋权关键字显示区别
如果遇到一个视图中指定可以访问部门ID为1的数据则可以使用Apex "1" 来给视图赋权,如果是维度1、、、4中排除1的所有数据,这个时候就可以考虑用Filter "1"
3.5.1--Apex的缺点
如下图,通过Apex ‘1’的方式给部门维度增加custom view后,查看生成的模型如下图所示,部门下面不显示子部门,如果将部门对象拖过去,则显示信托一部,汇总的数据OK,只是显示不出来

如果一个维度有多个层级,该如何赋权,比如一个区域维度:中国-浙江-杭州 层次为:国家-地区-城市的三级结构
可以分别Apex 国家key、省份key、城市key 或者 Filter国家key、省份key、城市key
Apex "10003" 10003是浙江省代码 只显示浙江省的效果是

3.5.2--Filter的好处
Filter "20000" Filter "10001" Filter "10002"效果是
Transform中的效果

Cognos Connection中展现效果

4:执行方法
按照上面的方法编辑好mdl文件之后,保存例如为update.mdl使用Transform执行打开update.mdl的操作,在这个过程中系统就会执行update.mdl里面的语句,修改Intrust.mdl的Custom view从而实现权限控制,最后保存intrust.mdl实现修改完成操作.
5:一句话总结
在执行文件例如update.md中打开需要修改权限的mdl文件,然后通过在执行文件中添加或者修改intrust.mdl的视图来实现权限的控制.
6:更多mdl语法请参考官方文档
7:附加一个比较全面的mdl执行文件
OpenMDL "D:\\Model\\TR\\Intrust.mdl"
CustomViewDelete "管理员"
CustomViewDelete "中国大区总经理"
CustomViewDelete "信托一部经理"
CustomViewDelete "信托二部经理"
CustomViewDelete "信托三部经理"
CustomViewDelete "财务部经理"
CustomViewDelete "浙江大区经理"
CustomViewDelete "宁波分区经理"
SecurityNameSpaceMake "Intrust" SecurityNamespaceCAMID 'CAMID("Intrust")' CustomViewMake "管理员"
SecurityObjectMake 'CAMID("Intrust:r:10000")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "管理员" SecurityObjectType SecurityType_Role
CustomViewList "管理员" EndList
ViewMake "中国大区总经理" Dimension "区域维度" ViewSecurity "中国大区总经理"
CustomViewMake "中国大区总经理" DimensionView "区域维度" "中国大区总经理"
ViewMake "信托一部经理" Dimension "区域维度" ViewSecurity "信托一部经理" Filter "" Filter "" Filter ""
CustomViewMake "信托一部经理" DimensionView "区域维度" "信托一部经理"
ViewMake "信托二部经理" Dimension "区域维度" ViewSecurity "信托二部经理" Filter "" Filter "" Filter ""
CustomViewMake "信托二部经理" DimensionView "区域维度" "信托二部经理"
ViewMake "信托三部经理" Dimension "区域维度" ViewSecurity "信托三部经理" Filter ""
CustomViewMake "信托三部经理" DimensionView "区域维度" "信托三部经理"
ViewMake "财务部经理" Dimension "区域维度" ViewSecurity "财务部经理" Filter ""
CustomViewMake "财务部经理" DimensionView "区域维度" "财务部经理"
ViewMake "浙江大区经理" Dimension "区域维度" ViewSecurity "浙江大区经理" Filter "" Filter "" Filter ""
CustomViewMake "浙江大区经理" DimensionView "区域维度" "浙江大区经理"
ViewMake "宁波分区经理" Dimension "区域维度" ViewSecurity "宁波分区经理" Filter "" Filter "" Filter "" Filter ""
CustomViewMake "宁波分区经理" DimensionView "区域维度" "宁波分区经理"
SecurityObjectMake 'CAMID("Intrust:r:10001")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "中国大区总经理" SecurityObjectType SecurityType_Role
CustomViewList "中国大区总经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10002")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "信托一部经理" SecurityObjectType SecurityType_Role
CustomViewList "信托一部经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10003")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "信托二部经理" SecurityObjectType SecurityType_Role
CustomViewList "信托二部经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10004")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "信托三部经理" SecurityObjectType SecurityType_Role
CustomViewList "信托三部经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10005")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "财务部经理" SecurityObjectType SecurityType_Role
CustomViewList "财务部经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10006")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "浙江大区经理" SecurityObjectType SecurityType_Role
CustomViewList "浙江大区经理" EndList
SecurityObjectMake 'CAMID("Intrust:r:10007")' SecurityNamespace "Intrust"
SecurityObjectDisplayName "宁波分区经理" SecurityObjectType SecurityType_Role
CustomViewList "宁波分区经理" EndList
PowerCubeCustomViewListUpdate Cube "信托产品分析"
StartList
"中国大区总经理" "信托一部经理" "信托二部经理" "信托三部经理" "财务部经理" "浙江大区经理" "宁波分区经理" "管理员"
ENDLIST
SaveMDL "D:\\Model\\TR\\Intrust.mdl"
Transform数据权限浅析1之mdl语句批量加载权限的更多相关文章
- Spring与Shiro整合 加载权限表达式
Spring与Shiro整合 加载权限表达式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 如何加载权限表达式 我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限: 那 ...
- shiro不重启动态加载权限
最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...
- SpringBoot集成Shiro 实现动态加载权限
一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...
- Android学习笔记_37_ListView批量加载数据和页脚设置
1.在activity_main.xml布局文件中加入ListView控件: <RelativeLayout xmlns:android="http://schemas.android ...
- Caffeine批量加载浅析
最近项目中的本地缓存,看是从Guava改成了Caffeine,据说是性能更好,既然性能更好的话,那么就用起来吧.不过在使用过程中,发现了单个load和批量loadall方面的一些小设置,记录一下. 一 ...
- 基于xml 实现动态加载权限功能树列表---EFSFrame企业级开发架构
在学习EFSFrame框架的过程中,感触最深的就是通过xml来实现前台与后台数据的交互,页面设计灵活,不用管后台如何写的,前台与后台的交互唯一的交互通道都是xml,在我们需要添加页面.添加规定的格式的 ...
- jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据
1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...
- SpringCloud网关无法加载权限及IP黑名单白名单
启动springcloud服务注册中心base,再启动网关远程调用base的接口读取权限等数据,控制台出现加载null权限ERROR提示.在远程调用处打断点,先进入代理,找到抛出异常的原因是reque ...
- android 批量加载数据
public class MainActivity extends Activity { private ListView listView; private List<String> d ...
随机推荐
- NetBIOS主机名扫描工具nbtscan
NetBIOS主机名扫描工具nbtscan NetBIOS主机名是NetBIOS协议为主机分配的名称.通过NetBIOS主机名,系统可以利用WINS服务.广播及Lmhost文件等多种模式将NetB ...
- Unity 游戏开发技巧集锦之创建透明的材质
Unity 游戏开发技巧集锦之创建透明的材质 Unity创建透明的材质 生活中不乏透明或者半透明的事物.例如,擦的十分干净的玻璃,看起来就是透明的:一些塑料卡片,看起来就是半透明的,如图3-23所示. ...
- 2017/11/13 Leetcode 日记
2017/11/13 Leetcode 日记 463. Island Perimeter You are given a map in form of a two-dimensional intege ...
- java8新特性——方法引用与构造器引用
上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...
- HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点 ...
- 1 Spring4 之环境搭建和HelloWorld
1 Spring 是什么? 具体描述 Spring: 轻量级:Spring 是非侵入性的- 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API 依赖注入(DI --- dep ...
- 【BZOJ2763/洛谷p4563】【分层图最短路】飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4630 Solved: 1797[Submit][Stat ...
- ACM -- 算法小结(八)字符串算法之Manacher算法
字符串算法 -- Manacher算法 首先介绍基础入门知识,以下这部分来着一贴吧,由于是很久之前看的,最近才整理一下,发现没有保存链接,请原创楼主见谅. //首先:大家都知道什么叫回文串吧,这个算法 ...
- Codeforces Beta Round #9 (Div. 2 Only) B. Running Student 水题
B. Running Student 题目连接: http://www.codeforces.com/contest/9/problem/B Description And again a misfo ...
- BZOJ 4443: [Scoi2015]小凸玩矩阵 最大流
4443: [Scoi2015]小凸玩矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4443 Description 小凸和小方是好 ...