欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎么在bo的报表中过滤数据

更新时间: 2014-01-05 02:29:41 责任编辑: Author_N1

 

如何在BO的报表中过滤数据
我在做报表的过程中,遇见一个问题。
客户要求在浏览报表的时候,要求进行公司结构的数据过滤。
详细的说,就是集团A底下有公司A,公司B,公司C
在浏览报表的时候,集团A可以浏览全部的数据,各公司间只能看自己的相关数据
并且,在这个基础上,还有公司部门的结构。
比如,各个公司可能有自己的财务部门,人事部门等
集团A的财务,可以看所有的财务报表,就是说能看集团A+3个公司的财务报表,不能看人事的。
同样,集团A的人事也只能看所有的人事报表。
但是到了下面公司,各公司只能看本公司的相关报表。
比如,公司A的财务部门只能看本公司的财务,不能看其他公司的财务,也不能看本公司的人事。
而同时,财务报表可能含员工薪资,福利,资产等几个块的报表;
人事可能含人员花名册,人员培训情况等几个块的报表。

以上是大的结构上的需求。

小需求是,客户要求把BO报表集成到门户里。
先选择公司,再选择部门,最后选择报表。
比如,公司A的财务领导先选择公司A,然后选择财务,最后选择财务里的员工薪资报表。
要求,当用户跨权限浏览的时候,提示报错。报错后的处理,只要不给他看跨权限的数据,怎么处理都行,比如直接返回上一页,或者跳到出错页。
PS:各公司的一把手,有权利浏览本公司所有部门的所有报表

请问大家有什么好的设计方法



------最佳解决方案--------------------


没什么好办法,因为从数据上讲,universe是最小的授权单位。
一般的做法,有时是只授给用户report的权限,这样这个用户就只能刷新和查看这个预先设计好的report

或者建不同的universeA,universeB,universeC每个中只desinger中把filter的where 子句加上。

以前做过一个,是通过在数据库中设计不同的视图,把视图的权限授给不同的用户。比如在oracle中,建usera,userb,userc
在usera schema中建成 usera.view_data as select * from data where companyid='A',相应B,C中也一样。

然后你可以设置connection让用户登录的时候输入oracle的账号。
------其他解决方案--------------------
又错了
。。。。


select 
decode('时间参数','',1,'时间字段') as 时间, 
decode('地区参数','',1,'地区字段') as 地区, 
decode('部门参数','',1,'时间字段') as 部门, 
sum(度量) as 度量 
from 表 
where 
... 其他条件 
....

------其他解决方案--------------------
自己顶自己
------其他解决方案--------------------
第一种方法是可行的,但是会随着公司结构的膨胀而集聚膨胀
并且,目前的公司结构就很庞大了
第二种方法能说详细下吗?
因为用户登陆的是BO的系统,帐号都是BO里,好象跟数据库关系不大

------其他解决方案--------------------


在你设置universe 的connection的时候,有一个选项就是可以让用户自己输入数据库的账号。

这样如果你能集成BO,WINDOWS,ORACLE/SQL SERVER的账号,比如全部都使用windows的账号进行验证。则可以方便的使用第三种。

第二种很简单。建三个universe, 记得是在class上还是在表上可以设置条件
------其他解决方案--------------------
在数据库层面一般是通过给用户授权来解决的。
------其他解决方案--------------------


BO 不是数据库,是数据仓库分析工具。有自己的分组授权对象和结构。一般是通过在BO中直接进行授权。只有楼主这种特殊需要才需要考虑不同的方案来实现。
------其他解决方案--------------------
可以在一张报表中,查询两个UNIVERSE吗?
我是说,把UNIVERSE像表一样联结查询,然后把结果反映到一个报表上

------其他解决方案--------------------


在一个REP报表文件中可以插入多个universe. 菜单,插入,表格,然后你选择 from different way就行了。

不同的universe没办法直接UNION,你需要先建一个filed link,然后只能做join,但由于companyid上不重复,一个是A,一个是B,所以join后会显示成两列,看看能不能通过公式把这两列合并起来。
------其他解决方案--------------------
啊~~烦啊
让我再考虑考虑
我觉得这个问题是比较普遍的问题,希望能搞出个最佳解决方案
------其他解决方案--------------------


如果数据库是SQL SERVER则建议用第三种方法。直接在数据侧把用户的widnows 账号加到sql server 的用户组中即可。这样就用一个universe实现了。
------其他解决方案--------------------
哎……关键时候哪壶不开提哪壶啊
我们用的是ORACLE
------其他解决方案--------------------


呵呵,我们也是oracle,所以用了方案二,5个universe ,4个是各分公司的,一个是可以看所有的
------其他解决方案--------------------
来抢沙发了啊~~~~~~~~~~~~~
------其他解决方案--------------------
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:29:41
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/10533/
本文WWW.DOC100.NET DOC100.NET版权所有。