Cognos制作报表--基本范例_第1页
Cognos制作报表--基本范例_第2页
Cognos制作报表--基本范例_第3页
Cognos制作报表--基本范例_第4页
Cognos制作报表--基本范例_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 1COGNOSCOGNOS 的使用的使用 1 11 1模型定义模型定义 1 打开 Frame Manager 程序 如下图 2 新建一个项目 建完后 打开该项目 如下图 3 在界面左边中选择 Packages 然后单击右键新建一个包 按照提示一步步做 其中有一步是从数据库的表选所要用到的表 打勾为选用 4 点击 Diagram 显示表 但表之间还没有建立联接关系 通过建立各表关系后如 下图 5 然后将该包发布 点击右键该包选择 Publish Package 将其发布 1 21 2模型的物理和逻辑定义模型的物理和逻辑定义 1 模型定义的规范 将模型分为 2 个部分 分别为物理层和逻辑层 物理层为从数据 源引入表的物理定义和连接关系 逻辑层为业务视角下的逻辑定义 2 物理层的建立 根据数据分析 设计模型中需创建的物理表 以便尽可能的提高 查询语句的运行效率 比较理想的结构是星形结构 一个中间表和多个物理维表 在根名字空间 和数据源同名 下 建立一个名为物理层的目录 在物理层文件 夹下执行 Run Metedate Wizard 将数据源中相关的物理表引入这个目录 然后将 这些表建立连接关系 建议不要有 Orphan 表 如下图 3 逻辑层的定义 在根名字空间下 建立一个名为逻辑层的目录 在逻辑层文件夹 下生成 Query Subject Query Subject 的字段都是根据业务逻辑从物理层从引入 建议字段名都为中文 逻辑层中的表为事实表和维表的结构 在事实表中包含维 度的编码值和指标的值 维表中包括每个维度上编码值和其名称的对应关系 也 可以根据需要建立 Regular Dimension 3 4 说明 在逻辑层中不要建立逻辑表之 间的关系 如下图 4 物理层和逻辑层的建立是灵活的 上面说的只是简单的结构 可以根据需要建立 多层次的名字空间 不同的名字空间定义不同的物理层和逻辑层 1 31 3模型设计的一些技术要点模型设计的一些技术要点 1 首先要了解数据库表的定义和业务需求 以便将报表设计所关联的物理表引入到 物理层中 2 在物理层建立关系要清楚了解表中 KEY 值的定义和维表与中间表之间的关系 关 系中的对应 1 对多 多对多 要设置清楚 可以通过察看 Determinants 来决定 最好咨询数据库设计人员 如下图 CCB COGNOS FTCOMP DV 的唯一值的字段是 COMP3 CODE 3 有时因为数据库数据或者报表需求的原因 维表和中间表的对应关系可能不是最 底层 报表产生的数据可能就会有重复累加值 例如一个维表 company 有 2 种和 中间表对应关系 表 company 有 3 层 其中 2 层 3 层都分别对应中间表 可能不 同表 这时最好在数据源中引入 2 次 company 一个只引入 2 层字段 一个引入 3 层字段 分别在物理层中和中间表建立关系 这时引入 2 层字段的维表就会产生 重复值 这时就需要在维表 company 的 Determinants 中的对应字段进行 Group by 也可以在 SQL 中加入 distinct 如图 Distinct 过滤 4 逻辑层表的逻辑字段的添加 有时 数据库表的现有字段不能满足报表设计的要 求 例如日期维表 month 有 3 个字段 month quarter year month 为 KEY 报表 设计中需要计算上月 上季末月 上年同期月等等 针对这种情况 我们在 month 中增加上月 上季末月 上年同期月等字段 在 reportnet 用交叉查询来计算上 月 上季末月 上年同期月的数据 framework 提供了丰富的函数帮我们增加逻辑 字段 如图 5 2 种 SQL setting Cognos sql 是模型默认的类型 当数据库表从源引入时默认 Cognos sql 支持多数据源 它不是当前数据库的标准 SQL 但能与 COGNOS 良好结合 它对于不同的数据库是透明 的 一般情况下 不用改变这个模式 Native sql 是当前数据库 SQL cognos 直接将 sql 发送到当前数据库中运算 Native sql 不支持多数据源 Native sql 运行效率比较高 我们可以编辑 SQL 可以将一些维表改成 Native 以提高效率 1 41 4层次模型的定义层次模型的定义 1 打开 FrameWork Manager 系统 然后右键点击已建立的数据源 选择 create 再 选择 regular dimention 项 如下图 2 弹出对话框 如下图 然后从左边的 Dimension 项面板中将要建立的层次数据项 依次用鼠标拖到右边的 Hierarchies 面板中 假设以机构部门为例 先将总行机 构拖进去 然后将各省分行拖进去 依此类推 从高层次到低层次 3 分别选中刚才拖进去的数据项 然后分别在下方中的 Role 项中点击 弹出对话框 如下图 4 将 businessKey 项打上勾 注意 刚才拖进去的数据项都要依次这样设置 5 点击 OK 完成 1 51 5在在 COGNOSCOGNOS ReportReport StudioStudio 中制作报表中制作报表 1 5 11 5 1常用控件 功能 方法介绍常用控件 功能 方法介绍 1 页面 在 COGNOS report studio 系统中 页面分为两种 一种是报表页面 即是报表 运行最后要显示数据的页面 是必需的 另一种是提示页面 是为用户选择过滤条件 提供的一个页面 如果报表中同时包含这两种页面 则运行后先显示提示页面 供用 户选择条件后 再转到报表页面 而报表页面显示的数据则是经过从提示页面的选择 条件过滤后的数据 查看页面的情况可将鼠标放到 页面资料管理器 面板上 即弹 出 如下图 2 查询 查询 图标如下图 查询 为数据的显示提供了一个结构 在报表中显示的数据是通过 查询 从数据 源中获取数据的 类似于数据库中视图的概念 打开一个查询 结构如下图 左边红圈中是该查询中的数据结构 或理解为一个表中的字段 而右边红圈中是一些 过滤的条件 类似于查询语句中的 where 句中的条件 3 变量 分为三种变量 第一种是布尔变量 只有两种取值 第二种是字符串变量 可 有多个取值 第三种是语言种类变量 一般来说 前面两种用得比较多 其实 这里 变量 的概念与提示页面中传给报表页面的 参数变量 是完全不同的 也和程序 设计中的变量有所不同 如下图 通常变量中有一个表达式 变量的取值就是根据表达式的结果等到的 如上图选中的 是布尔变量 有 是 与 否 两个值 例如表达式为 帐面收入 度量值 2000 元 那么当结果为真是取值 是 反之取 否 同理 在字符串变量中 各个取值是事 先由用户输入的 这点与布尔变量不同 而表达式中的结果有可能与其中一个取值相 同 总的来说 通过 变量 可以控制控件 页面等的显示和隐藏 显示的样式等 4 列表与交叉表 两者相同的地方就是都是用于显示数据 一般与 查询 联系起来 其实列表与交叉表只是提供一种显示的格式 而真正获取数据的还是 查询 两者不 同的地方就是数据表达的形式不一样 下面举个例 如下图 要显示的数据是 部门 产品 帐面收入 分别用两种表显示 其实功能是一样的 只是表示的格式不同 交叉表交叉的单元格就是确定某一部门某一产品的帐面收入 当然 两种表的区别远不止这么简单 这里只为了说明两种表的特点 5 查询的运算 和 SQL 语句中的运算类似 在 COGNOS 中也提供几种运算 分别是联接 并集 交集 排除 另外还可以直接写 SQL 语句和 MDX 语句 在解决实际问题的时候 可以灵活运用 去弥补 COGNOS 系统提供显示数据格式的不足 下图为并集运算的图标 6 生成变量 属性 对于报表里的控件 模块等可通过生成变量来控制自身的显示和隐 藏 如下图 7 样式变量 属性 对于报表里的控件 模块等可通过生成变量来控制自身的显示样式 与 生成变量 有点不同 样式变量可以根据变量的取值去设置样式 如下图 为某一控件或部件的 生成样式 与一个事先创建好的变量关联后 就可对其进行样式的 设置了 例如对于布尔变量的取值 可分别对 是 和 否 两种取值设置不同的显示样 式 如下图 假设将 小计 数据模块设置样式 当选择布尔变量后 点击 是 取值后 红框中界面 已变为绿色 此时表明当变量取值为 是 的时候要显示的格式 接下来就可设置红圈中 模块的格式了 与此类推 可再次重复以上步骤设置变量为 否 时的显示格式 1 5 21 5 2简单报表的制作举例简单报表的制作举例 1 打开浏览器 进入在 IIS 中设置的网页 如下图 2 点击 Report Studio 超链接 进入对报表的操作 页面会显示出刚才已发布的 包 如下图 3 点击该包后进入报表管理工具 如下图 4 左上角显示所需要用到的表 右边为工作编辑区 可以从左边的表中的字段拖到 右边作为报表输出 如下图 点击运行图标如下图 1 5 31 5 3提供用户选择条件的报表制作提供用户选择条件的报表制作 1 新建一张报表 然后插入数据项 可自定义 如下图 2 为显示期望的报表而制作条件 点击新建 Prompt Page 图标 位置大约在右上角 然后将会显示一张新页面 该页面即是 Prompt Page 页而不是原来的 Page 例如 通过一个下拉列表框供用户选择后 报表的生成根据选择条件去显示出相应的信 息 3 在左边的工具箱中找到 value prompt 如下图 双击或拖到右边 然后向导对话框会弹出 如下图 框中 create a new parameter 意思是产生一个新的变量 由于显示条件选项与 显示报表结果分别在不同页面 所以要用到参数变量来传递条件的值 单击下一步 4 在 create a parameterized filter 项中的 Package item 一行中选择某个 表中的某个字段 其实该字段即为最后显示报表根据的条件 例如字段为 姓名 那么结果显示的报表将会显示与 姓名 某个人相匹配的记录 单击下一步 5 在弹出的对话框中保持默认值 单击下一步 6 在 create query 项中的 value to use 与 value to display 行中选择 对应的字段 前者为报表显示所依据的条件字段 后者为控件中显示给用户看的 字段 其实这两个字段是相对应的 例如分别选择 姓名编号 与 姓名 当 然在报表页中也要相应有 姓名编号 这一项数据 相互对应 单击完成 7 运行查看结果 当选择完后条件后 单击下方的完成按钮即可显示报表结果 1 5 41 5 4实现行属性的目录树展开功能 实现行属性的目录树展开功能 1 5 4 1在 LIST 报表中的现实 1 拖入 6 个字段 并且对产品系列 产品类型分组 如下图 2 添加产品系列 产品类型的页眉 3 拆分产品系列 产品类型的单元格 4 将产品系列 和产品类型的汇总拖到产品名称处 5 删除产品系列 产品类型 6 打开列表的锁 7 按住 CTRL 拖动数量 单位成本 单价到产品类型 产品系列的页眉处 8 在 report page 中插入 HTML 控件 然后拷贝如下代码进去 下面代码主要是定义了两 个函数 一个用于目录树的展开与缩进 另一个用于页面初始化时隐藏一些数据 下面代码 只支持到 2 层目录 更详细的含义可参考的在交叉表中实现目录树功能的注释 代码如下 function ExpandCollapse el var tr el parentElement parentElement var tbl tr parentElement parentElement var sDisplay el src indexOf minus 1 none var sDisplayReverse el src indexOf minus 1 none el src pat images PropertyGroup el src indexOf minus 1 minus plus gif for var i tr rowIndex 1 i 0 trCurrent style display sDisplayReverse else trCurrent style display sDisplay function StartHidden el var tbl el parentElement parentElement parentElement parentElement for var i 0 i 1 trCurrent style display none 9 拖入两个 HTML 项目插入到产品系列与产品类型单元格前面 修改成查询项目查询项目 并修改 表达式 产品系列中 HTML 控件代码如下 gosales goretailers 产品 产品系列 产品类型中 HTML 控件代码如下 gosales goretailers 产品 产品类型 10 删除掉产品系列和产品类型 11 设置产品类型的填充为左侧 20 设置产品名称的填充为左侧 40 12 增加列表页脚 注意 这里的 HTML 控件一定要放入表页脚里面 否则不能实现隐藏数 据的功能 并拷贝 HTML 代码 删除掉列表页脚几个字 代码如下 13 选择列表 并设置列表每页行数为 9999 这样就不用再翻页了 14 这样一个树状报表就做好了 剩下就是调整颜色 样式的工作了 1 5 4 2 交叉表实现 在交叉表中现实目录树有两种方法 第一种主要技术是通过 UNION 等方法首先实现类 似分组的功能 然后再利用 HTML 代码实现 第二种的主要技术是建立在一定的前提下 前 提是 在制作报表前已对数据模型进行了特殊的设计 下面介绍第二种方法 1 在报表中插入的数据如下图所示 界面中分别插入了三个 HTML 控件 与在 LIST 表中位置一样 由于在交叉表中不能对 数据进行分组 所以不能采用在 LIST 表中的实现方法 但是原理是一样的 主要不同 之前要对数据模型进行设计 6 页头中的 HTML 代码如下 纵向折叠 function ExpandCollapse1 el if el src indexOf blank 0 return var tr el parentElement parentElement var tbl tr parentElement 判断加减号 el src pat images PropertyGroup el src indexOf minus 1 minus plus gif 判断层次 每一个最外层的 if 实现一级目录的展开与缩进 if tr cells 0 style paddingLeft 20px 20px 表示是第一级目录 循环读取并判断表中每一条记录 for var i tr rowIndex 1 i 0 判断是否图标为 号 如果是则有可能是其已经展开了的子目录 但现还不能确定是否是其子 目录 有可能是同一级的已展开了的目录 if trCurrent cells 0 style paddingLeft 40px 判断是否为当前目录的子目录 若是则展开 因为 minus 标记表明已经由 plus 转变过来 即点击了 号 表示可以显示 trCurrent style display 并将 号图标变为 号以表明目录已展开 方便下次判断 trCurrent cells 0 getElementsByTagName IMG item 0 src pat images PropertyGroup plus gif 以下 if 语句实现展开后缩进 if el src indexOf plus 0 if trCurrent cells 0 style paddingLeft 40px trCurrent cells 0 style paddingLeft 60px trCurrent cells 0 style paddingLeft 80px 隐藏当前目录下的行记录 trCurrent style display none 以下模块功能和上面差不多 if tr cells 0 style paddingLeft 40px for var i tr rowIndex 1 i 0 if trCurrent cells 0 style paddingLeft 60px trCurrent style display trCurrent cells 0 getElementsByTagName IMG item 0 src pat images PropertyGroup plus gif if el src indexOf plus 0 if trCurrent cells 0 style paddingLeft 60px trCurrent cells 0 style paddingLeft 80px trCurrent style display none if tr cells 0 style paddingLeft 60px for var i tr rowIndex 1 i 0 if trCurrent cells 0 style paddingLeft 80px trCurrent style display if el src indexOf plus 0 if trCurrent cells 0 style paddingLeft 80px trCurrent style display none 该函数实现初始化页面时隐藏一些记录 function StartHidden el var tbl el previousSibling var trCurrent2 tbl rows 0 var subnum var i j jj 判断层次 若要显示总数 则消除下面这条语句的注释 trCurrent2 cells trCurrent2 cells length 1 children 0 innerText 合计 for var j 1 j trCurrent2 cells length j if trCurrent2 cells j children 0 innerText indexOf 0 continue if trCurrent2 cells j children 0 innerText indexOf 0 continue 纵向折叠 若要显示总数 则消除下面这条语句的注释 var trCurrent1 tbl rows 1 cells 0 children 1 innerText 合计 tbl rows 1 cells 0 getElementsByTagName IMG item 0 src pat images blank gif 从表中第二条记录开始判断子目录是否展开了 若展开了则隐藏 第一条为合计汇总 for i 2 i tbl rows length i trCurrent1 tbl rows i if trCurrent1 cells 0 children 1 innerText indexOf 0 trCurrent1 style display none continue if trCurrent1 cells 0 children 1 innerText indexOf 0 trCurrent1 style display none continue if trCurrent1 cells 0 children 1 innerText indexOf 0 trCurrent1 style display none if trCurrent1 cells 0 children 1 innerText indexOf 0 trCurrent1 style display none trCurrent1 cells 0 getElementsByTagName IMG item 0 src pat images blank gif 2 表中 即中间 的 HTML 代码如下 7 最后的 HTML 代码如下 1 5 51 5 5如何在交叉表中的对某一行或某一列进行汇总如何在交叉表中的对某一行或某一列进行汇总 1 如下图格式所示 图中的 合计 字段是在每一行中对所有列进行总计 经验证 对交叉表的度量值进行汇 总 只要对该度量值利用函数进行计算就行了 不用涉及到非度量值属性 具体方法如下 在控件面板中将 query calculation 控件拖到要汇总的某行或列中 然后会弹出相应对话 框 可根据要汇总的需要而编写相应的汇总函数即可 1 5 61 5 6创建模板的方法创建模板的方法 1 在 COGNOS 中新建一个报表文件 其实就是普通的报表文件 然后对需要用到的模 板格式进行编辑 例如下图 3 编辑完后 选中文件菜单中的 convert to template 项将普通文件转换为模板文件 最 后保存该模板即可 4 当应用这个模板时 在 COGNOS 中新建一个报表文件 在弹出的新建对话框中如下图 选择 existing 项 然后选择刚才创建的模板 1 5 71 5 7制作钻取报表 报表与报表之间的钻取 制作钻取报表 报表与报表之间的钻取 1 该方法涉及到两张报表 一张报表为源表 另一张为被钻取后的报表 即目标表 2 创建一个新的目标报表 并创建一个 LIST 输入相关数据 如下图 数据内容可自 定 3 然后新建一个 filter 并设置表达式 如下图 表达式中选择一个数据项作为两张报表间相互关联的依据 例子中选择了 用户名 作为钻取的依据 并给它一个参数 该参数用于传递从源报表得来的数值 4 保存该报表为 目标报表 5 创建另一个报表作为源报表 这里可插入一个 LIST 为了简化 这里只插入 用 户名 数据项 然后选定 用户名 数据项 点击图标 弹出对话框如下图 6 然后点击增加图标 左下角位置 在 target Report 面板中的 target report 一 栏中选择刚才建立的目标报表 然后再点击下方的图标 弹出对话框如下图 7 在 Method 一项中选 pass data item 在 value 中选择 用户名 数据项 即 与刚才目标报表中的参数对应 8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论