Cognos报表开发技巧整理

合集下载

Cognos汇总

Cognos汇总

Cognos汇总cognos学习笔记第⼆部分 Query Studio介绍 (p15)在Query Studio中创建⾃助式报表。

选择“包(Packege)”:使⽤Query Studio 和Report Studio操作报表之前都要先选择⼀个“包”。

“包”事先由技术⼈员在Framework Manager中打好并发布。

进⼊门户后可以看到已经发布的“包”。

“包”中只含有数据结构⽽不含数据本⾝。

Query Studio 界⾯:menu: insert data,edit data,change layout,run report,manage fileedit data:filter过滤,sort排序,summarize,format格式,calculate计算,rename重命名change layout:chart,edit title,set web page size,set page breaks,group,pivotrun report:run with all data,preview with no data,view in PDF/excel 2000/CSV/XML format,advanced query optionsmanage file: new report,save,save as查询主题和查询项:模型是来⾃⼀个或多个数据库的数据结构的业务展现。

模型含有若⼲查询主题(query subject),查询主题包含⼀些能够添加到报表中的查询项(query item)。

模型的数据内容来⾃Framework Manager发布的“包”(Package)。

结构如下:模型-->查询主题-->查询项。

查询主题类似“表”,查询项类似“字段”。

Query Studio ⼯具栏 (p21)删除、撤消、重做、运⾏、过滤、排序、汇集、计算、图表、分组、交叉表、去分组、设段、交换、组收缩、组展开给⾃助式报表添加数据:⽅式有:双击(查询项),拖拽(查询项)、(选中查询项)按Insert data。

Cognos制作报表--基本范例

Cognos制作报表--基本范例

1COGNOS的使用1.1模型定义1,打开Frame Manager程序,如下图:2,新建一个项目,建完后,打开该项目,如下图:3,在界面左边中选择“Packages”,然后单击右键新建一个包。

按照提示一步步做,其中有一步是从数据库的表选所要用到的表,打勾为选用。

4,点击”Diagram”显示表,但表之间还没有建立联接关系,通过建立各表关系后如下图5,然后将该包发布,点击右键该包选择“Publish Package”将其发布。

1.2模型的物理和逻辑定义1,模型定义的规范:将模型分为2个部分,分别为物理层和逻辑层,物理层为从数据源引入表的物理定义和连接关系,逻辑层为业务视角下的逻辑定义。

2,物理层的建立:根据数据分析,设计模型中需创建的物理表,以便尽可能的提高查询语句的运行效率(比较理想的结构是星形结构,一个中间表和多个物理维表)。

在根名字空间(和数据源同名)下,建立一个名为物理层的目录,在物理层文件夹下执行Run Metedate Wizard将数据源中相关的物理表引入这个目录,然后将这些表建立连接关系,建议不要有Orphan表。

如下图:3,逻辑层的定义:在根名字空间下,建立一个名为逻辑层的目录,在逻辑层文件夹下生成Query Subject,Query Subject的字段都是根据业务逻辑从物理层从引入,建议字段名都为中文。

逻辑层中的表为事实表和维表的结构,在事实表中包含维度的编码值和指标的值,维表中包括每个维度上编码值和其名称的对应关系。

也可以根据需要建立Regular Dimension(3.4说明),在逻辑层中不要建立逻辑表之间的关系。

如下图:4,物理层和逻辑层的建立是灵活的,上面说的只是简单的结构,可以根据需要建立多层次的名字空间,不同的名字空间定义不同的物理层和逻辑层。

1.3模型设计的一些技术要点1,首先要了解数据库表的定义和业务需求,以便将报表设计所关联的物理表引入到物理层中。

2,在物理层建立关系要清楚了解表中KEY值的定义和维表与中间表之间的关系,关系中的对应(1对多、多对多)要设置清楚,可以通过察看Determinants来决定,最好咨询数据库设计人员。

Cognos报表开发

Cognos报表开发

谢谢!
+ 由于mdc文件中的数据需要和数据库同步,
所以需要对mdc文件做定期更新,就需要编 写Cognos脚本来完成更新任务,再使用 Cognos自带的任务调度工具 Scheduler 来完 成定期更新。 + 脚本文件代码如下:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PowerPlay Enterprise Server 作为一个多 平台企业级的应用程序服务器,其功能是将 多维立方体进行统一的部署,以达到企业级 OLAP分析的目的,PowerPlay Enterprise Server 具有强大的部署能力和可扩展性,可以部署 在多台服务器上以达到负载均衡的目的。
– PowerPlay Transformation Server
+ Impromptu 模块 – Impromptu Administrator + 安全管理工具(LDAP) – Microsoft Active Direcotry Server – Netscape Directory Server
+ 一、Cognos 产品介绍 + 二、Impromptu 平面数据制作 + 三、Powerplay 多维数据体制作 + 四、Powerplay 数据立方体发布

Cognos的PowerPlay报表模式

Cognos的PowerPlay报表模式

102
高级子集对话框
基本定义区
复合定义区
103
建立高级子集(Advanced Subset) 建立高级子集
用高级子集定义可以建立满足复合条件和限制的子集。 用高级子集定义可以建立满足复合条件和限制的子集。 首先确定子集的基本定义 首先确定子集的基本定义 为子集确定一个名称 为子集确定一个名称 选定一个维度 选定一个维度 选定这个维度上的某一层或多个层 如果选多层就会 选定这个维度上的某一层或多个层 (如果选多层就会 形成嵌套表) 形成嵌套表
106
高级子集的进一步限定: 高级子集的进一步限定:Value
例如: 户外产品销售收入最高的三个国家(排除欧洲后 销售收入最高的三个国家 排除欧洲后)是 例如 户外产品销售收入最高的三个国家 排除欧洲后 是 美国、加拿大、澳大利亚。 美国、加拿大、澳大利亚。
子集维度 度量 选值方法
限定的维度 与层
短拖放区的类别选择: 短拖放区的类别选择: 的类别选择 只选中单个类别。 只选中单个类别。
91
在嵌套交叉表中钻取 短拖放区的类别钻取 下层类别加入 短拖放区的类别钻取----下层类别加入。 的类别钻取 下层类别加入。
92
在嵌套交叉表中排名和排序 在嵌套交叉表中,排名不会破坏数据结构。 在嵌套交叉表中,排名不会破坏数据结构。 不会破坏数据结构 由于对环境产品排序将破坏数据的结构, 由于对环境产品排序将破坏数据的结构,此刻对 排序选项将无效 该列的排序选项将无效. 该列的排序选项将无效
最底层的类别 标准报表
系谱子集定义 100
查找型子集定义(Find-in-Cube Subset) 查找型子集定义
查找立方体中所有与 指定的字符串匹配的 类别或维度

Cognos制作报表--基本范例5

Cognos制作报表--基本范例5

常用控件、功能、方法介绍1、页面:在COGNOS report studio系统中,页面分为两种,一种是报表页面,即是报表运行最后要显示数据的页面,是必需的。

另一种是提示页面,是为用户选择过滤条件提供的一个页面,如果报表中同时包含这两种页面,则运行后先显示提示页面,供用户选择条件后,再转到报表页面,而报表页面显示的数据则是经过从提示页面的选择条件过滤后的数据。

查看页面的情况可将鼠标放到“页面资料管理器”面板上,即弹出,如下图:2、查询:“查询”图标如下图:“查询”为数据的显示提供了一个结构,在报表中显示的数据是通过“查询”从数据源中获取数据的,类似于数据库中视图的概念,打开一个查询,结构如下图:左边红圈中是该查询中的数据结构,或理解为一个表中的字段,而右边红圈中是一些过滤的条件,类似于查询语句中的where句中的条件。

3、变量:分为三种变量,第一种是布尔变量,只有两种取值,第二种是字符串变量,可有多个取值,第三种是语言种类变量。

一般来说,前面两种用得比较多。

其实,这里“变量”的概念与提示页面中传给报表页面的“参数变量”是完全不同的,也和程序设计中的变量有所不同。

如下图:通常变量中有一个表达式,变量的取值就是根据表达式的结果等到的,如上图选中的是布尔变量,有“是”与“否”两个值。

例如表达式为“帐面收入“度量值>2000元,那么当结果为真是取值“是”,反之取“否”。

同理,在字符串变量中,各个取值是事先由用户输入的,这点与布尔变量不同,而表达式中的结果有可能与其中一个取值相同。

总的来说,通过“变量”可以控制控件、页面等的显示和隐藏,显示的样式等。

4、列表与交叉表:两者相同的地方就是都是用于显示数据,一般与“查询”联系起来,其实列表与交叉表只是提供一种显示的格式,而真正获取数据的还是“查询”。

两者不同的地方就是数据表达的形式不一样。

下面举个例,如下图:要显示的数据是:部门,产品,帐面收入。

分别用两种表显示,其实功能是一样的,只是表示的格式不同,交叉表交叉的单元格就是确定某一部门某一产品的帐面收入。

2024版Cognos BI 10教程:第一张复杂报表

2024版Cognos BI 10教程:第一张复杂报表

03
社交媒体共享
集成社交媒体分享按钮,方便用户将报表分享到社交媒体平台。
01
生成报表链接
在Cognos BI 10中生成报表的URL链接,方便用户直接通过链接访问报表。
02
嵌入代码
提供嵌入代码功能,允许用户将报表嵌入到自己的Web页面或应用程序中。
共享报表链接或嵌入代码
报表访问统计
记录报表的访问次数、访问时间等信息,以便了解报表的使用情况。
04
如果遇到连接失败的情况,可以检查网络连通性、认证信息正确性等方面的问题,并查看系统日志获取更多错误信息。
04
CHAPTER
复杂报表制作步骤详解
打开Cognos BI 10,创建一个新的报表。
将图表对象拖拽到报表设计区域,并调整其大小和位置。
在工具栏中选择合适的图表类型,例如柱状图、折线图、饼图等。
复制/粘贴
02
01
03
04
05
常用工具栏操作演示
03
CHAPTER
数据源连接与配置
打开Cognos BI 10,点击“数据源”图标,选择“新建数据源连接”。
填写数据源连接的基本信息,如数据源名称、描述、服务器地址、端口号等。
创建新的数据源连接
在弹出的对话框中选择合适的数据源类型(如关系型数据库、多维数据集等)。
系统会尝试连接到指定的数据源,并显示连接结果。
如果连接成功,则说明数据源配置正确;如果连接失败,则需要检查配置信息并重试。
测试数据源连接成功性
注意事项及常见问题解答
01
确保在创建数据源连接时填写正确的服务器地址、端口号、认证信息等。
02
根据实际情况选择合适的数据源类型和相应的驱动程序。

最新Cognos的高级报表制作技巧--Variable汇总

最新Cognos的高级报表制作技巧--Variable汇总

C o g n o s的高级报表制作技巧--V a r i a b l eCognos的高级报表制作技巧--Variables【IT168 技术】IBM Cognos 商业智能系列软件提供了专业报表的制作平台,尤其在报表之间的关联分析上有着很强大的功能。

本文从基于条件的动态报表制作和报表之间的穿透钻取两个方面介绍如何用 IBM Cognos 商业智能软件制作出专业的报表。

基于条件制作动态报表在使用报表时,用户往往希望某些“异常数据”能够突出显示,以便其更快速了解数据的总体状态。

如:性能数据一旦超过设定的阀值,则突出显示为黄色或者红色;在其他情况下显示为绿色。

IBM Cognos Report Studio 就提供了这样一种机制,在用户生成报表的时候,能够自动根据开发人员事先设定好的条件以及显示格式,对报表进行动态显示。

在制作基于条件的动态报表时,需要注意三要素。

第一个要素是条件,条件是用以判断的规则,通常为一个变量表达式及其一系列取值,如,上面的性能数据超过阀值。

第二个要素是用于和条件绑定的特定数据项 (Data Item),条件表达式只有和具体的数据项相关,以数据项运行时的取值作为条件输入,才能达到动态显示报表的目的,如,上面提到的性能数据。

第三个要素条件格式,即在条件表达式的某一特定取值下,报表显示的格式,如字体,颜色,阴影等。

总得来说,基于条件的动态报表的实现就是根据某特定数据项在报表运行时的取值,计算变量表达式的取值,并根据变量表达式的取值,决定报表的显示格式。

Cognos 支持三种类型的变量:字符串变量,布尔变量和语言变量。

以下的三小节将分别介绍使用这三种变量制作动态报表的过程。

使用字符串变量制作动态报表在 2.1 节中,我们将介绍简单的使用字符串变量的制作动态报表的过程。

我们希望实现根据项目状态的取值,动态显示报表中“项目状态”单元格的背景颜色:当项目状态为R(Red) 时,项目状态单元格的背景显示为红色;当项目状态为 Y(Yellow) 时,项目状态单元格的背景显示为黄色;当项目状态为 G(Green) 时,项目状态单元格的背景显示为绿色;当项目状态为 C (Complete) 时,项目状态单元格的背景显示为蓝色。

Cognos制作报表--基本范例12

Cognos制作报表--基本范例12

制作钻取报表(报表与报表之间的钻取)
1,该方法涉及到两张报表,一张报表为源表,另一张为被钻取后的报表,即目标表。

2,创建一个新的目标报表,并创建一个LIST,输入相关数据,如下图(数据内容可自定):
3,然后新建一个filter并设置表达式,如下图:
表达式中选择一个数据项作为两张报表间相互关联的依据,例子中选择了“用户名”作为钻取的依据,并给它一个参数,该参数用于传递从源报表得来的数值。

4,保存该报表为“目标报表”。

5,创建另一个报表作为源报表,这里可插入一个LIST,为了简化,这里只插入“用户
名”数据项,然后选定“用户名”数据项,点击图标,弹出对话框如下图:
栏中选择刚才建立的目标报表。

然后再点击下方的图标,弹出对话框如下图:
7,在Method一项中选”pass data item”,在value中选择“用户名”数据项,即与
刚才目标报表中的参数对应。

8,保存为“源报表”,然后运行,点击在源报表中的“用户名”项下的任一数据项,例如用户李四,系统即会根据李四这个人的资料转到目标报表显示关于李四这个人的相关信息,这些显示的内容就是在目标报表中设计的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1实现行属性的目录树展开功能。

1.1在LIST报表中的现实1.拖入6个字段,并且对产品系列、产品类型分组,如下图:2.添加产品系列、产品类型的页眉3.拆分产品系列、产品类型的单元格4.将产品系列、和产品类型的汇总拖到产品名称处5.删除产品系列,产品类型6.打开列表的锁7.按住CTRL,拖动数量、单位成本、单价到产品类型,产品系列的页眉处8.在report page中插入HTML控件,然后拷贝如下代码进去,下面代码主要是定义了两个函数,一个用于目录树的展开与缩进,另一个用于页面初始化时隐藏一些数据,下面代码只支持到2层目录,更详细的含义可参考的在交叉表中实现目录树功能的注释。

代码如下:<script>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 < tbl.rows.length; i++ ){var trCurrent = tbl.rows( i );if ( trCurrent.cells( 0 ).firstChild && trCurrent.cells( 0 ).getElementsByTagName( "IMG" ).length ){if ( tr.cells(0).style.paddingLeft =="" && trCurrent.cells(0).style.paddingLeft =="20px" ){if (el.src.indexOf( "minus" ) == -1 ){trCurrent.cells(0).getElementsByTagName("IMG").item(0).src = "../pat/images/PropertyGroup_plus.gif";}}else {break;}}if ( tr.cells(0).style.paddingLeft =="" && trCurrent.cells(0).style.paddingLeft =="40px" && el.src.indexOf( "minus" ) >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 < tbl.rows.length; i++){var trCurrent = tbl.rows(i);if (trCurrent.cells(0).style.paddingLeft.indexOf("px") > -1){trCurrent.style.display = "none";}}}</script>9.拖入两个HTML项目插入到产品系列与产品类型单元格前面,修改成查询项目,并修改表达式产品系列中HTML控件代码如下:'<img onclick=''ExpandCollapse(this)'' src=''../pat/images/PropertyGroup_plus.gif'' style=''cursor:hand; vertical-align:middle; margin-right:2px''/><span onclick=''ExpandCollapse(this.previousSibling)'' style=''cursor:hand''>'+ [gosales_goretailers].[产品].[产品系列] + '</span>'产品类型中HTML控件代码如下:'<img onclick=''ExpandCollapse(this)'' src=''../pat/images/PropertyGroup_plus.gif'' style=''cursor:hand; vertical-align:middle; margin-right:2px''/><span onclick=''ExpandCollapse(this.previousSibling)'' style=''cursor:hand''>'+ [gosales_goretailers].[产品].[产品类型] + '</span>'10.删除掉产品系列和产品类型11.设置产品类型的填充为左侧20,设置产品名称的填充为左侧4012.增加列表页脚(注意,这里的HTML控件一定要放入表页脚里面,否则不能实现隐藏数据的功能),并拷贝HTML代码,删除掉列表页脚几个字代码如下:<img onload='StartHidden(this)' src='../pat/images/blank.gif'/>13.选择列表,并设置列表每页行数为9999(这样就不用再翻页了)14.这样一个树状报表就做好了,剩下就是调整颜色,样式的工作了1.2交叉表实现在交叉表中现实目录树有两种方法,第一种主要技术是通过UNION等方法首先实现类似分组的功能,然后再利用HTML代码实现,第二种的主要技术是建立在一定的前提下,前提是:在制作报表前已对数据模型进行了特殊的设计。

下面介绍第二种方法。

1,在报表中插入的数据如下图所示:界面中分别插入了三个HTML控件,与在LIST表中位置一样。

由于在交叉表中不能对数据进行分组,所以不能采用在LIST表中的实现方法,但是原理是一样的。

主要不同之前要对数据模型进行设计。

paddingLeft 属性设置元素的左内边距。

padding 属性定义元素边框与元素内容之间的空间。

1、页头中的HTML代码如下:<script>/*纵向折叠*/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 < tbl.rows.length; i++ ){var trCurrent=tbl.rows(i);if(trCurrent.cells(0).style.paddingLeft =="20px")/*如果是当前目录则退出循环不作处理*/{break;}if ( el.src.indexOf( "minus" ) >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" )){/*隐藏当前目录下的行记录。

相关文档
最新文档