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语法请参考官方文档

http://www-01.ibm.com/support/knowledgecenter/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.dg_cogtr.10.2.2.doc/c_mdlverbs.html%23MDLVerbs

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语句批量加载权限的更多相关文章

  1. Spring与Shiro整合 加载权限表达式

    Spring与Shiro整合 加载权限表达式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 如何加载权限表达式  我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限: 那 ...

  2. shiro不重启动态加载权限

    最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...

  3. SpringBoot集成Shiro 实现动态加载权限

    一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...

  4. Android学习笔记_37_ListView批量加载数据和页脚设置

    1.在activity_main.xml布局文件中加入ListView控件: <RelativeLayout xmlns:android="http://schemas.android ...

  5. Caffeine批量加载浅析

    最近项目中的本地缓存,看是从Guava改成了Caffeine,据说是性能更好,既然性能更好的话,那么就用起来吧.不过在使用过程中,发现了单个load和批量loadall方面的一些小设置,记录一下. 一 ...

  6. 基于xml 实现动态加载权限功能树列表---EFSFrame企业级开发架构

    在学习EFSFrame框架的过程中,感触最深的就是通过xml来实现前台与后台数据的交互,页面设计灵活,不用管后台如何写的,前台与后台的交互唯一的交互通道都是xml,在我们需要添加页面.添加规定的格式的 ...

  7. jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据

    1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...

  8. SpringCloud网关无法加载权限及IP黑名单白名单

    启动springcloud服务注册中心base,再启动网关远程调用base的接口读取权限等数据,控制台出现加载null权限ERROR提示.在远程调用处打断点,先进入代理,找到抛出异常的原因是reque ...

  9. android 批量加载数据

    public class MainActivity extends Activity { private ListView listView; private List<String> d ...

随机推荐

  1. Socket学习笔记(一)

    1.socket介绍 我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几 ...

  2. android 启动流程

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha adb shell 后  用 ps 命令 回车 可以看到 运行的进程. 如下结果: ct ...

  3. 【树哈希】poj1635 Subway tree systems

    题意:给你两颗有根树,判定是否同构. 用了<Hash在信息学竞赛中的一类应用>中的哈希函数. len就是某结点的子树大小,g是某结点的孩子数+1. 这个值也是可以动态转移的!具体见论文,所 ...

  4. 【最小割】BZOJ3894-文理分科

    [题目大意] 给定一个m*n的矩阵,每个格子的人可以学文或者学理,学文和学理各有一个满意度,如果以某人为中心的十字内所有人都学文或者学理还会得到一个额外满意度,求最大满意度之和. [思路] 发现这道题 ...

  5. poj 2001 trie

    第一道trie 还需要写题来建立自己的代码习惯. #include <cstdio> #include <vector> #include <algorithm> ...

  6. ThinkPHP -- magic_quotes_gpc()引起的反斜杠问题

    magic_quotes_gpc()引起的反斜杠问题,通常是因为没有事先判断它的状态,而对字符串进行处理引起的.   (本文学习借鉴于hechunhua楼主) 一般提供的服务器空间默认PHP 指令 m ...

  7. Educational Codeforces Round 12 B. Shopping 暴力

    B. Shopping 题目连接: http://www.codeforces.com/contest/665/problem/B Description Ayush is a cashier at ...

  8. Codeforces Beta Round #7 C. Line Exgcd

    C. Line 题目连接: http://www.codeforces.com/contest/7/problem/C Description A line on the plane is descr ...

  9. Codeforces Round #202 (Div. 1) A. Mafia 贪心

    A. Mafia Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/348/problem/A D ...

  10. spring aop 理解

    aop简介 aop是spring 的两大特性之一,还有IOC.主要提供面向切面的编程思想,区分于面向对象编程. aop原理(动态代理+反射) 在一个方法体中,可能会存在很多其他的方法调用,我们可以把每 ...