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. MPI - 缓冲区和非阻塞通信

    转载自: Introduction to MPI - Part II (Youtube) Buffering  Suppose we have ) MPI_Send(sendbuf,...,,...) ...

  2. Redis学习篇(十一)之发布订阅

    PUBLISH/SUBSCRIBE 发布订阅的原理 包含两个角色,一个是发布者, 一个是订阅者 订阅者可以订阅一个或者多个频道(channel) 发布者可以向指定的频道发布信息 通过SUBSCRIBE ...

  3. 「BZOJ4763」雪辉

    「BZOJ4763」天野雪辉 题目大意:有一棵 \(n\) 个点的树,树上每一个点有权值 \(a_i \leq 30000\) ,每次询问给出若干路径,求出这些路径的并上面的不同颜色数与 \(mex\ ...

  4. maven搭建企业级多模块项目

    1.创建一个maven项目 选择pom 完成 2.创建模块 项目右键选择module,创建模块.创建子模块 其余的打包时都为jar 地址:https://github.com/LeviFromCN/m ...

  5. thread_local变量(转)

    转自:https://www.cnblogs.com/pop-lar/p/5123014.html thread_local变量是C++11新引入的一种存储类型.它会影响变量的存储周期(Storage ...

  6. bzoj 1857

    三分,对于单凸的函数(单调的也可以),可以找出最值. 这道题可以感性认识一下...... /****************************************************** ...

  7. bzoj1977 次小生成树

    Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...

  8. [转][译][Android基础]Android Fragment之间的通信

    2014-2-14 本篇文章翻译自Android官方的培训教程,我也是初学者,觉得官方的Training才是最好的学习材料,所以边学边翻译,有翻译不好的地方,请大家指正. 如果我们在开发过程中为了重用 ...

  9. windows安装zookeeper单机版

    1.在apache的官方网站提供了好多镜像下载地址,然后找到对应的版本,目前最新的是3.4.6下载地址:http://mirrors.cnnic.cn/apache/zookeeper/zookeep ...

  10. mui中a标签的跳转问题

    一.脑补 快速响应是mobile App实现的重中之重,研究表明,当延迟超过100毫秒,用户就能感受到界面的卡顿,然而手机浏览器的click点击存在300毫秒延迟(至于为何会延迟,及300毫秒的来龙去 ...