润乾solap实现按条件进行数据过滤方案
润乾的solap做数据分析时是基于润乾的矩阵文件,矩阵简单理解来说就是一个数据的立方体,这样能够大大提高分析的效率,矩阵按类型分为物理矩阵、数据库矩阵、序表矩阵、导出矩阵,虽说类型不同,但是矩阵结构以及前台展现给业务人员的形式是完全相同的,也就是业务人员在前台分析数据时所对应是同一种矩阵。
在做solap分析时通常会要求对数据进行过滤,既不同身份的用户做分析时所看到的数据是不同,在平时对数据库表操作时通常可加上where语句,例如where id=?这种形式,但是对于矩阵来说并不支持该种语句,
一:矩阵要保持一个稳定的结构,不允许临时更改。
二:矩阵中可能不会有对应的过滤字段,例如矩阵中有地区维、时间维、级别维,但是数据过滤时要按照一个用户id进行过滤,在矩阵中并没有该id字段,所以不能使用直接的对id的过滤。
润乾的solap支持数据过滤,主要是对矩阵的维度进行过滤,可以通过润乾的jsp标签将参数传递给矩阵,这样矩阵就能够按照设置进行数据过滤,下面以润乾自带的例子介绍下使用方式(只介绍数据过滤用到的方法,具体矩阵制作见润乾solap帮助文档),例子可使用solap设计器自带的solapdemo文件:
一:增加数据过滤维度
如上边第二点所说,如果矩阵中没有对应的字段则无法对数据过滤,所以要求在矩阵的维度中增加一个用于数据过滤的维度。
例如:做数据分析时要求按照时间、产品、客户三个维度做数据分析,数据过滤要求按照员工进行过滤,既不同员工访问时所看到数据不同,这样就要在原有的维度基础上增加一个员工维,如下图:
剩下操作就是矩阵设置的基本操作,将明细表中的数据和矩阵中对应的维度关联起来即可,那天已经向贵方工程师说明操作方法,也可以看下对应的solap帮助文档。
矩阵制作好后将对应的矩阵文件拷贝到应用根目录下的\WEB-INF\dmFiles\data文件夹下。
注:矩阵文件为mtxg格式,solap设计器设计默认保存到D:\solap6\solap\designer\rq_files文件加下,如果矩阵类型为物理矩阵,则还会有一个后缀为.mtxd的文件用于存储数据,也要讲该文件放到web端目录下。例如:润乾solap设计器安装完后会自带一个应用,矩阵文件名为solapdemo.mtxg,对应物理矩阵名为 物理矩阵.mtxd,则将这两个文件复制到:D:\solap6\solap\webapps\demo\WEB-INF\dmFiles\data下即可。
二:页面端访问
前边已经介绍了矩阵的制作以及将对应制作好的文件复制到对应服务器目录下,接下来介绍下web端的操作。
1、 页面端访问solap
浏览器中访问:http://IP:端口/应用名/dm/jsp/index.jsp
在页面的左方会出现一个树状节点,在矩阵文件下能看到刚才制作好的solapdemo.mtxg文件,这样就可以基于该文件进行solap的创建,点击该文件,会弹出创建solap分析矩阵的向导,如图:
剩下操作就是矩阵设置的基本操作,将明细表中的数据和矩阵中对应的维度关联起来即可,那天已经向贵方工程师说明操作方法,也可以看下对应的solap帮助文档。
矩阵制作好后将对应的矩阵文件拷贝到应用根目录下的\WEB-INF\dmFiles\data文件夹下。
注:矩阵文件为mtxg格式,solap设计器设计默认保存到D:\solap6\solap\designer\rq_files文件加下,如果矩阵类型为物理矩阵,则还会有一个后缀为.mtxd的文件用于存储数据,也要讲该文件放到web端目录下。例如:润乾solap设计器安装完后会自带一个应用,矩阵文件名为solapdemo.mtxg,对应物理矩阵名为 物理矩阵.mtxd,则将这两个文件复制到:D:\solap6\solap\webapps\demo\WEB-INF\dmFiles\data下即可。
二:页面端访问
前边已经介绍了矩阵的制作以及将对应制作好的文件复制到对应服务器目录下,接下来介绍下web端的操作。
1、 页面端访问solap
浏览器中访问:http://IP:端口/应用名/dm/jsp/index.jsp
在页面的左方会出现一个树状节点,在矩阵文件下能看到刚才制作好的solapdemo.mtxg文件,这样就可以基于该文件进行solap的创建,点击该文件,会弹出创建solap分析矩阵的向导,如图:
其中上边为对应参与分析的维度,在参与分析复选框中勾选对应的维度,这里全部勾中,下边为对应的测度,也就是常说的指标,这里选中计数,也就是将来数据分析时是按照计数统计,设置完成后点击新建按钮即可,这样就可以在页面端进行数据分析操作了。
此时是通过润乾的新建向导生成了一个solap分析,但在实际使用中客户可能并不愿意每次都通过向导新建,一般是想进来后直接基于该页面进行分析即可,在页面上方可以看到有一个保存按钮,通过该按钮就可以将该分析操作进行保存,下次直接使用保存后的文件即可。
点击保存,弹出对话框,输入对应的名称,例如:solap,点击保存,此时会将该分析保存成文件,默认目录为:应用根目录下的files文件夹,此时可以看到该文件夹下生成对应的solap.maj和solap.majd,以后再做solap分析时直接发布对应的maj文件即可。
三:maj文件的发布。
maj文件可通过在jsp中使用tag标签发布,如:
<%@ page contentType=”text/html;charset=GBK” %>
<%@ taglib uri=”/WEB-INF/runqianDm.tld” prefix=”dm” %>
<html>
<body style=”margin:0px; font-size:12px;”>
<%
String filterStr=”dimension=客户维,国家,地区,省份;产品维,产品类别,产品名称;时间维,年,季,月<<<measure=物理矩阵测度@0<<<slice=员工维,1″;
%>
<dm:olap majFile =”/files/solap.maj”
filterStr=”<%=filterStr%>”
/>
</body>
</html>
dm:olap即润乾的solap标签,majFile指定要发布的对应的maj文件,这里指定刚才保存的solap.maj文件,相对于应用根目录,这样在页面端访问该jsp就能直接展现对应的solap,在上边做分析即可。
四:solap数据过滤
前面介绍了通过jsp发布solap文件,但此时会将所有数据展现,并且我增加的员工维度本不想让客户看到,这里也会显示,此处可通过润乾的过滤串进行灵活控制,在标签中有个filterStr标签,通过给他传递参数串就能够达到动态控制的效果,例如上边jsp中的代码。
filterStr字符串值为润乾solap特有的参数串,该串可通过润乾的solap运行器生成,打开solap运行器:
Window开始菜单—程序—-solap—-solap运行器
工具—矩阵过滤器
选择刚才的solapdemo.mtxg矩阵文件会列出对应的信息:
1、 维度控制:
上部分会列出对应的维度,此处控制做solap时能够使用的维度,例如在这个例子中要求显示时间维、产品维、客户维,则在对应的复选框中勾选即可(选中为展现),员工维仅仅是用作数据过滤,不能让用户看到,所以员工维不勾选
2、 测度控制
选择对应的测度(指标)
3、 数据过滤
还是在该页面下方有个“设置维层”按钮,点击后弹出维度数据控制对话框:
例如,该分析只能查看员工为“李芳”的数据,则在员工维中只勾选中李芳,其余员工维下数据不勾选,点击确定即可。
点击对话框中的生成过滤串按钮,在下方会输出对应的一个字符串,通过这个串就能够对润乾solap分析的数据进行过滤(查看三个维度数据,并且只查看“李芳的数据”),将该串复制到刚才jsp对应的标签处,在标签中支持引用jsp中的变量,则在jsp中定义:
String filterStr=”dimension=客户维,国家,地区,省份;产品维,产品类别,产品名称;时间维,年,季,月<<<measure=物理矩阵测度@0<<<slice=员工维,1″;
然后在标签中引用即可filterStr=”<%=filterStr%>”
在浏览器访问test.jsp
可以看到,页面中只显示三个维度,并且展现的数据也是过滤后的数据。
这样,就能够实现对solap总数据过滤的效果。
目前该过滤串只能通过运行器生成,所以需要做下相关的操作。该串含义:
dimension=客户维,国家,地区,省份;产品维,产品类别,产品名称;时间维,年,季,月<<<measure=物理矩阵测度@0<<<slice=员工维,1
dimension 维度选择定义,此处列出页面端能够使用的维度
<<<measure 测度设置,设置能够使用的测度,@0为计数
Slice为数据过滤,上述表达式 员工维,1表示只展现员工维度中的第一条记录所对应的值,1表示第一条,如果将来想显示第一条和第三条则此处写成员工维,1,3即可,这里用的是第几条,需要贵方这里做条件匹配时注意一下。
生成完过滤串后就可以在jsp中使用,并且可以根据参数的不动动态变化,如:
<%
String userid=”zhangsan”;
String filterStr=”";
if(userid==”zhangsan”){
filterStr=”dimension=客户维,国家,地区,省份;产品维,产品类别,产品名称;时间维,年,季,月<<<measure=物理矩阵测度@0<<<slice=员工维,1″;
}else{
filterStr=”dimension=客户维,国家,地区,省份;产品维,产品类别,产品名称;时间维,年,季,月<<<measure=物理矩阵测度@0<<<slice=员工维,2″;
}
%>
针对目前这个项目,可以数据库中建张中间表,用于存储数据过滤信息,如:
T
Name filterStr
Zhangsan 1
Lisi 2
Wangwu 3
这个数据的顺序和员工维度里数据顺序相同,这样就能根据登录的name的值查出对应的数据在员工维中的第几条,将这个拼在数据过滤串后就能实现对应需求。
able1