RS交叉表自动汇总后百分比列显示错误之解决方案
2016-01-20 15:36
232 查看
可以说在从事Cognos开发的过程中,仅仅对数据展现而言,大多数用户使用最多的工具便是Report Studio了,此工具可以帮助我们快速的构建一些可供用户自主选择的数据报告。当然我个人认为没有什么开发工具是完美的,又或许是有一些高端的功能是普通人发现不了的,今天我们就来说一下在RS的一个常规交叉表中显示百分比的问题.
模型 :FM发布的DMR模型
Cognos Version:Cognos10.2.1
DB type :SQLserver 2008R2
占比我们基于现有的数据项随便的写一个公式,没有任何业务意义,如下图所示
占比公式:订单笔数/订单金额
2014年总的占比为:4,502,953 /443,688,319.35 =1.01%
2015年总的占比为:8,960,473 /891,635,581.05 =1.00%
总结可以得出,自动的总计是把百分比按照度量值得标准,把所有百分比的列的数值汇总了而已,而实际的汇总是:年订单笔数/年订单金额
基于物理层创建了一个查询主题,赋予字段以中文名称,方便开发人员理解,具体如下图所示,确保年,省份,订单笔数,订单金额 都更改引
用为视图层
然好我们再创建一个数据项'汇总'表达式如下图所示
运行查看结果,从下图可以看出,我们自己添加的汇总生效了,接下来就是删除自动汇总保留我们自己手工添加的汇总即可,解决了交叉表占比汇总错误的问题
类似于group by '汇总'的sql语句
2:首先结论1 是必须的,如果我们的FM数据包是动态模式发布的,那么我们必须更改数据项的引用层为物理层或者视图层
3:首先结论1 是必须的,如果我们的FM数据包是非动态模式发布的,那么我们无需更改数据项的引用层,发布层和数据层,物理层都可以
4:动态模式发布的数据包查询的时候生成的是本地MDX查询,非动态模式发布的数据包查询的时候生成的是本地SQL
一:环境配置
操作系统 : Win10 专业版模型 :FM发布的DMR模型
Cognos Version:Cognos10.2.1
DB type :SQLserver 2008R2
二:问题描述
2.1:设计过程
用RS新建一个交叉表,从模型中拖入了对应的行和列,然后选中省份,在菜单栏选择总计,结构如下图所示,即展示每一年每一个省份的相关数据和占比,占比我们基于现有的数据项随便的写一个公式,没有任何业务意义,如下图所示
占比公式:订单笔数/订单金额
2.2:运行结果
从下图可以看出,运行后汇总行除了占比列之外其他的度量值汇总是正确的,但是2014年和2015年的占比是错误的,从下面的计算可以看出来正确结果2014年总的占比为:4,502,953 /443,688,319.35 =1.01%
2015年总的占比为:8,960,473 /891,635,581.05 =1.00%
总结可以得出,自动的总计是把百分比按照度量值得标准,把所有百分比的列的数值汇总了而已,而实际的汇总是:年订单笔数/年订单金额
三:解决方案
3.1:方法1:更改数据项引用位置
3.1.1:查看默认查询结构
如下图所示,我们找到我们交叉表对应的查询,数据项如下图所示,都来自我们的星型模型层-订单分析3.1.2:更改默认查询结构
更改上图中的 年,省份,订单笔数,订单金额的引用位置,这里我们可以改为物理层(table)或者是视图层(view),这里说的视图层只是基于物理层创建了一个查询主题,赋予字段以中文名称,方便开发人员理解,具体如下图所示,确保年,省份,订单笔数,订单金额 都更改引
用为视图层
然好我们再创建一个数据项'汇总'表达式如下图所示
3.1.3:重新拖入布局
根据3.1.2中的查询项,更换原来的年,省份,订单笔数,订单金额,然后把汇总数据项放在省份下面,然后给省份添加自动汇总,如下图所示运行查看结果,从下图可以看出,我们自己添加的汇总生效了,接下来就是删除自动汇总保留我们自己手工添加的汇总即可,解决了交叉表占比汇总错误的问题
3.2:方法2:重新发布数据模型
3.2.1:还原模型
把模型还原到初始的状态,即数据项全部来自模型层,即下面的状态3.2.2 设计报表格式
新建汇总数据项和3.1中的操作一样,把汇总放到省份下面,如下图所示,然后保存报表3.2.3 重新发布FM
到Frame Work设计界面,重新发布报表引用的数据包,以非动态的模式发布,如下图所示3.2.4 运行查看效果
四:问题分析
1:要解决此问题必须不能使用RS中的自动汇总必须我们自己添加一行自定义汇总,如上图中的最后一行数据,其实SQL默认的生成了类似于group by '汇总'的sql语句
2:首先结论1 是必须的,如果我们的FM数据包是动态模式发布的,那么我们必须更改数据项的引用层为物理层或者视图层
3:首先结论1 是必须的,如果我们的FM数据包是非动态模式发布的,那么我们无需更改数据项的引用层,发布层和数据层,物理层都可以
4:动态模式发布的数据包查询的时候生成的是本地MDX查询,非动态模式发布的数据包查询的时候生成的是本地SQL
相关文章推荐
- 按bean的属性值对list集合进行排序
- img如果没有图片显示默认图片效果
- Win7安装.Net framework 3.5时出错的某解决办法
- Debian 升级到 PHP 7,并支持并行安装
- 12个css高级技巧汇总
- apache mina 与 SEDA
- android 多进程
- 根据 inode number 查找文件
- iOS中UISearchBar的placeholder字体颜色以及背景色
- 项目小结
- Python几种常用的测试框架
- 使用一个例子去理解CLASS,类的内容(2)
- mkdirs自动创建文件夹
- 新安装和已安装nginx如何添加未编译安装模块/补丁
- 怎样对EDIUS屏幕进行自定义布局
- 各大浏览器 CSS Hack 收集
- 矩阵相乘FOX算法的mpi实现
- POJ 3295 Tautology
- iOS应用架构谈(二):View层的组织和调用方案(下)
- CloudFlare防护下的破绽:寻找真实IP的几条途径