uap6.3_报表平台关键技术说明

guocx2008 贡献于2016-11-08

作者 admin  创建于2013-07-05 08:43:00   修改者Microsoft  修改于2013-12-27 07:13:00字数83920

文档摘要:本文针对V6.3报表平台功能进行介绍,这是为满足各类用户在报表分析方面的综合要求,提供的一个分析型报表的解决方案。其核心是基于语义模型定义自由报表,其格式设计中可进行各类分析设置;设计好的自由报表可发布为节点,供用户进行实时查询分析和定时订阅发布等各种方式的使用。
关键词:

 大中型企业与公共组织云平台 UAP6.3 报表平台关键技术说明 用友软件股份有限公司 2013年7月11日 文档控制 更改记录 大中型企业与公共组织云平台 日期 作者 版本 更改参考/备注 200 2011-12-01 1.0 审校 日期 审校人 版本 审校意见 200 批准 姓名 职位 签字 序号 姓名 分发地点 分发人员 版权 ©2013用友集团版权所有。 未经用友集团的书面许可,本文档任何整体或部分的内容不得被复制、复印、翻译或缩减以用于任何目的。本文档的内容在未经通知的情形下可能会发生改变,敬请留意。请注意:本文档的内容并不代表用友软件所做的承诺。 大中型企业与公共组织云平台 目录 版权 3 目录 4 1. 前言 9 2. 总体介绍 10 2.1. 报表平台技术框架 10 2.2. 应用流程 11 2.3. 入门 13 2.3.1. 自由报表的新建 13 2.3.2. 自由报表的格式设计 14 2.3.3. 语义模型的使用 15 2.3.4. 可扩展区域 16 2.3.5. 数据预览功能 19 2.3.6. 分析功能 20 2.4. 小结 21 3. 基本功能 22 3.1. 可扩展区域管理 22 3.2. 排序 25 3.3. 筛选 28 3.3.1. 单值筛选 28 3.3.2. 筛选 29 3.3.3. 筛选条件 30 3.4. 页维度 32 3.4.1. 页维度的生成 33 3.4.2. 页维度的删除 35 大中型企业与公共组织云平台 3.4.3. 页维度的设置对话框 35 3.4.4. 页维度过滤按钮事件 45 3.5. 固定成员 45 3.6. 分组 50 3.7. 统计 52 3.8. 区域设置向导 56 3.9. 排名函数 68 3.10. TopN分析 71 3.11. 同比环比 77 3.12. 树形展示 81 3.13. 数据格式 85 3.14. 条件格式 88 3.14.1. 满足以下条件的单元设置格式 89 3.14.2. 使用公式确定要设置的格式单元格的格式 91 3.14.3. 基于各自值设置所有单元的格式 93 3.14.4. 删除条件格式 97 3.15. 单元公式 97 3.16. 交叉 107 3.16.1. 交叉表的简单制作 107 3.16.2. 交叉小计 111 3.17. 隐藏管理 113 3.18. 分栏显示 114 3.19. 数值型字段的小数 119 3.20. 报表参数和变量的使用 120 3.20.1. 参数和变量的定义 120 3.20.2. 参数和变量的使用 122 3.20.3. 参数和变量的赋值 123 3.21. 图表设置 124 3.21.1. 图表类型页签 125 大中型企业与公共组织云平台 3.21.2. 数据定义页签 126 3.21.3. 图标属性页签 128 3.21.4. 其他需要注意的地方 129 3.22. 打印 130 3.22.1. 常规打印 130 3.22.2. 打印扩展接口 135 3.23. 自由报表查询 143 3.23.1. 查询面板 144 3.23.2. 查询对话框 168 3.23.3. 查询扩展接口 172 3.23.4. 对单元公式和穿透的支持 177 3.24. 主组织属性设置 179 3.24.1. 报表数据权限 179 3.24.2. 主组织属性设置 179 3.24.3. 数据权限过滤规则 182 4. 分析功能综合应用 184 4.1. 分组功能的应用 184 4.1.1. 列表中的多级分组 184 4.1.2. 交叉表结合分组应用 187 4.2. 数据依赖处理区域拼接 189 5. 报表发布节点 193 5.1. 报表的发布 193 5.1.1. 发布为查询型节点 193 5.1.2. 发布为报表型节点 196 5.2. 发布后节点 196 5.2.1. 查询节点 196 5.2.2. 报表节点 202 5.3. 另一种报表节点的实现 205 大中型企业与公共组织云平台 5.4. 报表订阅中心 211 5.4.1. 订阅报表报表 212 5.4.2. 报表组合订阅 214 5.4.3. 订阅维护 215 5.5. 报表的导入导出 216 6. 穿透、联查和联动 218 6.1. 报表穿透 218 6.2. 报表联查 221 6.2.1. 报表联查更深的一点理解 221 6.2.2. 业务联查的实现步骤 221 6.2.3. 工具方法 230 6.3. 区域联动 234 7. 报表节点的扩展 239 7.1. 查询动作扩展 239 7.2. 查询条件 242 7.3. 区域条件 244 7.4. 业务格式 245 7.5. 格式调整器 248 7.6. 报表订阅相关接口 250 7.7. 组织权限扩展接口 253 7.8. 报表变量的赋值实现 255 7.9. 工具方法 258 8. 报表图表 284 8.1. 图表类型 284 8.1.1. 图表分类 284 8.1.2. 图表详细说明 285 8.2. 图表属性 288 8.2.1. 标题 288 大中型企业与公共组织云平台 8.2.2. 分类轴 288 8.2.3. 值域轴 289 8.2.4. 图例 289 8.2.5. 标签 290 8.2.6. 饼图属性 291 9. 产品轻量 293 9.1. 分析上下文 293 9.2. 报表轻量展现 296 9.3. 交互操作 296 9.4. 报表链接 297 9.5. 默认查询方案 298 9.6. 预警 300 9.6.1. 设置预警 300 9.6.2. 轻量显示效果 303 9.7. 发布 303 9.7.1. 发布为portal节点 303 9.7.2. 发布为portlet 314 10. 商业分析门户 320 11. 辅助开发工具 324 11.1. 安装盘脚本 324 11.1.1. 构造平台中支持自由报表(以及语义模型) 324 11.1.2. 发布的报表节点导出 325 11.2. 安装程序 326 1. 前言 本文针对V6.3报表平台功能进行介绍,这是为满足各类用户在报表分析方面的综合要求,提供的一个分析型报表的解决方案。其核心是基于语义模型定义自由报表,其格式设计中可进行各类分析设置;设计好的自由报表可发布为节点,供用户进行实时查询分析和定时订阅发布等各种方式的使用。 大中型企业与公共组织云平台 报表平台具有以下特点: n 针对企业不同业务角色,提供多样使用方式:报表数据查询人员可以在基于自由报表发布的查询节点中直接进行查询分析,而不需具备较深技术背景;专业的分析报表设计人员则可以全面使用设计功能实现复杂报表的定义和发布; n 支持多种数据来源:系统支持多种语义模型定义方式,还支持注册其他类型语义模型提供者,多来源数据都可以在一张自由报表中进行数据分析和展现; n 报表支持多区域模型,多个区域按照数据分析结果各自动态展开;多区域和多数据来源之间均可以设置依赖关系,能灵活组合拼装出各类样式的复杂报表; n 格式设计和报表展现效果一致:各种数据分析和格式设置都在设计界面有直观展现,特别是交叉表的设计方式突破以往,能够可视化的直接定义维度指标及各类展现效果; n 提供了分析图表功能:提供了各类常见图表分析功能; n 分析功能和交互性加强:全面支持排序/过滤/分组/统计/交叉/排名函数/TopN等分析功能,并具有页维度和待定参数等交互特性。 n 支持数据追踪:自由报表中的明细数据和统计数据都支持追踪到原始数据。 2. 总体介绍 2.1. 报表平台技术框架 报表平台的框架如图1所示: 大中型企业与公共组织云平台 图2-1-1自由报表框架 在资源管理中,通过目录/对象编辑进入格式设计,对数据进行分析,格式设计等。对于发布节点,可发布为查询节点和报表节点,对于发布为报表节点,可以进行订阅,或者对历史报表进行数据分析,输出等。对于发布为查询节点,可以通过报表执行器订阅发布,也可以在报表执行器后进行数据分析。对于订阅发布后的报表,则只可以输出。 大中型企业与公共组织云平台 2.2. 应用流程 自由报表的应用流程如下图所示: 图2-2-1 自由报表应用流程 分为四大场景: n 实时浏览场景 实时浏览场景是业务员进入业务场景,选择进入查询节点还是报表节点,如果进入查询节点,则直至分析输出位置。如果是报表节点,在设置查询条件后,进行执行方式的选择,执行实时报表,则直至分析输出,若选择异步,则进入异步设置场景。 n 异步设置场景 异步设置场景实际上是一个报表订阅场景,该场景创建了一个订阅任务,包含查询按规则,异步定时规则和发布规则。 大中型企业与公共组织云平台 n 报表取阅场景 主要分为三种情况 u 中层消费者进入业务系统 进入业务系统,若进入我的报表库或者进入报表节点,则可以选择历史订阅,查看订阅报表,,分析输出。若收到系统消息,则直接查看订阅报表,分析并输出。 u 高管进入门户 高管进入门户,会收到系统消息,则直接查看订阅报表,分析并输出。 u 高管收到邮件 高管收到邮件则是直接查看订阅报表并输出,没有分析过程。 n 订阅管理场景 订阅管理场景主要是管理员进入业务系统,进入报表订阅中心,进行选择,设置,清理任务,生成数据。 大中型企业与公共组织云平台 2.3. 入门 使用自由报表的基本流程介绍。 2.3.1. 自由报表的新建 1. 选择自由报表功能节点,就会出现如下界面: 图2-3-1报表功能节点 2. 接下来我们选中左面目录树中的一个目录,选择工具栏上的“新增”,如下图: 图2-3-2 新增报表 3. 报表卡片界面中填写“自由报表名称”、“自由报表编码”,如下图: 图2-3-3 添加新增报表信息 4. 点击工具栏中“保存”之后,该目录下的报表列表中就会出现刚才新建的报表,如下图: 大中型企业与公共组织云平台 图2-3-4 新增加的报表 2.3.2. 自由报表的格式设计 1. 在自由报表界面选中需要格式设计操作的报表, 点击工具栏中的“格式设计”如下图: 图2-3-5 报表格式设计 2. 报表的“格式设计”主界面如下: 图2-3-6 格式设计界面 大中型企业与公共组织云平台 3. 主界面中主要包含菜单、工具栏、自由报表导航区域、数据显示区域以及语义模型视图等部分。如下图: 图2-3-7 格式设计界面各个组成部分 2.3.3. 语义模型的使用 1. 点击“数据源”上方的工具栏中的“插入语义模型”,出现选择语义模型界面,如下图,选中已经定义好的语义模型“销售管理”。 图2-3-8 插入语义模型 大中型企业与公共组织云平台 2. 点击“确定”,报表设计界面的语义模型信息框中就会出现被选择的语义模型,如下图: 图2-3-9 语义模型树 2.3.4. 可扩展区域 1. 可扩展区域是为了放置语义模型的区域,有两种定义方式,一种是选中一定区域,然后右键菜单中选择“设置可扩展区域”,如下图: 图2-3-10 设置可扩展区域 大中型企业与公共组织云平台 2. 可扩展区域定义界面如下图,填写相应的信息。 图2-3-11 可扩展区域定义界面 3. 点击“确定”之后,数据显示区域就会出现此可扩展区域,如下图: 图2-3-13 显示定义的可扩展区域 大中型企业与公共组织云平台 4. 拖动右面语义模型信息框中语义模型的元数据,放入设置的可扩展区域中,如下图: 图2-3-13 元数据拖入可扩展区域 5. 设置可扩展区域的另一种方式:直接拖动右面语义模型信息框中的语义模型,放入数据显示区域,如下图: 图2-3-14 语义模型拖入可扩展区域 大中型企业与公共组织云平台 2.3.5. 数据预览功能 1. 定义完可扩展区域,并且放置语义模型之后,就可以对数据进行查看了,点击工具栏中的“预览”按钮,如下图: 图2-3-15 预览图标及工具栏中的位置 2. 点击“预览”之后,数据就会显示在数据显示区域,如下图: 图2-3-16 预览后展示的数据 大中型企业与公共组织云平台 2.3.6. 分析功能 以排序功能为例,介绍分析功能的使用方法。 1. 选中可扩展区域中的某一元数据,然后选择工具栏上的数据分析功能按钮,如下图: 图2-3-17 工具栏中的数据分析工具 2. 点击工具栏中的“排序”,数据显示区域显示如下: 图2-3-18 排序功能的应用 大中型企业与公共组织云平台 3. 点击“预览”,会看到数据按升序来显示,如下图。如果此时保存了报表格式,则报表浏览时也会按照此排序设置进行报表数据展开。 图2-3-19 排序功能的应用后的预览 2.4. 小结 自由报表基于语义模型,以电子表格的方式进行报表格式设计,并可以设置各种分析功能。在报表浏览状态依然可以更改各类分析功能,达到实时交互分析数据的效果。 3. 基本功能 3.1. 可扩展区域管理 下面详细介绍可扩展区域的定义,拆分,合并,移动,复制,删除等管理介绍。 1. 定义可扩展区域 选择一个区域,右键à设置可扩展区,即可定义个可扩展区。 大中型企业与公共组织云平台 图3-1-1 可扩展区域定义 各设置项说明: n 可扩展区名称:用于标识和区分各可扩展区,为空时系统默认名称为其扩展区域。 n 可扩展区区域:标记可扩展区在自由报表中的区域。 n 扩展方向:标记区域是横向扩展还是纵向扩展。默认为纵向扩展 n 限定区域大小:用来限制区域展开后的大小(数据态)。按区域大小,扩展区有多大展开后就多大,多余数据将自动截断;自定义,用户也可以自己定义展开后的行数和列数。 n 扩展依赖:定义当前区域扩展时依赖的可扩展区域以及依赖扩展点。主要用于两个扩展区的对齐。如A扩展区的左上点依赖于B扩展区的左上点,则意味着希望A,B两个扩展区的左上点在同一条直接线。需要注意的是,对于定义了扩展依赖的,目前只会尝试让其对齐,如果A,B上方各自有扩展区,则展开后很可能会不对齐。这块还需要继续完善。 n 其他属性:标题区域,分栏显示是分栏显示时所用到的,具体见第三章的分栏显示 大中型企业与公共组织云平台 。 2. 拆分可扩展区域 定义好可扩展区域后,可以对可扩展区域按行或按列进行区域拆分,将当前可扩展区拆分成两个可扩展区域。 图3-1-2按行分割可扩展区域 3. 合并可扩展区域 选中两个或两个以上的可扩展区域,可以对这多个可扩展区域进行区域合并,可以指定新合并区域的名称,并指定要合并到主合并区域,用于可扩展区模型的处理。 大中型企业与公共组织云平台 图3-1-3合并可扩展区域定义 图3-1-4合并可扩展区域设置 4. 管理可扩展区域 右键à管理可扩展区域,用于快速管理多个可扩展区域,包括添加,修改,删除等管理功能。 大中型企业与公共组织云平台 图3-1-5可扩展区域管理 5. 移动可扩展区域 可通过修改可扩展区域的区域设置来进行区域移动,也可以直接剪切然后粘贴来移动可扩展区域。 6. 复制可扩展区域 全选可可扩展区域,然后复制,粘贴即可完成可扩展区域的复制粘贴。可以用ctrl+c, ctrl + v进行快速操作。 7. 删除可扩展区域 选择需要删除的扩展区,右键à删除可扩展区域即可删除该扩展区。 3.2. 排序 通过以下三种方式设置排序: n 语义模型中设置排序字段。 n 选择字段后点排序按钮。 n 选择扩展区后,点排序管理。 第一种属于语义模型范畴,这里不再多述。着重讲下后两种。 1. 字段排序 用户可以选择一个或多个字段,然后点击工具栏中的排序按钮,进行排序设置。排序工具按照:升序,降序,取消排序的顺序依次循环切换,可以通过多次点击来设置需要的排序效果。 大中型企业与公共组织云平台 如果只通过这种方式设置过排序,则排序将按照从上至下,从左至右的顺序进行。 若有分组,则在组内排序,对分组字段也可以排序,也可以按照分组统计字段进行排序。 2. 排序管理 a) 1中的字段排序是有缺陷的,无法完成以下需求: b) 对于不在扩展区中的字段无法设置排序 对于排序顺序也无法控制,只能按照从上至下,从左至右的顺序进行 为了满足上述两种需求,同时为系统提供一个统一管理排序的地方,我们提供了排序管理,界面如下: 图3-2-1排序管理设置界面 各项设置说明如下: n 可扩展区域:显示当前报表的所有扩展区,可以在此切换扩展区,从而完成不同扩展区的排序设置。 n 数据集:扩展区对应的语义模型名称,这是不可编辑的,只是提供给用户看。 大中型企业与公共组织云平台 n 排序管理:在这里可以设置排序类型,也可以通过新增,删除按钮来增加或删除排序字段,还可以 上移下移等按钮来调节字段的顺序。 这里的唯一难点是排序类型的选择,需要重点讲解下: u 按界面顺序:如果设置的排序字段在扩展区中存在,则遵循“从上至下,从左至右”的顺序进 行排序,当然对于扩展区外的字段,设置的顺序还是起作用的。 u 按自定义顺序:严格按照上图表格中设置的字段顺序进行排序。 分组管理暂时先不讲,等到讲分组专题时再细说。下面两个图分别是针对上图的排序设置,按界面顺序 和按自定义顺序排序的结果,对照结果能更好的了解这两个设置的区别: 图3-2-2按界面排序后的效果 大中型企业与公共组织云平台 图3-2-3按自定义顺序排序后的效果 3.3. 筛选 自由报表的筛选总共有三种:单值筛选和筛选以及筛选条件(页维度也算一种筛选,又有些不同,单独放在一节中进行讲解),这三种是同时起作用的(即同时设置时会同时起过滤作用)。单值筛选只在数据态可用,其它两种数据态格式态均可用。 3.3.1. 单值筛选 单值筛选只在数据态起作用,选中列表中的一个单元格,则会拿着这个单元格的值去过滤,只保留与此单元格值相等的行。 大中型企业与公共组织云平台 图3-3-1要应用单值筛选的数据 如上图,选中“数码产品”后点单值筛选,则结果如下: 图3-3-2单值筛选后的效果图 再次点击该按钮时,作用是“取消筛选”。会显示全部数据。 3.3.2. 筛选 这个是单值筛选的升级版,可以选择多个值进行筛选,在数据态格式态中都是可用的。 大中型企业与公共组织云平台 要点: 1. 筛选会把该所有的值列出来,用户可以选择一个或多个。 2. 复选框选上的说明是用户想看到的值,也就是说会把没打上勾的值过滤掉。 3. 全部都没打上勾时,不会进行任何过滤。相当于显示全部。 4. 筛选与后面要讲到的筛选条件是同时起作用的,如果值筛选完后感觉不对劲,可以检查下是否设置了其它筛选条件。 5. 在数据态时,界面中显示的只是当前显示给用户的值,如果想获得更多的值进行筛选设置,需要点击【读取数据】,这样才会把该字段对应的所有值列出来。 图3-3-3筛选条件设置及说明 3.3.3. 筛选条件 筛选条件是最复杂的筛选,可以分别针对可扩展区域和表内的语义模型进行设置,在设置时还可以选择覆盖还是追加。继续讲解前有必要对自由报表中的筛选条件的优先级作深层次的分析: 图3-3-4 筛选条件说明 大中型企业与公共组织云平台 如上图所示,可以在两个地方设置三种级别的筛选条件: n 定义语义模型时,可以对语义模型设置筛选条件,记为模型级筛选1; n 在自由报表设计中,可以对语义模型设计筛选条件(即点筛选条件,筛选范围选“数据集”),记为模型级筛选2; n 在自由报表设计中,可以对可扩展区域设计筛选条件(即点筛选条件,筛选范围选“可扩展区域”),记为区域级筛选3. 这三种筛选条件在过滤时是有一定规则的: n 模型级筛选1 始终生效 n 区域级筛选3 的优先级高于模型级筛选2 u 叠加过滤:两种筛选同时起作用 u 重新过滤:模型级筛选2 不起作用 n 模型级筛选对表内各扩展区都起作用,区域级筛选只对所在的扩展区起作用 图3-3-5 筛选条件设置 各项筛选设置说明如下: n 筛选条件:就是设置你增加的筛选条件是模型级还是区域级的。 u 可扩展区域:对应区域级筛选3。 u 数据集:对应模型级筛选2。 n 可扩展区域名称:当【筛选条件】选择的是【可扩展区域】时可用,从下拉框中可以切换各扩展区,增加的筛选分别对选择的扩展区起效 大中型企业与公共组织云平台 。 n 数据集:当【筛选条件】选择的是【数据集】时可用,从下拉框中可以选择数据源面板中导入的语义模型,此时在下方设置的筛选条件对该语义模型有效。 n 筛选类型:是对模型级筛选2和区域级筛选3而言的的。 u 叠加过滤,模型级筛选2和区域级筛选3同时起作用。 u 重新过滤,模型级筛选2不起作用,区域级筛选3起作用。 n 接着讲下表格中每一列的意思: u 逻辑符,可以在“并且”,“或者”之间切换,分别表示逻辑与,逻辑或。 u 字段,选择进行筛选的字段。 u 操作符,可以“=,>,>=,<,<=,<>,like,in,not like,not in,is”十一种中进行选择,意义和数据库中代表的意思一致 u 值类型,可在“常量,字段,表达式,参数,宏变量”中选择,此处的不同选择会直接影响第五列【值】的选择 u 值,设置字段的筛选值,根据【值类型】的不同设置可以设置不同的值,大体规则如下: l 常量:由用户直接输入 l 字段:可以设置成语义模型中的其它字段 l 表达式:可以设置成复杂的函数表达式 l 参数:可以直接等于某个参数的值 l 宏变量:可以直接等于某个宏变量的值 按上图的设置后,查询的结果如下: 图3-3-6 根据筛选条件设置后的数据显示效果图 3.4. 页维度 页维度是另一种形式的筛选,与筛选又有些区别。 大中型企业与公共组织云平台 相同点:都是数据态对数据进行过滤。 不同点: a) 作用范围不同。筛选一般只对当前扩展区起作用。而页维度有可能对所有扩展区都起作用。 b) 即使是语义模型级的筛选,也只在该语义模型建立的扩展区起过滤作用,但页维度可以作用于不同的语义模型,只要他们有相同的字段表达式。如语义模型A有个字段叫name,语义模型B也有个字段叫name,而且都在扩展区中,则选择其中任何一个作页维度,都会对相关的扩展区起过滤作用。这点是需要注意的。 c) 所有页维度只能来自于同一个语义模型。 3.4.1. 页维度的生成 由于没有页维度的情况下,页维度面板是默认不显示的,因此,每张表的第一个页维度只能通过菜单【数据】---【页维度设置】,打开页维度设置对话框。 大中型企业与公共组织云平台 图3-4-1 页维度设置对话框 需要注意的是,在弹出页维度设置对话框前,可能会弹出语义模型选择对话框: 图3-4-2 页维度设置过程中弹出的语义模型对话框 语义模型选择对话框当且仅当以下两条件同时成立时才会出现: 1. 先前没有设置过页维度。 2. 表中未定义扩展区或只存在空扩展区或至少存在两个扩展区以上,且来自两个语义模型以上。 上述对话框中的值来自右边数据源面板中加载的所有语义模型。 通过页维度设置对话框添加完一个页维度后,点确定,就会出现页维度面板: 图3-4-3 页维度面板 此后还可以通过以下三种方式添加页维度: 格式态下:通过拖拽可扩展区域中的字段或通过拖拽语义模型树中的字段到页维度面板中。 数据态下:先确定菜单【格式】-à【是否区域联动】前的勾去掉, 大中型企业与公共组织云平台 然后同格式态的操作即可。 3.4.2. 页维度的删除 有以下三种途径可以删除页维度: 1. 页维度设置对话框:通过点删除按钮,可以删除对应的页维度。 2. 格式态:直接把页维度拖出页维度面板,任何位置释放即可。 3. 数据态:【格式】-à【是否区域联动】前有√,则不能删除任何页维度无√,同格式态。 3.4.3. 页维度的设置对话框 1. 基本属性 页维度对话框中间表格的内容描述了页维度的基本属性,是我们主要需要关注的内容,每一列都是可编辑的: a) 页维度项目:页维度对应的字段,可以通过点击弹出语义模型树来更换页维度。(非用户页维度) 大中型企业与公共组织云平台 图3-4-4 通过元数据参照中的语义模型选择选择页维度项目 如果当前是用户页维度,点击页维度项目会弹出如下对话框来设置用户页维度字段编码及名称: 图3-4-5 页维度设置用户自定义对话框 同时当前对话框下半部分变成用户页维度数据录入面板,可以通过右侧按钮实现用户页维度数据的添加、删除及调整顺序。 用户页维度字段的数据类型默认为字符串,但可以调整,类型为常用数据类型: 大中型企业与公共组织云平台 图3-4-6 自定义对话框数据类型的选择 b) 选择方式:可以有不同的方式对页维度进行设置,包括默认方式,下拉框方式,多选方式及仅显示,后面会具体讲各种方式的作用。 c) 显示全部:设置页维度值的面板中是否有‘显示全部’这一项。 d) 显示字段:设置页维度值时,显示的不是页维度对应字段的所有取值,而是在这里设置的字段的所有取值。 e) 用户自定义:是否用户自定义页维度。默认false。如果是用户自定义页维度,页维度字段是用户自定义的,不来源于哪个语义模型,但可跟它们名字相同。 2. 高级属性 页维度高级属性包括: a) 级次属性设置 b) 过滤按钮方式 c) 数据来源设置 d) 页维度之间的过滤关系 n 级次属性设置 作用于每个页维度项目,当页维度项目选择方式为默认时起作用。此时,在页维度导航面板点击页维度参照时会弹出页维度数据选择对话框,通过设置级次属性,该对话框可以以树形方式展示页维度数据。 级次属性设置两种方式: u 级次字段 + 级次字段编码方式 ,可定义编码规则 u 级次字段 + 父级字段 (上下级关系) 级次设置面板在页维度设置对话框下半部分: 图3-4-7 页维度级次字段设置 大中型企业与公共组织云平台 图3-4-8 页维度上下级关系设置 设置好级次属性后,页维度导航面板的页维度弹出页面为树形展示: 图3-4-9 页维度级次属性设置后的效果图 大中型企业与公共组织云平台 n 过滤按钮方式 作用与页维度整体,指示页维度过滤导航面板的过滤按钮方式 图3-4-10 页维度设置过滤按钮选项 l 过滤按钮方式,默认值,此时导航面板: 图3-4-11 页维度设置勾选过滤按钮数据显示界面效果图 l 上页/下页,页维度设置对话框不勾选“过滤按钮方式”,此时导航面板: 图3-4-12 页维度设置显示上下页效果图 两种方式的区别: l 过滤按钮方式,选择某一页维度数据后,不马上过滤数据,只有点击过滤按钮才过滤 大中型企业与公共组织云平台 l 上/下页方式,选择某一页维度数据后,马上过滤数据,而且按上下页按钮,会移动到上/下个页维度数据并对扩展区数据进行过滤 n 数据来源设置 点击页维度设置对话框的右侧数据来源按钮,弹出数据来源设置对话框: 图3-4-13 页维度数据来源对话框 u 数据来源:指示页维度的数据来源。 l 可以指定数据来源于哪个扩展区。 用户可以不设,则在查完数据后,会从上至下从左至右找到第一个与页维度共用同一语义模型的扩展区(行列表对应的扩展区),用此扩展区来填充页维度的可选值。用户也可以在这里选定一个扩展区,让此扩展区的值来填充(实际上是把页维度加入到此扩展区,查数时顺便把页维度的值查出来并填充到页维度项上,选哪个扩展区就相当于用到了此扩展区的过滤条件,对页维度的值进行了过滤)。 下拉框中的备选值:与页维度使用同一语义模型的 大中型企业与公共组织云平台 各扩展区 l 独立执行 页维度数据作为一个独立查询进行数据获取,不来源于哪个扩展区 u 参数设置:此设置面板只在页维度对应的语义模型设置了参数时才会出现。作用主要用于没查询数据前单独点页维度项,查询页维度值时用。有两种设置方式: l 与扩展区参数相同:复用某个扩展区的参数设置。下拉框中的备选值:与页维度使用同一语义模型的各扩展区。 用户选择某个扩展区时,下面的表格将实时显示该扩展区的参数设置情况。 l 自定义参数:用户也可以单独对页维度进行参数设置。具体的设置方法可以参看【参数设置】章节。 设好参数后,在查询数据前点页维度项,就会弹出参数设置界面,设好参数后就会到后以取数。 n 页维度之间的过滤关系 只有页维度数量不小于2时才能过滤关系按钮才有效。过滤关系按钮在页维度设置对话框右侧。过滤关系设置对话框如下: 图3-4-14 页维度过滤关系对话框 大中型企业与公共组织云平台 过滤关系主要是设置页维度间的联动关系,,比如对于三个页维度【地区】【产品类型】【产品】,如果想在设置页维度时【产品】里的可选项会跟着【产品类型】的不同而不同,则可以按下图进行设置。 简单的说就是【已选】列表框中的页维度的可选值会根据【页维度名称】里的页维度的值的变化而变化。 图3-4-15 页维度过滤关系联动设置举例 按照上面的设置,当“产品类型”为‘家电’时,产品的可选值如下: 图3-4-15 页维度过滤关系产品类型为家电联动效果图 当“产品类型”为‘数码产品’时,则如下: 大中型企业与公共组织云平台 图3-4-16 页维度过滤关系产品类型为数码产品时联动效果图 3. 页维度的选择方式 在2.4.1中讲到,页维度有多种形式的显示方式:默认方式,下拉框,多选,仅显示。其中第四种【仅显示】概念还不是很清楚,基本没什么用,等明确后再补充。 大中型企业与公共组织云平台 图3-4-17 页维度显示方式举例 三种选择方式虽然从外观上不一样,但最后选择的结果对于表的过滤效果来说是一致的,提供三种方式,主要是方便用户根据自己的习惯来设置页维度 以上三种方式的特点分别如下: a) 默认方式:该方式是页维度最初的设置方式,以一棵树的形式显示所有可选值,选中某一项后按【回车】或直接双击该项则关闭对话框,获得选中的值。此方式还支持查找功能【Ctrl+F】,会根据用户的输入定位到第一个符合用户输入的位置。 此种方式可以设置页维度级次属性,使页维度属性展示。 b) 下拉框:该方式很类似于commobox,双击文本框或单击右边的小按钮则会出现下面的下拉框,用户可以用鼠标单击某一项,或通过小键盘的【↑】【↓】键跳到某一行,按回车选中。 此种方式具有直接过滤功能,用户可以在文本框中输入文本,则下拉框中只显示以该文本开头的字段。 c) 多选:每个值前面都带有复选框,可以选择多个,【显示全部】前的√只当下面所有项都打上√时才会打上√,可以通过这个灵活的实现全部选择和全部取消功能。 总之,用户可以根据自己需要和爱好,选择不同的页维度设置方式。 大中型企业与公共组织云平台 3.4.4. 页维度过滤按钮事件 DefaultQueryAction提供页维度过滤按钮事件扩展: /** *页维度过滤的事件处理(IQueryAction接口的方法的实现)。 *@paramparent *@paramcontext *@paramreportModel */ publicboolean doPageDimFilter(Container parent, IContext context, AbsAnaReportModel reportModel) { // 不做特殊处理,交给报表 returntrue; } 开发根据需要进行扩展。 调用时机:页维度数据过滤之前执行。执行成功后才进行数据过滤。对于过滤按钮方式及上下页方式都会执行。 3.5. 固定成员 对于自由报表的数据展现,我们还提供了一种叫做“固定成员”的功能。当对某个字段设置固定成员后,顾名思义就是在数据展现的时候会按照该字段设置的几个固定的成员和其顺序来展现数据。其类似于筛选(如同SQL中的in)但又不同于筛选,如果查询的数据中没有固定成员中某个成员,在展现的时候仍然会出现该固定成员,只不过其对应的值为空而已。比如用户希望只展现单位1、单位2、单位3的数据,那么就可以通过对单位设置固定成员来实现用户希望看到的数据。 固定成员的设置过程如下: 1. 打开任意的一张自由报表,选中扩展区域中的任何一个字段,在工具栏中选择“固定成员设置”按钮,可对所选择的字段进行固定成员设置。如下图 大中型企业与公共组织云平台 3-5-1 图3-5-1 格式设计器工具栏中固定成员图标 2. 如下图3-5-2是固定成员设置的对话框。当用户选中“固定成员”复选框后就可以对所选择的字段设置固定成员了。 首先用户可以不仅对选择的字段进行固定成员设置,还可以选择其他字段,通过固定成员字段来选择。用户可通过“添加”、“删除”按钮增加和删除固定成员,同时可以通过“读取数据”按钮装载数据库中存在的所有成员;通过“向上”、“向下”按钮调整固定成员的顺序,同时可以通过固定成员列表的表头来对固定成员进行排序,点击“成员”表头就会按成员值进行排序,点击“显示名称”表头就会按成员显示名称进行排序;可以编辑成员的显示名称来改变成员在数据展现的时候的显示名称。 图3-5-2 固定成员对话框 大中型企业与公共组织云平台 3. 设置完固定成员后,在自由报表中浏览到的数据就仅含固定成员的数据记录,如果数据库中没有某个成员的记录就会出现空行(下图的“河南”的数据就是),如下图3-5-3。 图3-5-3 应用固定成员效果图 4. 如果想取消字段的固定成员设置,可在固定成员设置对话框中重新选中“默认成员”复选框,就取消了固定成员设置。如图3-5-4、图3-5-5。 图3-5-4 取消固定成员设置 大中型企业与公共组织云平台 图3-5-5 取消固定成员设置后预览图 5. 以上演示的是普通的行列表的字段的固定成员的设置,交叉表纬度的固定成员设置是相同的操作。 6. 固定成员与默认成员的区别 上文中提到了固定成员和默认成员,用户在使用中经常会感到迷惑,在此,需要对两者的特点进行总结。 n 固定成员:正如名称中的“固定”,设成固定成员后,意味着展开后行数是固定的(没有数据的行,其它内容会显示为空),行的前后顺序也是固定的。设成固定成员后,sql中会以in的形式把这些设置作为过滤条件拼到sql中,因此建议固定成员不要设得太多。 另外,还需要仔细斟酌是否需要使用固定成员。使用了固定成员,就意味着除了固定成员中设置的值,其它值都不会显示,特别是对于行列表,如果设置了固定成员“单位1,单位2,单位3”,那么即使单位1有多条数据,那也只会显示第一条而忽略其它数据。 个人感觉,固定成员主要用于交叉表来固定行头或列头,并且适合于具有枚举特性(值固定且数量有限)字段。后文中还会讲到图表,固定成员用于图表也是不错的。 n 默认成员:更准确的说应该是“显示别名”,在这里设置的值不会生成过滤条件拼到sql中,只会在最终填充到表格里时,做别名替换。比如在默认成员中有一条记录是“AA : AA1”,则最终会把该列中所有的AA都替换成AA1。 大中型企业与公共组织云平台 对于数据库中某些值含义不是很明确,又不想修改库时,使用默认成员是很方便的。可以方便的把原来值换成你想要的任何值。 7. 固定成员格式态展开 在固定成员设计界面,选中格式态默认展开复选框。 确定后,格式态中固定成员列会按照固定成员数据展开。 大中型企业与公共组织云平台 注意: 1. 不能对统计字段(一般是数值型的字段)设置固定成员 2. 如果设置固定成员的时候修改了成员的显示名称,然后又取消了固定成员设置,但是设置的显示名称仍然会生效(此时相当于默认成员起效),除非在默认成员设置列表中将该成员与显示名称记录删除。 3. 图表也能设固定成员,将在图表一节中加以介绍。 3.6. 分组 可以针对某个扩展区域中的语义模型设置分组,支持多个分组字段,支持分组统计字段,支持分组内细节数据的交叉。 1. 在一个扩展区域内,如果设置分组字段,则根据分组字段,将数据分组。如果有2个以上的分组字段,则根据分组字段所在的位置确定分组次序,处于最外层的字段作为第一分组顺序。如果多个分组字段在1行,则根据多个分组字段的组合值分组。 2. 可指定放置在区域中的语义模型字段为分组字段; 3. 可在扩展区域的单元中直接定义分组统计函数(会隐含确定一个分组字段),支持的统计函数列表:求和、计数、平均、最大、最小,唯一计数(详情见下一节的分组统计); 4. 设置了多个分组字段时,按照它们放置的位置从上到下、从左到右,作为其分组顺序; 5. 分组字段和统计函数可以指定是否自动合并单元 分组操作的界面如下: 大中型企业与公共组织云平台 图3-6-1 应用分组前数据预览图 分组后: 图3-6-2 应用分组后数据预览图 需要注意的是:分组不一定非得按照界面从上至下从左至右的进行计算,用户也可以设置分组的执行顺序,这一步是在【排序管理】中的页签【分组管理】中设置的。 1. 按界面顺序:表格中的字段顺序没有意义,分组会按照扩展区中从上至下从左至右的顺序执行分组。 2. 按自定义顺序:可以通过右边的四个按钮调整分组字段的次序,则数据填充时,会以表格中的顺序进行分组。 大中型企业与公共组织云平台 总之,如果想按照扩展区中设置的分组顺序进行分组,则分组类型选择“按界面顺序”,反之则选择“按自定义顺序”,并调整分组字段的上下关系。 图3-6-3 排序管理设置界面 3.7. 统计 自由报表中总共提供了六种类型的统计功能:合计,计数,平均,最大,最小,唯一计数。基本上不用解释都应该能看出其中的含义,这里讲下计数和唯一计数的区别:其实就是在计数时有没有对重复数据进行排重,计数没有排重,唯一计数进行了排重。 此外,合计,平均只对数据型字段生效,其它统计方式可以针对任何类型的字段。 统计的工具是,如果直接点左边,则会弹出如下对话框: 大中型企业与公共组织云平台 图3-7-1 统计功能对话框 从上至下,各行的含义分别如下: n 统计名称:统计字段的显示名称,不可编辑,由统计字段+统计类型+“值”构成,这也意味着修改统计字段或统计类型,统计名称会自动调整。 n 统计字段:统计对应的语义模型字段,默认值是当前鼠标选择的字段,你可以修改成其它字段。 n 统计类型:就是前面讲到的6种统计类型,会根据统计字段中的字段类型有个默认值,如果统计字段是数据型,则默认值为合计,其它则为计数。 n 统计范围:设置了统计范围则意味着是分组统计,统计范围里设置的字段一定要是某个分组字段,否则该统计将不起作用。后面将会以分组统计作例子,进行实例讲解。 如果点击统计工具右边的向下箭头,则提供了6种统计方式的快捷方式,不会弹出上面的对话框,直接设置对应的统计方式。 图3-7-2 统计功能的方式 设置统计是支持批量操作的,可以选择多个字段,然后一起设置统计方式。当要批量设置合计或平均时,要求所有字段都是数据型,否则将提 大中型企业与公共组织云平台 示设置失败。 我们还提供了在格式态和数据态都能使用的右键插入小计的功能,对整个扩展区进行批量插入小计。如果选择的是合计或平均,则所有数据型字段下面将增加对应的统计字段;如果是其它的则所有字段下面都将增加对应的统计字段。 图3-7-3 右键插入小计功能 执行上图中的操作后,扩展区将增加一行,所有的数值型字段下面都将增加一行合计行,如下图所示: 图3-7-4 应用合计后格式态报表的效果 大中型企业与公共组织云平台 最后,以分组统计为例,结束本节的内容。 1. 建立自由报表,进入格式设计,创建行列区。 图3-7-5 在各式设计中创建可扩展区域 2. 然后对扩展区进行分组: 图3-7-6 对创建的扩展区域进行分组设置 3. 将字段拖入扩展区,插入统计函数: 图3-7-7 对创建的扩展区域应用统计功能 注意统计统计范围选的是分组字段“销售员”,也就意味着会统计每个销售员的销售额。 数据预览: 大中型企业与公共组织云平台 图3-7-8 应用统计功能后的预览图 可以看到,每一个销售员下面都会有一个合计行。 3.8. 区域设置向导 前面已经讲过了分组,统计等功能的使用,掌握这些知识已经可以满足大部分功能需要了,但从效率上来看还是比较慢,为了实现分组统计功能,用户可能不得不经常调整扩展区的大小,不断的拖字段,删字段,效率非常低下。为了提高效率,我们提供了区域设置向导的功能,通过这个功能,可以方便快速的做出比较规整的分组统计表和交叉统计表。 区域设置向导在工具栏中位置如下: 图3-8-1 工具栏中区域设置向导图标及位置 大中型企业与公共组织云平台 报表类型选择行列表,下面出现的是分组管理的界面: 图3-8-2 区域设置向导分组管理界面 如上图所示,总共可以分为6大块: 第1块是语义模型,可以选择所要应用的语义模型。 第2块是报表类型,选择需要展现的报表类型;当前为行列表。 第3块是语义模型树,通过拖拽可以把选择的字段放入其它三块里 第4块是分组字段,把需要分组的字段拖在这里即可,同时可以设置组内是否提供小计功能。 第5块是明细字体列表 第6块是统计字段列表,用户可以设置每个字段的统计类型。 大中型企业与公共组织云平台 报表类型选择交叉表,下面出现的是交叉管理的界面: 图3-8-3 区域设置向导交叉管理界面 和分组管理界面非常相似,分成七块: 第1块是语义模型,可以选择所要应用的语义模型。 第2块是报表类型,选择需要展现的报表类型;当前为交叉表。 第3块是语义模型树,通过拖拽可以把选择的字段放入其它三块里 第4块是用于放置列维度字段 第5块用于放置行维度字段 第6块用于放置交叉指标字段 大中型企业与公共组织云平台 第7块选择交叉指标的显示方向 下面通过两个实例来增强对这个界面的使用。 第一通过一个行列表,进行分组管理。 1. 选择语义模型 图3-8-4 点击选择语义模型按钮 大中型企业与公共组织云平台 图3-8-5 弹出插入语义模型对话框 图3-8-6 选择语义模型并点击确定按钮 大中型企业与公共组织云平台 图3-8-7 添加的语义模型及加载出语义模型树 2. 选择报表类型,默认为行列表 图3-8-8 选择报表类型 大中型企业与公共组织云平台 3. 设置界面如下图: 图3-8-9 分组管理各项设置 对地区和产品进行了分组,而且地区需要组内小计;对销售总额和销售利润进行合计。 4. 设置完后结果为: 图3-8-10 分组管理各项设置后的报表格式 大中型企业与公共组织云平台 5. 预览效果如下: 图3-8-11 分组管理设置后的数据预览效果 通过分组管理设置级次汇总表(树形级次) 在分组管理界面,选择行列表,将体现级次关系的字段设置为分组字段 大中型企业与公共组织云平台 点击次级字段设置按钮 大中型企业与公共组织云平台 设置级次信息: 级次字段:即体现级次的字段,如果内部编码等。 级次划分:即级次字段的结构,如:4-4-4 初始级次:报表格式查询的从哪一级开始,从1开始,为第一级。 终止级次:报表格式查询到哪一级次。 确定后的格式: 大中型企业与公共组织云平台 预览数据的效果 第二通过一个交叉表,进行交叉管理。 1. 选择语义模型,同分组管理第一步的操作。 2. 选择报表类型:交叉表。 大中型企业与公共组织云平台 图3-8-12 报表类型选择交叉表 3. 设置行列维度、交叉指标及选择指标显示方向。 图3-8-13交叉表设置行列维度、交叉指标及指标方向 大中型企业与公共组织云平台 4. 交叉管理各项设置后报表的形式 图3-8-14 交叉管理调整设置后报表格式效果 5. 预览效果如下: 图3-8-15 交叉设置后预览效果 可以看到,通过区域设置向导,可以很方便的设置并生成相关的报表。 3.9. 排名函数 排名函数用于计算出某个报表数据在指定范围内的排名。自由报表在多级分组区域中支持对明细数据字段或者分组统计字段计算排名。 1. 排名函数的设置 此功能按钮位于工具栏中,如图3-9-1所示。 大中型企业与公共组织云平台 图3-9-1 工具栏中排名函数功能图标及位置 图3-9-2 排名函数对话框 从大到小:表示按照数据从大到小进行排名,默认是从小到大。 允许并列:表示数据大小相同时排名相同; 排名范围:下拉框中的内容仅为此扩展区中的分组字段。也就是说只对分组字段有效。如果选择了某个分组字段,则表示在此分组级次中进行排名,否则对所有数据范围内进行排名。 2. 明细字段的排名函数 图3-9-3是自由报表的格式设计界面,我们选中F3单元的“销售利润”字段,将其设置为排名函数(设置内容同图1-2)。 图3-9-3要应用排名函数的报表 大中型企业与公共组织云平台 图3-9-4 应用排名函数后报表预览效果 图3-9-4是报表浏览效果,F列就是计算出的销售利润在按销售员从大到小排名。 如果设置了“允许并列”,则报表效果有所变化,见图3-9-5: 图3-9-5排名函数允许并列后报表预览效果 大中型企业与公共组织云平台 3.10. TopN分析 TopN分析是一种常见的报表数据分析功能,可以按照数据大小过滤出前N行用户最关注的业务数据。自由报表在多级分组区域中支持TopN分析功能,在明细数据字段或者分组统计字段上均可设置。 1. TopN分析的设置 此功能按钮位于工具栏中,如图3-10-1所示。 图3-10-1 TopN分析在工具栏中的位置及图标 图3-10-2 TopN分析功能对话框 设置界面如图3-10-2 数据分析行数:表示用户关注的数据行数,如设为“2”,只会显示前两条数据。 数据从大到小排列:打上√则表示从大到小排序取前n行,否则从小到大排序取前n行。 大中型企业与公共组织云平台 补足行数:意思是当数据不足时,是否要用空数据补足数据分析行数,这个设置有助于报表结果的工整和美观。 显示“其他”:表示多于分析行数的数据会进行汇总并显示为“其他”行。前面打上√时,下面的表格会默认加载扩展区中的所有数值型字段,且统计方式为合计,用户也可能通过增加,删除按钮来增加删除字段。 设置完成后,在所设置的单元格的右上角会显示topN标记: 图3-10-3 应用TopN分析功能后报表效果图 2. 在明细数据中设置了TopN分析的效果 图3-10-4是自由报表的格式设计界面,我们选中“销售总额”字段,为其设置TopN分析。 图3-10-4 对销售总额应用TopN分析功能 大中型企业与公共组织云平台 图3-10-5 对销售总额应用TopN分析功能之前的数据预览 图3-10-6 对销售总额应用TopN分析功能之后的数据预览 我们对比一下设置前后的报表浏览效果(分别是图3-10-5和图3-10-6),可以发现,销售总额从大到小显示了前5行,而其他数据行汇总后显示成了一行数据。 3. 分组报表中明细数据设置TopN分析的应用效果 这一次,我们对数据按照地区和销售员进行分组,并调整TopN的设置,只显示前三行如图3-10-7所示。 大中型企业与公共组织云平台 图3-10-7 分组报表中明细数据设置TopN 图3-10-8 分组报表中明细数据设置TopN执行之前数据预览图 大中型企业与公共组织云平台 图3-10-9 分组报表中明细数据设置TopN执行之后数据预览图 我们再来对比一下设置前后的报表浏览效果(分别是图3-10-8和图3-10-9),可以发现,每个分组内部销售总额最大的前3行数据依然显示。而不够三行的,仅显示原来行数。 如果我们在TopN分析中选择“补足行数”,就会发现报表变得非常工整了,见图3-10-10: 图3-10-9 TopN补足行数执行之后数据预览图 4. 分组报表中对小计字段设置TopN分析的应用效果 可扩展区域中已经设置了按照销售员和地区进行分组,如图3-10-10所示。我们对按地区统计的销售总额小计(D4)设置TopN分析,为了数据对比方便,这次的分析行数设置为2。 大中型企业与公共组织云平台 图3-10-10 TopN分析对话框 图3-10-11 TopN分析对话框 大中型企业与公共组织云平台 图3-10-12 TopN分析设置后的数据预览 我们再来对比一下设置前后的报表浏览效果(分别是图3-10-12和图3-10-13),设置TopN后,只显示销售总额小计值最大的前2个分组数据。 5. 需要注意的规则 为了用户设置方便,我们并不限制设置TopN分析的字段个数。但是实际上在每个分组级次中,只有检测到的第一个TopN分析生效。例如图3-10-4中的一个普通列表,如果对后面的字段也设置了TopN,最终的报表展示也是图3-10-6的效果,系统会将统一级次的其他TopN分析自动置成不启用。 3.11. 同比环比 同比环比功能计算本年度与上一年度和本月与上月值的比,从而看出与前一时间段比较当前期间内的数量是否有增加或减少。同比环比的计算需要指定统计维度和时间,以确定要计算的指标值和上一期间的指标值。 同比环比定义: 在需要定义同比环比的单元格点击右键(注意,只能在扩展区中定义),菜单中选择同比环比定义(或点击工具栏上按钮) 大中型企业与公共组织云平台 图3-11-1 同比环比功能 打开界面如下图: 在左侧的字段列表中,拖拽要计算的指标,到右侧的指标列表中,在指标列表中,类型列选择要计算的类型是同比还是月度环比。 在左侧的字段列表中,拖拽统计维度和时间,到右侧维度列表中,在维度列表中指定那个维度是时间维度。 大中型企业与公共组织云平台 图3-11-2 同比环比对话框 定义后如下图 图3-11-3 应用同比环比后报表形式 预览效果: 大中型企业与公共组织云平台 图3-11-4 应用同比环比后数据预览 (由于部分数据没有上期数据,用“------”代替。红色方框内为计算出结果的数据。) 无穷大和无计算值的设置: 同比环比中的无计算值和无穷大的显示字符可以自定义设置 在报表格式设计中,点击工具栏的报表属性设置,在界面中可以设置相关的显示字符。 大中型企业与公共组织云平台 3.12. 树形展示 对于有级次关系的数据,提供了将数据以树的形状展示的设置。设置树形显示后,可以更好的显示出数据间的级次关系。目前报表中支持按内部编码构建树形展示。 1. 树形设置 为了方便看出树形关系效果,以报表分类为例,在报表上设置两个字段(名称和内部编码)一个用来显示树形的‘’,一个用来体现级次。 设置如下图3-12-1。 在报表中点击要设置树形展示的扩展区,点击工具栏中的按钮(或数据菜单下【树形设置】按钮),弹出如下界面: 大中型企业与公共组织云平台 图3-12-1 树形设置对话框 n 内部编码:在内部编码中参照中选择内部编码对应的字段(注意:如果内部编码不希望显示在界面上,可以将内部编码设置到隐藏字段中,具体设置方法见隐藏管理) n 对应字段:在对应字段参照中选择树形标示要显示在哪个字段上。即显示‘’的列。 n 级次划分:内部编码的构成规则。每级编码长度用“-”分开。例如图中的“4-4-4-4”意思是说每一级的编码长度为4。 n 初始级次:树形结构默认展示到第几级。0表示全部展开,1表示只显示第一级。 大中型企业与公共组织云平台 图3-12-2 需要树形展示的数据 点击图中的,该级数据对应的下级数据会隐藏。例如,点击“语义模型相…”的数据,下级都会收起。 大中型企业与公共组织云平台 图3-12-3 2. 删除树形设置,在树形设置界面,是否启用不勾选即可。 图3-12-3 取消树形设置 大中型企业与公共组织云平台 3.13. 数据格式 报表平台为了支持与UAP统一数据格式风格,增加了数据格式设置。此功能能将报表中展示的数据(日期,时间,数值,地址等)与UAP的数据格式统一,该功能使用了UAP平台的接口,会随UAP的格式变化而变化。 数据格式设置: 在需要使用数据格式的字段上,点击(或格式菜单下的【数据格式】菜单),弹出如下图界面 图3-13-1 数据格式设置对话框 点击增加按钮,弹出语义模型字段参照,选择一个要设置的字段,如地址,点击确定。 大中型企业与公共组织云平台 图3-13-2 选择要设置数据格式的字段 则增加了一条数据格式设置,如下图,在数据格式列选择该字段使用的格式类型,例如,选择的是地址字段,则选择地址类型。点击确定。 图3-13-2 大中型企业与公共组织云平台 原地址显示pk: 图3-13-3 设置数据格式后,显示地址: 图3-13-4 原日期显示: 图3-13-5 设置数据格式后,日期显示: 图3-13-6 另外,数据格式设置界面还有一个功能:修改字段显示名称。在数据格式设置界面中,可以修改字段名称,并增加改名称的多语id。例如:将图中的字段销售日期修改成日期 大中型企业与公共组织云平台 图3-13-7 原格式中显示: 图3-13-8 修改后: 图3-13-9 3.14. 条件格式 报表中支持将不同的数据显示成不同样式的功能,这个功能是条件格式。这个功能可以将需要特殊标记出的数据设置上特殊的样式,以加强显示效果。 大中型企业与公共组织云平台 条件格式设置: 3.14.1. 满足以下条件的单元设置格式 选择要设置条件格式的单元(可以多选),点击格式菜单下的【条件格式】按钮,弹出条件格式设置对话框。 图3-14-1 条件格式规则管理对话框 点击新增,弹出规则定义界面,选择“满足以下条件的单元设置格式” 图3-14-2 新建规则对话框 点击格式,将单元格的值为安娜的数据,前景色设置成深蓝,背景色设置成浅粉色,突出效果。 大中型企业与公共组织云平台 图3-14-3 对新建的规则进行设置 点击确定。效果如下,销售员列中,值安娜的背景色和前景色改变了。 大中型企业与公共组织云平台 图3-14-4 应用新建的规则后的预览数据效果图 3.14.2. 使用公式确定要设置的格式单元格的格式 新增条件格式,选择“使用公式确定要设置格式单元格的格式”。 设置单元格E5大于300的前景色为红色。 大中型企业与公共组织云平台 图3-14-5 使用公式确定要设置格式单元格的格式 点击确定,效果如下,大于300的数据字体变成红色 大中型企业与公共组织云平台 图3-14-6 使用条件公式后数据预览 3.14.3. 基于各自值设置所有单元的格式 新增条件格式,选择“基于各自值设置所有单元格的格式” 1. 图标集 对销售数量同比设置条件格式,格式样式选择图标集,大于1的值是绿色,大于0.5的是黄色,小于0.5的是红色。 大中型企业与公共组织云平台 图3-14-7基于各自值设置所有单元格的格式 点击确定效果如下: 大中型企业与公共组织云平台 图3-14-8 预览效果 2. 数据条 对销售数量同比设置条件格式,格式样式选择数据条,最小值写0,最大值写1 大中型企业与公共组织云平台 图3-14-8 设置格式样式为数据条 点击确定,效果如下,会按照数据值与最大值的比例绘制数据条的大小(小于最小值时不绘制,大于最大值时绘制满格) 图3-14-9 数据条样式数据预览效果 大中型企业与公共组织云平台 3.14.4. 删除条件格式 在条件格式设置界面,选择条件格式,点击删除规则。 图3-14-10 删除条件格式 3.15. 单元公式 自由报表格式设计中,可以在单元格中设置公式,用以取得某些特定的数据值。 1. 定义公式 在单元格上定义公式的方法如下: 大中型企业与公共组织云平台 图3-15-1 右键属性中的单元公式 可以直接在公式编辑器中输入公式内容,例如单元格公式:A1,则在数据预览时,B3单元将显示A1的值。 图3-15-2 单元公式对话框 大中型企业与公共组织云平台 也可以使用公式向导,双击击选中的公式,进入公式向导界面。公式向导界面给出了各个参数的含义;填写各个参数后,点击【验证】可以检查输入的参数是否通过。点击【使用】按钮,公式内容将自动出现在公式内容编辑界面上。 图3-15-3 选择单元公式 2. 公式说明 每个公式在公式编辑界面都有详细的说明,点击函数说明列中的链接,可看到函数的说明信息。 大中型企业与公共组织云平台 图3-15-4 公式函数说明 在这里将新增加的一些特殊的业务公式加以说明。 a) 报表变量公式:取报表级的可用变量值。 PAGEDIM(页维度):取报表当前页维度的值;参数是页维度字段的字段表达式 FRQUERYITEM(查询项):取报表查询项的值;参数是查询项的编码(code) PARAM(参数):取报表参数的值;参数是报表参数定义时的参数编码(code) VAR(变量):取报表变量的值;参数是报表变量定义时的变量编码(code) b) 区域公式:区域公式主要的报表针对扩展区提供的一些可以根据数据集扩展的公式集合。 大中型企业与公共组织云平台 此部分公式应定义在扩展区才能发挥功效。 n CVSCOND: 与CVS公式类似,按条件取一个表中的某个字段的值,只是在公式中增加了一个where条件参数,可以写任意的取值条件。 例如: cvscond(‘org_orgs’,’name’,’code’,’code’,’pk_org=#000136100000000097G4#’) 意思是,查询org_orgs表中的name字段,条件是org_orgs.code = 当前code值,并且pk_org=000136100000000097G4(#表示引号)。 n CVSCOND2: 与CVSCOND一样,只是参数中增加了一个单元位置参数。事实上,CVSCOND在执行时,也是取当前设置公式的单元格作为参数,将公式替换成CVSCOND2来执行的。 另外,CVSCOND2的后台执行是调用UAP公式getColValueMoreWithCond,故CVSCOND2公式与getColValueMoreWithCond是一样的。 FORMATADDRESS: 根据地址主键,取完整的地址信息。与UAP的FORMATADDRESS公式一样。 n FORMATADDRESS2: 根据地质主键,取完整的地址信息。与FORMATADDRESS不同的是,该公式有两个参数,另一个参数是单元位置。FORMATADDRESS与CVSCOND类似,也是在执行时,将当前的单元格位置作为参数,转换成FORMATADDRESS2后进行计算的。调用的是UAP的FORMATADDRESS函数。 n MLCVS: 大中型企业与公共组织云平台 CVS的取多语数据的公式。 n CAPTION: 按语义模型字段表达式,取语义模型字段的说明文字。(含多语处理) n GETFIELD: 按语义模型字段表达式,取对应的明细数据值。 n GETFIELD2: 按语义模型字段表达式和单元位置,取对应的明细数据值。 GETFIELD公式是按照当前设置公式的单元作为参数,转换成GETFIELD2来执行的。 n GETTOTAL: 按语义模型字段表达式,取对应的汇总数据值。 n GETTOTAL2: 按语义模型字段表达式和单元位置,取对应的汇总数据。 GETTOTAL公式是按照当前设置公式的单元作为参数,转换成GETTOTAL2来执行的。 备注:一般的对于存在类似cvscond和cvscond2的公式,直接使用不带单元位置参数的cvscond即可。 c) NCDATAFORMAT公式 NCDATAFORMAT: 转换UAP数据格式公式。公式有两个参数: 第一个参数是表达式或值; 第二参数是数据类型: 0:UAP日期, 1:日期(只有日期没有时间) 大中型企业与公共组织云平台 2:时间 3:日期时间(日期+时间类型) 4:地址         例如:ncdataformat(VAR('var_date'),1) ,是将变量var_date转换成日期型的UAP格式。 d) 序号公式SERIALNUM SERIALNUM(序号):序号;按顺序生成序号。 n 没有分组字段,则按顺序生成序号,如指定按地区的数据个数取序号,定义如下(图中AREA是地区的字段编码): 图3-15-5 公式函数SERIALNUM的应用 显示结果如果下: 大中型企业与公共组织云平台 图3-15-6 应用SERIALNUM函数后的效果图 如果有分组,则取组内的序号,定义如下(图中的SELLER是销售员的字段编码): 大中型企业与公共组织云平台 图3-15-7 分组中应用SERIALNUM函数 序号会按组生成,显示如下: 图3-15-6 分组中应用SERIALNUM函数后的效果图 大中型企业与公共组织云平台 有分组,不按组生成序号,不写参数即可,定义如下: 图3-15-7 不按组生成序号SERIALNUM函数后的应用 显示结果如下图: 大中型企业与公共组织云平台 图3-15-8 不按组生成序号应用SERIALNUM函数数据预览 3.16. 交叉 3.16.1. 交叉表的简单制作 交叉表制作一般流程: a) 选定合适的区域设置成扩展区域; b) 将语义模型中的数据通过拖拽操作放置在设置好的扩展区域中的相应位置; c) 根据需要选择适当的交叉点设置交叉区域; d) 设置好交叉表后进行数据的浏览; 大中型企业与公共组织云平台 1. 扩展区域的设置 选中区域鼠标右键点击设置可扩展区域,如下图: 图3-16-1 设置可扩展区域 点击确定如下图所示 图3-16-3 可扩展区域设置对话框 大中型企业与公共组织云平台 2. 扩展区域字段的设置 将语义模型中的字段通过拖拽操作放置在设置好的扩展区域中的相应位置如下图: 图3-16-3 可扩展区域拖入语义模型 3. 交叉区域字段的设置 选中扩展设置好的扩展区域进行交叉区域的设置,如下图: 图3-16-4 交叉区域设置 大中型企业与公共组织云平台 图3-16-5 交叉区域设置后报表形式 4. 进行交叉区域数据的浏览 图3-16-6 点击预览按钮 点击浏览后数据展现如下图: 图3-16-7 预览后的数据 大中型企业与公共组织云平台 3.16.2. 交叉小计 交叉小计可以看作是交叉表上的分组统计。可以按行维度或列维度进行交叉小计。下面将以一个简单的例子向大家讲解: 图3-16-9 要应用交叉小计的交叉表 预览结果是: 图3-16-10 交叉表预览 如果还想看看每一产品的销售总额合计,应该怎么做呢? 第一步,再拖入一个字段“销售总额”: 图3-16-11 大中型企业与公共组织云平台 第二步,对该新拖入的字段设置交叉小计: 图3-16-12 设置交叉小计 最后预览一下: 图3-16-13 设置交叉小计后的预览效果 如果小计范围设成产品,则预览效果如下: 大中型企业与公共组织云平台 图3-16-14 小计范围为产品的预览效果 3.17. 隐藏管理 隐藏管理是对隐藏字段的设置,那什么是隐藏字段呢?通俗的讲,隐藏字段是在界面中不显示,但从数据库中取数时必须把该字段对应的值取回来,该值可能在其它地方有用。那隐藏字段一般在什么地方用呢?目前主要用在两个地方,一个是联动,一个是联查。 具体怎么用呢?还是举个例子吧。比如说A扩展区联动B扩展区,联动条件是A扩展区的组织主键等于B的组织主键。要实现这样的功能,A扩展区中每行数据肯定需要有组织主键的值,要不联动时这个值就为空了。而通常情况下,我们是不会让用户看到主键这样的值的。这个时候就可以为A设置隐藏字段为“组织主键”了。 图3-17-1 隐藏管理工具栏中的位置图标及隐藏设置对话框 大中型企业与公共组织云平台 设置界面很简单,唯一要注意的是什么时候把隐藏字段设到明细页签里,什么时候设到汇总页签里,基本规则是: 如果扩展区只有分组字段或统计字段,而没有明细字段,则隐藏字段需要设到汇总里;反之,有一个明细字段即可设在明细里。 3.18. 分栏显示 分栏显示是将多行数据平均折成几个部分,将几个部分数据并列显示的设置。 分栏显示设置: 在选中扩展区中点击右键,在菜单中点击设置可扩展区(或管理可扩展区,修改) 图3-18-1 设置扩展区域 进入如下界面 大中型企业与公共组织云平台 图3-18-2 设置扩展区域中的其他属性 在标题区域填写分栏后的标题可能占的区域,在分栏显示中填写要将扩展区分成几栏。 提示:光标点击标题区域后,可以直接在报表单元上选择区域,会自动填充到标题区域文本框中。 例如:标题区域设置成A4:H5,分两栏显示。 大中型企业与公共组织云平台 图3-18-3 对扩展区域设置分栏显示 效果如图: 图3-18-4 设置分栏显示后的报表 预览效果: 大中型企业与公共组织云平台 图3-18-5 设置分栏显示后的报表预览 未分栏效果: 图3-18-6 未设置分栏显示的报表预览 大中型企业与公共组织云平台 注意:设置标题区域的目的是为了标识标题区域也需要分两栏显示,如果不设置标题区域,则第二栏的数据会从标题区域填充,第二栏开始没有标题。如下图 图3-18-7 可扩展区域其他属性未设置标题区域 预览效果:数据会填到标题的位置。 图3-18-8 未设置标题区域的报表预览 大中型企业与公共组织云平台 3.19. 数值型字段的小数 数值型字段对小数位数都比较敏感,目前我们也提供了三种方式用于设置小数位数。 1. 设计语义模型时,设置小数精度 2. 在格式设计里,对字段重新设置小数位数 3. 填充时,通过业务接口获得业务组自己设置的小数位数。 需要注意的时,上述三种方式是先后覆盖的过程,后一种方式如果设置了,是会覆盖前一种方式的设置。 4. 设计语义模型时,设置小数精度 图3-19-1 语义模型设计器中设置字段精度 5. 在格式设计里,对字段重新设置小数位数 选中字段,右键单元属性: 大中型企业与公共组织云平台 图3-19-2 格式设计器中利用单元属性功能设置小数位数 6. 填充时,通过业务接口获得业务组自己设置的小数位数。 业务组可以实现接口IBusiFormat,这里不但可以设置小数位数,还可以对其它格式进行调整。 通常在菜单【数据】--【查询注册】--【查询扩展类】里会让业务组注册自己的查询类,这里就能找到IBusiFormat的具体实现。 3.20. 报表参数和变量的使用 3.20.1. 参数和变量的定义 1. 报表参数定义 工具栏à报表参数设置 图3-20-1 工具栏中报表参数图标及位置 点击插件,弹出如下界面,增加或删除变量。也可以直接修改。 大中型企业与公共组织云平台 图3-20-2报表参数设置对话框 2. 报表变量定义 工具栏à报表变量定义 图3-20-3 报表定义图标及工具栏中位置 点击插件,弹出如下界面,里面包含了系统预置的一些变量。可以直接增加新的变量或删除旧的变量,也可以直接修改已有变量。 大中型企业与公共组织云平台 图3-20-4 报表自定义变量设置对话框 3.20.2. 参数和变量的使用 报表变量位置,在语义模型树下方,以“报表变量”和“报表参数”为根目录。 图3-20-5 语义模型区域中的报表参数及报表变量 大中型企业与公共组织云平台 可以直接将变量或参数拖拽到格式中。 图3-20-6变量或参数拖拽到数据展示区域 3.20.3. 参数和变量的赋值 报表变量和参数在定义时都可以设置默认值。如果使用过程中没有进行修改,则使用默认值。 1. 参数赋值 在查询时,如果存在参数,则会弹出参数的赋值界面,输入参数值,将新的参数值传入查询条件中。 图3-20-7 变量或参数拖拽到数据展示区域 2. 变量赋值 变量的赋值具体内容详见第六章报表节点的扩展中的第七节报表变量的赋值实现 大中型企业与公共组织云平台 3.21. 图表设置 自由报表中也提供了图表,供用户以图的形式展现数据。图的种类也不少,我将以最简单最常用的柱状图为例进行讲解。 想画图,首先需要选择一块区域以放置图形,然后右键图表设置: 图3-21-1 右键图表设置 打开的图表设置对话框如下图所示: 图3-21-2 图标定义对话框 大中型企业与公共组织云平台 3.21.1. 图表类型页签 如上图所示,这个页签的主要作用就是选择图表类型的。图表类型下方的列表就是所有支持的图表类型,而右边的子图表类型则是对左边图的更细划分,都有示意图,基本上看着示意图就知道画出后的图是形式。 图表方向:水平或垂直,就是画图的方向,不了解的可以对比下就知道了。 图例选项:是否显示图例。如下图红色区域内的就是图例,用户可以选择是否显示。 图3-21-3 饼状图的应用 不显示的效果是: 图3-21-4 不显示图例的形状 不显示时,绘图空间更大了,可以根据实际需要来决定是否显示。 大中型企业与公共组织云平台 3.21.2. 数据定义页签 图3-21-5 数据定义页签 如上图所示,红色区域是必填的。 n 关联语义模型:图表的数据从哪来,目前只能从语义模型中来。点右边的按钮会弹出语义模型选择对话框。(另外一点小技巧就是,如果用于绘图的语义模型已经存在于数据源面板中,则可以选中该语义模型,再右键打开图表设置对话框,则此语义模型就直接加入到文本框中了,可以避免重新找)。 n 分类轴:相当于X轴,绘图时会以此字段的值填充X轴下方的文字,并以这些值作为分组画图。还可以设置该字段的排序方式。 n 数据轴:对应的就是Y轴的数据了。有的图只允许设一个(如饼图),有的可以设多条(如柱状图)。表格中默认会加载语义模型中的所有数值型字段,并且默认统计方式为合计,如果需要增加非数值型字段,可以点击右方的“增加数据轴”: 大中型企业与公共组织云平台 图3-21-6 增加数据轴 这样增加的数据轴,汇总类型只能为计数。 n 显示叠加图:这个复选框的意思是,在同一个图中你可能可以看到几种类型的图,比如有条数据图画柱状图,另一条数据轴画折线图。仅当这个复选框打上勾后,数据轴中的图表类型才可选择。 图3-21-7 柱状图 如上图,就是一个柱状图和一个折线图的结合体。需要注意的是,并不是随意两种图搭配起来都可以在画面上展现出来,使用此功能时需要多试一试。 大中型企业与公共组织云平台 3.21.3. 图标属性页签 图3-21-8 图标属性页签 这个页签主要是对图表的外观进行一些设置,主要是字体,颜色,背景色等的设置。设完后具体有啥影响,用户可以自己尝试下。按照上图中标题的设置,图表如下: 图3-21-9 柱状图应用图标属性后的形式 大中型企业与公共组织云平台 3.21.4. 其他需要注意的地方 1. 在格式态,图表都是用示例数据画的图,这样可以避免不必要的远程调用。如果想看真实数据下图是什么样子,只能切换到数据态。 2. 图表大小的更改,目前只能通过调整图表对应的行高列宽来完成。这个在格式态预览态都可调,但建议最好在格式态完成。 3. 数据态下,选中图,右键图表设置,则只会出现“图表类型”和“图表属性”两个页签,而且,图表类型中的可选值只显示与原来图表兼容的类型。(有些类型的图需要设置的东西完全不同,无法相互切换)。 4. 数据定义页签,会根据选择的图表类型的不同而不同。我们前文中展现的只是最通用的一个界面。 5. 图表也能设置固定成员(实现上就是对数据轴设置)。选中图表,设置固定成员如下: 图3-21-10 图标中固定成员的应用 大中型企业与公共组织云平台 则最后的图变成: 图3-21-11 应用固定成员后柱状图的形式 可以看到,和行列表中设置固定成员的含义一样,只展现了三个数据,而且顺序跟固定成员中的设置是完全一致的。 3.22. 打印 自由报表的打印实现方案原则上采用无模板所见即所得的打印方式。为满足特殊打印需求,提供扩展接口供开发扩展。 3.22.1. 常规打印 1. 打印设置 在打印预览对话框中可以看到打印设置内容: a) 纸张,选定纸张类型及纸张方向 图3-22-1 打印纸张设置 b) 页边距 大中型企业与公共组织云平台 图3-22-2 打印页边距设置 c) 打印顺序 图3-22-3 打印顺序设置 先列后行:(默认) 先行后列。 d) 对齐方式,打印内容整体在当前页中对齐方式 图3-22-4 打印对齐方式 e) 页面缩放形式 图3-22-5 页面缩放形式设置 f) 打印区域 大中型企业与公共组织云平台 图3-22-6 打印区域设置 报表的打印区域默认是所有“内容”的单元格。内容包括数据及格式。为避免打印空白页出现,请不要再空白列或行中设置数据格式。在具体计算打印区域时,是从CellsModel的最大列/行开始,逐渐递减的方式去掉所有空白列/行,确定实际打印区域。如果打印过程中出现空白页。请手工对报表模型中空白行/列进行删除,重新保存一下。另外避免进行整行设置格式:如下 图3-22-7 g) 打印标题 图3-22-8 打印标题 n 行标题,每页固定打印的内容。如果定义行标题,请注意行标题定义区域内避免有与非区域内其他行有合并单元的情况。 n 列标题,每页固定打印列内容。如果定义列标题,请注意避免有与非区域内的其他列有合并单元的情况 n 主标题单元:每页自动页居中打印的内容 大中型企业与公共组织云平台 u 如果有列标题定义,请注意不要与列标题定义的列进行合并。 u 列上一定要合并全部可打印的列(列标题定义区域除外)。 u 合并单元格区域开始位置,如下图B2 图3-22-9 h) 页眉页脚区域 图3-22-10 页眉页脚设置 大中型企业与公共组织云平台 缺省配置文件的位置在{NCHome}\resources\bapub\report\zior\zior_default_print.xml 目的快速录入缺省的页眉页脚内容,用户可以修改此文件! 2. 首续页打印 PLM的打印需求,首页及续页打印的标题内容不同,设置方法: a) 在报表格式设计器中,菜单-〉数据-〉打印扩展属性 图3-22-11 打印扩展属性 b) 设置页面: 图3-22-11 设置页面 大中型企业与公共组织云平台 n 首页标题、续页标题可同时设置,也可设置其中一个 n 首页标题、续页标题可包容、交叉、无交集,但不能相等 n 定义完首页、续页标题后还可定义通用打印标题区内容。 说明: u 报表数据态时,不显示续页标题定义内容(与首页标题定义的交集内容除外); u 报表格式态打印首续页定义不起作用; u 报表数据态打印时,首续页定义起作用。 n 首页打印时,以下内容是不打印的 续页定义内容,但与首页定义的交集除外 n 续页打印时,以下内容是打印的 u 续页定义内容(不管是否在首页标题区是否定义都要打印) u 通用标题区定义内容,与首页定义的交集除外 3.22.2. 打印扩展接口 UserExtendPrint 功能:通过此接口,用户可以在原来的正常打印基础上插入自己的打印内容 类型:抽象类,用户需要完善的接口 1. 需要重写扩展的接口 a) checkUserPrintPagesForAdded 功能: 根据参数检验是否需要加入用户打印页,并返回需要插入的用户打印页 函数原型: public abstract int checkUserPrintPagesForAdded(Rectangle previousPage,Rectangle currentPage); 参数: 大中型企业与公共组织云平台 previousPage 前页打印范围 currentPage 当前页打印范围 返回值: 需要插入用户打印页数,返回0表示不需要插入用户打印页 b) doUserPrint 功能: 用户打印实现。 函数原型: public abstract void doUserPrint(Graphics g, PageFormat pf, int pi, Rectangle previousPage, Rectangle currentPage, int userPageIndex); 参数: g 打印设备 pf 打印纸张设置 pi 印页序号(从0开始计数,含用户自定义打印) previousPage 前一正常打印页 currentPage 当前正常打印页(还未打印,会在所有用户打印页完后打印) userPageIndex 用户打印页序号,从0开始 返回值:无 举例:需要在首页之前加入一页封面,需要在最后加入两页用户打印页。 实现方法:重写checkUserPrintPagesForAdded方法,如果previousPage为null,返回1,如果currentPage 为null,返回2;重写doUserPrint方法,封面打印只有一张,调用一次,传入的userPageIndex为0,尾页打印时 大中型企业与公共组织云平台 会调用两次doUserPrint方法,第一次传入的userPageIndex为0,第二次为1 2. 在继承类中可以调用的接口 a) protected Rectangle[] getAllPrintPageRects() 获取所有打印页的打印范围 b) protected Rectangle getCurrentPrintPage() 获取当前打印页 c) protected Rectangle getPreviousPrintPage() 获取上一次打印的页 d) protected int getCurrentPrintRecIndex() 获取当前打印页号 e) protected int[] getCellsRange(Rectangle pageRec) 返回当前页对应CellModel中行列区间,{rMin,rMax,cMin,cMax} f) protected void DoPrintImageFitable(Graphics g, PageFormat pf, BufferedImage image) 图片适配打印 3. 公共方法 public void print(boolean showPrintDlg, boolean showProcessBar) 打印执行 n showPrintDlg 是否弹出打印设置对话框 n howProcessBar 是否弹出打印进度条 4. 使用方法 a) 由UserExtendPrint完成打印任务的组装执行 开发需要做的事情 n 实现扩展接口checkUserPrintPagesForAdded和doUserPrint n 在实现接口中可以调用所有的可以继承类可以调用的接口 大中型企业与公共组织云平台 通过print公共方法完成打印,可以设置打印对话框及打印进度条 b) 开发人员自己组织打印任务执行 开发所做的事情 n 扩展接口简单实现,因为开发人员不会调用print启动打印任务,此接口只需为编辑通过做简单实现 n 调用getAllPrintPageRects(),返回所有的打印页 n 调用getCellsRange返回指定打印范围对应CellsModel中的行列范围 n 可以调用DoPrintImageFitable进行图片打印 n 自己组织打印任务执行,不能调用接口如下 print getPreviousPrintPage getCurrentPrintRecIndex getCurrentPrintRecIndex 5. 打印实现举例 举例:当前一个报表打印共8页,需要在首页打印之前插入两个用户图片, 打印完首页后插入一个图片打印,打印完5页后插入两页图片打印,打印完尾页后在打印两页图片打印 扩展方式:由UserExtendPrint完成打印任务的组装执行 开发步骤: 添加用户扩展菜单(MyPrintExtendAction) 添加用户打印扩展类(MyUserPrintExtend),继承UserExtendPrint,在MyPrintExtendAction中调用 打印代码如下: //用户扩展菜单 public class MyPrintExtendAction implements IMenuActionInfoFactory 大中型企业与公共组织云平台 { @Override public AbsMenuActionInfo[] getMenuInfos() { DefaultMenu printExtend = new DefaultMenu("printExtendTest","PLM打印扩展测试"){ @Override public void execute(MenuParamInfo menuInfo) { MyUserPrintExtend usrPrint = new MyUserPrintExtend((AnaReportModel)menuInfo.getReportModel(),menuInfo.getDesigner()); usrPrint.print(true, true); //执行用户打印 } }; printExtend.setGroupPaths(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("1413006_0","01413006-0198")/*@res "打印"*/, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("1413006_0","01413006-0195")/*@res "打印工具栏"*/); return new AbsMenuActionInfo[]{printExtend}; } //用户扩展打印接口实现 private class MyUserPrintExtend extends UserExtendPrint{ 大中型企业与公共组织云平台 String[] imgFileList = new String[]{"11.bmp","12.bmp","查询1.bmp","查询2.bmp","查询3.bmp","cc.bmp","cc2.bmp"}; String filePath = "F:\\tmp\\"; BufferedImage[] imgList = null; public MyUserPrintExtend(AnaReportModel reportModel, ReportDesigner designer) { super(reportModel, designer); } @Override public int checkUserPrintPagesForAdded(Rectangle previousPage, Rectangle currentPage) { if(previousPage==null){ //加入两张图片封面打印 return 2; } else if(getCurrentPrintRecIndex()==1){ //打印完1页后插入1页打印 return 1; }else if(getCurrentPrintRecIndex()==5){ //打印完5页后插入两页打印 大中型企业与公共组织云平台 return 2; } else if(currentPage==null){ //尾页后添加两页打印 return 2; } return 0; } @Override public void doUserPrint(Graphics g, PageFormat pf, int pi, Rectangle previousPage, Rectangle currentPage, int userPageIndex) { if(imgList==null){ imgList = new BufferedImage[7]; for(int kk= 0;kk<7;kk++){ String fpath = filePath+ imgFileList[kk]; try { imgList[kk] = ImageIO.read(new File(fpath)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 大中型企业与公共组织云平台 } } if(previousPage==null){ if(userPageIndex==0){ DoPrintImageFitable(g,pf,imgList[0]); } else{ DoPrintImageFitable(g,pf,imgList[1]); } } else if(getCurrentPrintRecIndex()==1){ DoPrintImageFitable(g,pf,imgList[2]); }else if(getCurrentPrintRecIndex()==5){ if(userPageIndex==0){ DoPrintImageFitable(g,pf,imgList[3]); } else{ DoPrintImageFitable(g,pf,imgList[4]); } } else if(currentPage==null){ if(userPageIndex==0){ 大中型企业与公共组织云平台 DoPrintImageFitable(g,pf,imgList[5]); } else{ DoPrintImageFitable(g,pf,imgList[6]); } } } } } 3.23. 自由报表查询 自由报表查询是UAP6.3中自由报表新增加的功能,通过格式设计器设置查询项,使用者在发布后节点中为查询项设置查询条件值,进行数据库查询。自由报表查询可在自由报表中替代UAP的查询模板功能,但二者各有优势。例如在查询项较少时,可在格式设计器中使用自由报表查询功能快速地配置查询项,这将比在NC节点中配置查询模板方便很多。又例如在查询项较多时,UAP的查询模板功能将更具优势。总之,报表设计者可根据实际情况选择查询方式。 大中型企业与公共组织云平台 3.23.1. 查询面板 图3-23-1 查询面板 自由报表查询是以查询项为查询的基本元素进行的。报表设计者在格式设计器中点击自由报表查询按钮,展开查询面板。 自由报表查询一共有两个查询面板,左侧查询面板和上部查询面板,查询面板上可容纳查询项。 在左侧查询面板上还有一个区域,当前选择条件区域,这里将显示使用者通过查询项设置的查询条件值。 查询面板在格式设计器中和发布后的查询型节点中均存在,但在发布后的报表型节点中不存在查询面板。 大中型企业与公共组织云平台 1. 新增/删除查询项 图3-23-2 拖拽增加查询项 图3-23-3 新增增加查询项 大中型企业与公共组织云平台 设计者可通过两种方式新增查询项: a) 从数据源面板拖拽语义模型字段或报表参数生成查询项,自由报表查询功能根据拖拽字段的属性对查询项进行默认的属性设置,以这种方式生成的查询项直接可用,设计者也可以通过属性设置对话框对查询项的属性进行修改。 b) 在查询面板上右键鼠标,在弹出菜单中选中增加查询项,这时将弹出一个崭新的属性设置对话框,设计者需根据自己的需要手动设置查询项的各属性,点击确定或应用后将生成查询项。 2. 查询项展示方式 查询项支持多种展示方式,所谓展示方式是指用户通过查询项设置查询条件值的交互方式。目前提供两种切换展示方式的方法。通过查询项的下拉菜单可方便地切换查询项展示方式,这种方法在格式设计器中和发布后节点均可使用。因为展示方式属于查询项的一个属性,所以通过属性设置对话框可设置查询项的展示方式,这将在属性设置部分中再次提到。 a) 树形展示 图3-23-4 树形展示 树形展示作为查询项的默认展示方式之一,用户通过拖拽字段至左侧查询面板,所生成的查询项将默认使用此种展示方式。在上部查询面板上的查询项不支持此种展示。 图3-23-5 树形展示—右键查找 大中型企业与公共组织云平台 图3-23-6 树形展示—查找对话框 图3-23-7 树形展示—查找结果 树形展示支持快速查找数据源功能,在树上点击鼠标右键,点击查找,在弹出的查找对话框中输入匹配字符串进行查找。 b) 下拉展示 图3-23-8 下拉展示 c) 日期展示 图3-23-9 日期展示 大中型企业与公共组织云平台 d) 参照展示 图3-23-10 参照展示 e) 文本展示 图3-23-11 文本展示 f) 列表展示 图3-23-12 列表展示 列表展示作为查询项的默认展示方式之一,用户通过拖拽字段至上部查询面板,所生成的查询项将默认使用此种展示方式。在左侧查询面板上的查询项不支持此种展示。 大中型企业与公共组织云平台 图3-23-13 列表展示浮动查询按钮 列表展示提供了浮动查询按钮功能,用户可通过此按钮快捷地执行查询。 g) 复选展示 图3-23-14 复选展示 复选展示比较特殊: n 复选展示传递给查询引擎的值实际为Java的Boolean类型值,默认的查询引擎并不使用这个值,因此需要报表设计者自己开发查询引擎。换个角度说,开发这种展示的背景也是对个性化查询引擎的支持。 n 因为这种特殊性,使得复选展示无法与其他类型的展示方式替换,所以复选展示只可在属性设置对话框中设置,查询项的下拉菜单不支持这种展示的切换。 3. 查询项数据源排序 查询项数据源支持三种排序方式:不排序、升序和降序。默认为不排序。 图3-23-15 不排序 图3-23-16 升序 大中型企业与公共组织云平台 图3-23-17 降序 4. 查询项属性设置对话框 属性设置对话框只在格式设计器中可用,发布后节点不可用。查询项通过属性设置对话框设置查询项各属性,根据作用分类,属性设置对话框包括六个页签,基本设置、数据来源、关联项、快捷函数、缺省值和使能条件。 a) 基本设置 图3-23-18 基本设置页签 大中型企业与公共组织云平台 基本设置页签主要设置查询项的基本属性、操作符和展示组件。 图3-23-19 基本属性 n 基本属性包括: u 编码(必填且唯一),查询项的唯一标识。 u 显示名称(必填)。 u 多语ID,用于实现查询项显示名称的多语。 图3-23-20 数据类型 u 数据类型,通过查询项选择的查询条件值类型,设计者一定要注意这个属性,使用者输入的值(数据来源)应可以转换成该种类型,且数据库中的值也应与之匹配,否则会报错或者查询不出结果。 u 是否共享,这个属性针对发布后节点而言,因为多张报表可发布到同一节点,而查询项是以报表为单位存在的,这就引起了查询项所选择的查询条件值在同一节点下不同报表间的共享这一需求。设计者使用这一属性控制查询项所选择的查询条件值是否共享。 u 是否隐藏,这个属性针对发布后节点而言,隐藏查询项在发布后的节点中将不可见,用户执行查询时会默认加上隐藏的查询项,隐藏查询项的查询操作符取操作符属性中设置的第一个操作符,查询条件值取缺省值列表中对应操作符的缺省值,目前缺省值列表的作用也只是支持隐藏查询项。这将在属性设置对话框缺省值页签中再次提到。 u 是否必输条件,执行查询时必须存在此查询项的查询条件值。 大中型企业与公共组织云平台 u 是否固定条件,这个属性针对查询对话框而言,查询对话框中根据候选条件(查询项)生成查询条件,固定条件的查询项将默认作为查询条件,且不可移除。这将在查询对话框中再次提到。 图3-23-21 操作符 n 操作符,设置查询项支持的操作符,当查询项支持的操作符多于一个时,查询项将出现操作符下拉框,使用者可在查询项支持的操作符中选择查询条件值的操作符。需要注意这里的等于和包含互斥,不等于和不包含互斥。操作符分为四类: 图3-23-22 一元操作符 u 一元操作符,该类操作符只可有一个值,大部分操作符为一元操作符。 图3-23-23 二元操作符 大中型企业与公共组织云平台 u 二元操作符,该类操作符有两个值,两者之间为二元操作符。 图3-23-24 多元操作符 u 多元操作符,该类操作符可有多个值,包含和不包含为多元操作符。这里需要注意,包含和不包含只在属性设置对话框中显示为“包含”和“不包含”,在查询项操作符下拉框和当前选择条件面板等处均显示为“等于”和“不等于”,因此查询项支持的操作符中等于和包含互斥,不等于和不包含互斥。 图3-23-25 无值操作符 u 无值操作符,该类操作符没有值,为空和非空为无值操作符。 图3-23-26 展示组件 n 展示组件,设置查询项的展示方式,注意这里可设置复选展示,各种展示方式在前文中有所介绍。 大中型企业与公共组织云平台 b) 数据来源 图3-23-27 数据来源作用区域 数据来源页签主要设置查询项的数据来源,数据来源指使用者可通过查询项输入的查询条件值,即查询条件值备选数据的来源。而另一个可控制使用者输入查询条件值的地方是查询项的展示类型,比如在文本展示方式下,查询条件值完全由使用者手动输入,日期展示方式下,查询条件值在日期参照中选择,复选展示方式下,查询条件值为Java的Boolean类型,这些情况下数据来源无论设置为什么都将起不到实际作用。 图3-23-28 刷新数据来源按钮 注意点击当前选择条件面板中的刷新按钮来刷新数据来源。 图3-23-29 语义模型类型数据来源 大中型企业与公共组织云平台 n 从语义模型字段处拖拽生成的查询项默认使用语义模型类型的数据来源,查询条件值的备选数据取自语义模型的字段,备选数据分为两类,真实值与显示值,真实值是传到数据库中进行查询的值,显示值是在界面中显示出来的值。级次设置只对树形展示生效,规则参考页维度的级次属性设置部分。过滤条件将在下文中进行介绍。 图3-23-30 未定义类型数据来源 n 未定义类型的数据来源将不加载任何数据,比如在文本展示方式下,查询条件值完全由使用者手动输入,日期展示方式下,查询条件值在日期参照中选择,复选展示方式下,查询条件值为Java的Boolean类型,这些情况下数据来源无论设置为什么都将起不到实际作用,这时最好设置为未定义,这样做会节约电脑的资源,提升效率。 图3-23-31 参照类型数据来源 n 参照类型的数据来源将读取参照模型的数据,作为备选的查询条件值,可以使用系统定义的参照,也可以实现参照接口,自定义参照,可参考下文中的查询扩展接口。数据权限请参考红皮书的数据权限部分。返回类型控制返回参照的编码、名称或者主键。过滤条件将在下文中进行介绍。 大中型企业与公共组织云平台 图3-23-32 用户自定义类型数据来源 n 用户自定义类型的数据来源由用户手动定义,同语义模型类型的数据来源一样,包括真实值和显示值,真实值支持两种类型,手动输入的字符串类型,和快捷函数类型。 图3-23-33 报表数据扩展类型数据来源 n 报表数据扩展类型为设计者自行开发数据来源实现类。可参考下文中的查询扩展接口。过滤条件将在下文中进行介绍。 大中型企业与公共组织云平台 图3-23-34 数据来源的过滤条件 n 数据来源的过滤条件,用来控制数据来源,这里用语义模型类型的数据来源为例进行说明。上图中当前数据来源自语义模型“销售明细”的“地区”这一字段,这一字段实际包含三个值,“江苏”、“江西”和“浙江”。这里启用过滤条件,名称列表明过滤所依据的字段为语义模型“销售明细”的“销售员”这一字段,类型列表明过滤的值来自查询项(类型有查询项、固定值和快捷函数三种),值列表明过滤的值来自“销售员(查询项)”这一查询项。 大中型企业与公共组织云平台 图3-23-35 启用过滤条件的效果 现在看一下地区这一查询项启用数据来源的过滤条件之后的效果。地区本来有三个备选值“江苏”、“江西”和“浙江”,现在地区的备选值会根据数据来源的过滤条件的设置,从“销售员”字段中去匹配等于查询项“销售员(查询项)”当前选择值“陈苹”的数据,将对应数据的“地区”字段值“浙江”作为查询项地区的数据来源。启用过滤条件后拼装的SQL语句为”select AREA from salesDetail where SELLER = ‘陈苹’”,未启用过滤条件时拼装的SQL语句为” select AREA from salesDetail”。 c) 关联项 关联项页签控制查询项的作用域,即查询项进行查询时对报表中的哪些区域起到查询作用。 大中型企业与公共组织云平台 图3-23-36 语义模型字段类型的关联项 n 从语义模型字段处拖拽生成的查询项默认使用语义模型字段类型的关联项,此类型将作用于报表中所有使用该语义模型字段的地方。比如扩展区A和扩展区B都使用了同一语义模型字段f,执行查询时会将两个扩展区都进行查询。 图3-23-37 扩展区类型的关联项 n 扩展区类型的关联项,此类型将作用于报表中对应的扩展区。比如扩展区A和扩展区B都使用了同一语义模型字段f,但关联内容中只设置了扩展区A,并未设置扩展区B,执行查询时只会将扩展区A进行查询。 大中型企业与公共组织云平台 图3-23-38 报表参数类型的关联项 n 从报表参数处拖拽生成的查询项默认使用报表参数类型的关联项,此类型将作用于报表中所有使用该报表参数的地方,类似于给报表参数赋值。 图3-23-39 其他类型的关联项 n 其他类型的关联项,由报表设计者开发关联方式。 d) 快捷函数 大中型企业与公共组织云平台 图3-23-40 快捷函数页签 快捷函数页签设置查询项支持的快捷函数,其实快捷函数也是一种数据来源,但因其不直接作用于查询项的组件,而是以在组件的右侧添加一个快捷函数按钮的方式提供数据,所以将其单独列为一类查询项的属性,且并非所有展现方式的查询项都支持快捷函数。 自由报表查询默认加载参照和日期两种类型的数个系统函数作为支持的快捷函数。报表设计者可自行开发更多的快捷函数,通过载入的方式添加快捷函数,可参考下文中的查询扩展接口。 大中型企业与公共组织云平台 图3-23-41 快捷函数作为查询条件值 图3-23-42 根据快捷函数查询 上面两张图是一个使用快捷函数的例子。 e) 缺省值 大中型企业与公共组织云平台 图3-23-43 缺省值页签 缺省值页签目前只支持隐藏查询项,隐藏查询项的查询条件值取缺省值列表中对应操作符的缺省值。每一个缺省值包括真实值和显示值,真实值支持两种类型,手动输入的字符串类型,和快捷函数类型。 f) 使能条件 图3-23-44 使能条件作用区域(1) 图3-23-45 使能条件作用区域(2) 使能条件页签控制当前选择条件是否起作用,当前选择条件指当前选择条件面板或查询对话框中使用者输入的查询条件值。 大中型企业与公共组织云平台 图3-23-46 使能条件页签 一个查询项的使能条件属性是由多条使能条件组合而成,使能条件之间可通过逻辑操作符”AND”或”OR”连接,只有当查询项的使能条件属性整体返回值为true时,该查询项生成的查询条件值在当前选择条件中才生效。 使能条件有四种类型: n 值约束,通过条件项(除当前查询项以外的一个查询项)、比较符和比较值来生成使能条件,当前选择条件中包括使能条件中设置的条件项,且条件项的比较符和比较值均与使能条件中设置的值相等时使能条件值为true。 n 已定义约束,通过条件项(除当前查询项以外的一个查询项)来生成使能条件,当前选择条件中包括使能条件中设置的条件项时使能条件值为true。 n 未定义约束,通过条件项(除当前查询项以外的一个查询项)来生成使能条件,当前选择条件中不包括使能条件中设置的条件项时使能条件值为true。 n 仅操作符判断,通过条件项(除当前查询项以外的一个查询项)、比较符来生成使能条件,当前选择条件中包括使能条件中设置的条件项,且条件项的比较符与使能条件中设置的比较符相等时使能条件值为true。 大中型企业与公共组织云平台 图3-23-40是一个只有一条值约束类型使能条件的例子,当前查询项为“销售员”,作为“销售员”查询项的使能条件,控制“销售员”的查询条件值。在满足当前选择条件中包括“地区”查询项生成的查询条件值,且该查询条件值的比较符为“包含”,比较值为“江苏”,这时,“销售员”的查询条件值在当前选择条件中生效。 图3-23-47 使能条件返回false 当前选择条件中包括“销售员等于陈羽”,但此时没有“地区包含江苏”,这时执行查询,“销售员等于陈羽”并未生效。 大中型企业与公共组织云平台 图3-23-48 使能条件返回true 当前选择条件中包括“销售员等于陈羽”,且此时有“地区包含江苏”(注意包含在这里显示为“等于”,可参考前文操作符部分的介绍),这时执行查询,“销售员等于陈羽”生效。 5. 发布后节点查询面板 a) 只有发布后的查询型节点中存在查询面板,发布后的报表型节点中不存在查询面板。 b) 因为自由报表查询可在自由报表中替代UAP的查询模板功能,而UAP查询模板是针对节点的节点级查询,因此在自由报表发布到节点的过程中做了一些处理: n 对于报表已经发布的节点,为了不影响先前功能的使用,所以不会更改其原先使用的UAP查询模板功能。这种情况下,如果节点下的某张报表启用了自由报表查询,会在该报表中添加自由报表查询的查询面板,UAP查询模板的面板与自由报表查询的查询面板同时存在。 n 对于新发布的节点,无论节点下有一张报表或是多张报表,只根据第一张报表来做处理: u 如果第一张报表使用了自由报表查询功能,会在发布节点的过程中屏蔽掉节点级的UAP查询模板功能。其后如果为该节点分配UAP查询模板,打开节点后也不会出现UAP查询模板功能。 u 如果第一张报表未使用自由报表查询功能,不会对节点的UAP 大中型企业与公共组织云平台 查询模板功能做处理。这种情况下,如果节点下的除第一张报表外的某张报表启用了自由报表查询,会在该报表中添加自由报表查询的查询面板,UAP查询模板的面板与自由报表查询的查询面板同时存在。 n 为了保证查询功能的唯一,报表设计者应避免UAP查询模板与自由报表查询同时存在的情况发生。 n 报表设计者应对同一节点下的报表选用相同的查询功能。 n 报表设计者对已经发布的节点如果要使用自由报表查询功能,应对节点下的所有报表都设置自由报表查询的查询项,且应重新发布节点。 图3-23-49 发布后节点查询面板 c) 发布后查询型节点的查询面板同格式设计器中的查询面板相似,但查询项不可拖拽(拖拽属于对自由报表查询功能的设计,应在格式设计器中完成)。 大中型企业与公共组织云平台 图3-23-50 发布后节点查询项 d) 发布后查询型节点的查询项不可进行属性设置(属性设置属于对自由报表查询功能的设计,应在格式设计器中完成),但可通过查询项的下拉菜单方便地切换查询项展示方式。 3.23.2. 查询对话框 自由报表查询提供一种通过对话框进行查询的方式,这一点类似于UAP查询模板功能。自由报表查询在两处使用查询对话框。格式设计器中,如果报表存在查询项,在点击预览时会弹出查询对话框。发布后节点中,查询型节点的查询按钮和报表型节点的预览按钮,点击查询按钮后会弹出查询对话框,注意这里与UAP查询模板的查询对话框存在冲突,报表设计者应避免报表同时存在两种查询功能。 图3-23-51 报表参数赋值对话框 另外需要注意,使用自由报表查询的查询对话框时,会屏蔽掉自由报表的报表参数赋值对话框,报表设计者应将每一个需要赋值的报表参数生成一个查询项,通过查询项为报表参数赋值。 大中型企业与公共组织云平台 1. 候选条件 图3-23-52 查询对话框 查询对话框会把所有非隐藏的查询项列在候选条件页签中,用户可通过双击候选条件中查询项的方式将其添加到右侧的查询条件页签中。右侧的查询条件页签会对查询条件进行唯一性判断,不可重复添加相同的查询项为查询条件。非固定条件可以通过左侧的删除图标删除,固定条件不可删除。 2. 查询方案 自由报表查询支持将对话框中的查询条件保存为查询方案,这一点类似于UAP查询模板功能。自由报表查询将查询方案分为两类,预置方案和用户定义方案。 a) 预置方案 大中型企业与公共组织云平台 图3-23-53 预置方案 预置方案是报表设计者预置的方案。预置方案为报表级的方案,使用该报表的所有用户均可见到并使用预置方案,但用户不可修改预置方案。在格式设计器中,通过预览弹出查询对话框,在该对话框中新增的方案为预置方案。预置方案只可在格式设计器中新增、修改和删除。格式设计器中只显示预置方案,不显示用户定义方案。 b) 用户定义方案 大中型企业与公共组织云平台 图3-23-54 用户定义方案 用户定义方案是用户(报表使用者)定义的方案。用户定义方案为用户级的方案,使用该报表的用户只可见到并使用自己定义的用户定义方案,无法见到其他用户定义的用户定义方案。在发布后节点中,通过点击查询按钮弹出查询对话框,在该对话框中新增的方案为当前用户的用户定义方案。用户定义方案只可在发布后节点中新增、修改和删除。发布后节点中显示预置方案和当前用户定义的用户定义方案。 c) 默认查询方案 自由报表查询支持默认的查询方案,打开查询对话框时会自动加载默认查询方案。 每张报表最多只有一个预置级默认查询方案,每个用户最多只有一个用户定义级默认查询方案,这样的话每个用户最多只有两个默认查询方案可选,但查询对话框中最多只显示一个默认查询方案。规则是如果有用户 大中型企业与公共组织云平台 定义级默认查询方案,只显示用户定义级默认查询方案,如果没有用户定义级默认查询方案,而有预置级默认查询方案,则显示预置级默认查询方案,二者都没有,则不显示默认查询方案。 默认查询方案会单独在方案树下的第一个一级节点中显示,注意在这里显示的默认查询方案仅为了方便使用默认查询方案,默认查询方案不可在此处做修改。对所有方案的修改均在用户定义方案节点下和预置方案节点下的二级节点中进行。 3.23.3. 查询扩展接口 新报表查询刚刚提供,鉴于反馈少的因素,提供扩展能力有限,我们主要提供如下几种机制来方便扩展。 1. 查询执行引擎IFrQueryExecService 用户可以重写查询执行引擎或继承已有实现类FrQueryExecService。目前查询执行引擎的引入方式还没有提供。远期展望中实现。 2. 查询项展示控件 使用者可以增加自己的查询项展示控件,我们提供基类FrQueryAbstractComp可以继承,并通过配置文件加入到系统中来 3. 自定义查询监听器 只用报表的查询定义内容,而执行完全是自己处理。 4. 快捷函数扩展机制 查询项通过注册快捷函数代理类的方式扩展快捷函数。 图3-23-55 快捷函数扩展 大中型企业与公共组织云平台 快捷函数代理类的接口:com.ufida.report.frquery.base.IQuickFuncExecAgent public interface IQuickFuncExecAgent { /** * 分类名称(国际化显示名称) * 方便设计器检索 * @return */ String getCatalogName(); /** * 返回支持的快捷函数列表 * @return */ List getQuickFuncsSupported(); /** * 执行快捷函数返回执行结果 * @param quickFunc * @param context * @return */ Object execQuickFuncion(IQuickFunc quickFunc, IContext context); } String getCatalogName():快捷函数分类名 大中型企业与公共组织云平台 图3-23-56 快捷函数扩展-快捷函数分类名 List getQuickFuncsSupported():该分类下的所有快捷函数 *注意:其中不可以实现自己的IQuickFunc,应当使用IQuickFunc已有的实现类FreeQuickFunc。 图3-23-57 快捷函数扩展-分类下的所有快捷函数 Object execQuickFuncion(IQuickFunc quickFunc, IContext context):通过参数quickFunc和context,返回该快捷函数的执行结果 大中型企业与公共组织云平台 图3-23-58 快捷函数扩展-快捷函数执行结果 下面是一个快捷函数代理类的实现例子: package com.ufida.report.frquery.base; /** * 组织权限的快捷函数代理类 * * @author guanyuana */ public class OrgQuickFuncExecAgent implements IQuickFuncExecAgent, Serializable { private static final long serialVersionUID = 7929728592591814766L; public static final String ORG_QUICK_FUNC = "orgQuickFunc"; @Override public String getCatalogName() { return nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID( "1413006_0", "01413006-1334")/* @res "参照" */; } @Override public List getQuickFuncsSupported() { List funcs = new ArrayList(); 大中型企业与公共组织云平台 IQuickFunc func = new FreeQuickFunc(); func.setFuncName(ORG_QUICK_FUNC); func.setFuncDisplayName(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() .getStrByID("1413006_0", "01413006-1545")/* @res "权限组织" */); func.setExecAgentClassName(this.getClass().getName()); funcs.add(func); return funcs; } @Override public Object execQuickFuncion(IQuickFunc quickFunc, IContext context) { Object privateContext = context .getAttribute(FreeReportFucletContextKey.PRIVATE_CONTEXT); if (privateContext instanceof LoginContext) { return ((LoginContext) privateContext).getPkorgs(); } return null; } } 表的查询定义内容,而执行完全是自己处理。 大中型企业与公共组织云平台 3.23.4. 对单元公式和穿透的支持 1. 查询函数 图3-23-55 查询函数 自由报表查询功能提供了一个取查询项值的函数,FRQUERYITEM函数。FRQUERYITEM函数类似于PAGEDIM函数。 2. 查询项对穿透的支持 图3-23-56 查询项对穿透规则的支持 可在穿透规则中定义查询项,穿透规则可参考报表穿透部分。 大中型企业与公共组织云平台 图3-23-57 设置查询函数 FRQUERYITEM函数有两个参数,第一个参数取查询项的编码,第二个参数取整数值0或1。因为查询项存在两个值,实际值与显示值。当第二个参数取0时,函数返回查询项的实际值,当第二个参数取1时,函数返回查询项的显示值。 图3-23-58 执行查询函数 上图单元格A1使用了FRQUERYITEM函数,执行查询后该函数返回地区查询项的真实值“江苏”。 大中型企业与公共组织云平台 3.24. 主组织属性设置 3.24.1. 报表数据权限 报表数据权限是针对报表查询结果的权限控制,用于控制用户可以查看的报表数据范围。组织权限的控制分为两类:一类是集团数据的控制,用于控制自由报表管理节点(自由报表-集团)、语义模型管理节点(语义模型-集团)、发布后的集团型报表节点(包括查询型节点和报表型节点)。例如,数据库中有多个集团(A,B,C)的数据,但集团A的用户登录时,应该只能查看属于集团A的数据。另一类是组织数据的控制,用于控制自由报表管理节点(自由报表-组织)、语义模型管理节点(语义模型-组织)、发布后的组织型节点(包括查询型节点和报表型节点)。例如,用户的功能权限组织有a, b, c三个组织,那么用户只能查看属于这三个组织的数据。 通常情况下,集团类型的语义模型,都会有pk_group(所属集团)字段,组织类型的语义模型都会有pk_org字段。如果语义模型-集团节点下定义的语义模型没有pk_group字段,语义模型-组织节点下定义的语义模型没有pk_org字段,那么在该节点下,就无法进行语义模型数据预览,因为无法根据用户的组织身份过滤数据。这种情况下需要报表开发者往语义模型的一级字段中增加pk_group/pk_org字段。 3.24.2. 主组织属性设置 “主组织属性设置”的目的是针对报表数据权限控制中的特殊需求。 大中型企业与公共组织云平台 图3-24-1 主组织属性设置插件 例如,组织类型的语义模型有两个组织字段,一个是上级组织pk_org,另一个是下级组织pk_org1,用该语义模型做了两份报表,一份供上级组织用户查看,需要用pk_org来过滤组织,另一份供下级组织用户查看,需要用pk_org1来过滤组织。那么在“主组织设置”中,就可以在上级报表的格式设计中设置“组织”字段为“pk_org”,下级报表的格式设计中可以设置“组织”字段为“pk_org1”,报表执行时会优先使用用户设置的组织字段来过滤组织。如果没有这种特殊需求,就会使用语义模型中默认的组织字段“pk_org”来过滤组织或默认的集团字段“pk_group”来过滤集团。 1) 为语义模型设置主组织属性 打开主组织设置对话框,界面如下: 大中型企业与公共组织云平台 图3-24-2为语义模型设置主组织属性 默认情况下,主组织属性设置界面打开时,会加载当前报表中的所有语义模型,供用户设置集团字段和组织字段。当为某一语义模型设置了集团字段或组织字段后,使用该语义模型定义的可扩展区域都用该字段进行权限过滤。 2) 为扩展区域设置主组织属性 若同一语义模型定义的不同扩展区域需要使用不同的组织字段进行权限过滤,则可以针对不同扩展区域设置主组织属性: 图3-24-3为扩展区域设置主组织属性 大中型企业与公共组织云平台 上图中,扩展区域B7:H8,B11-H12,均使用同一语义模型jituan1进行定义,可以分别为这两个区域设置不同的集团字段和组织字段。为区域设置的主组织属性优先于为语义模型设置的主组织属性。 3) 数据预览 在自由报表-组织节点下,数据预览的结果将按照选择的报表主组织进行过滤。如下图中,报表主组织为dy,对应的组织pk为0001AA10000000000G7P,则数据预览时只能查看到所属组织为该组织的自由报表分类。 图3-24-3数据预览结果 3.24.3. 数据权限过滤规则 可以执行自由报表数据查询的节点包括三类:自由报表管理节点,发布后节点-查询节点,发布后节点-报表节点。下面对这三类的数据权限过滤规则展开说明。 1) 集团型节点过滤规则(假设用户没有进行主组织属性设置,则使用默认的集团字段:pk_group过滤数据) 按照上面的分类,集团型节点共包括以下几种: n 自由报表管理节点: 自由报表-集团 n 发布后节点-查询节点: 集团型查询节点 n 发布后节点-组织节点:集团型报表节点 a) 自由报表-集团 过滤规则为:pk_group = ‘当前集团pk’ 大中型企业与公共组织云平台 b) 集团型查询节点 过滤规则为:pk_group=‘当前集团pk’ c) 集团型报表节点 未选择“按接收人留存数据”,则过滤规则为:pk_group=‘当前集团pk’ 选择了“按接收人留存数据”,则过滤规则为:pk_group=‘接收人所属集团pk’,每个接收人收到的报表执行结果均会按照各自的‘所属集团’进行数据过滤,即只能看到自己所属集团的数据。 2) 组织型节点过滤规则(假设用户没有进行主组织属性设置,则使用默认的组织字段:pk_org过滤数据) 按照上面的分类,组织型节点共包括以下几种: n 自由报表管理节点: 自由报表-组织 n 发布后节点-查询节点:组织型查询节点 n 发布后节点-组织节点:组织型报表节点 a) 自由报表-组织 过滤规则为:pk_org= ‘报表主组织pk’ b) 组织型查询节点 过滤规则为:pk_org in‘当前登录用户功能权限组织pk’ c) 组织型报表节点 未选择“按接收人留存数据”,则过滤规则为:pk_org in‘执行用户功能权限组织pk’ 选择了“按接收人留存数据”,则过滤规则为:pk_org in‘接收人功能权限组织pk’,每个接收人收到的报表执行结果均会按照各自的‘功能权限组织’进行数据过滤,即只能看到自己组织权限内的数据。 大中型企业与公共组织云平台 4. 分析功能综合应用 4.1. 分组功能的应用 自由报表还支持设置区域之间的数据依赖关系,各种分析功能结合起来,灵活应用就可以组装出较为复杂的报表。分组常见的应用有两种,一是对列表中的分组应用;二是对交叉表结合分组应用。 4.1.1. 列表中的多级分组 1. 如下一组数据(图4-1-1),直接预览时数据就是自由展现,那么用户就需要对数据利用单位名称、币种、会计期间等字段进行一些分组加工以便能让更容易对数据进行分析比较。 图4-1-1 未分组前数据预览 2. 首先我们先对地区字段设置分组,那么数据按单位进行分组,并且得出按单位分组合计值 大中型企业与公共组织云平台 图4-1-2 设置分组 图4-1-3 设置分组后预览数据 3. 在地区下还有销售员字段,可以根据需要再设置分组,对数据继续细化(图4-1-4、图4-1-5)。 图4-1-4 销售员设置分组 大中型企业与公共组织云平台 图4-1-5 销售员设置分组后预览 4. 另外一种格式展现效果 对于图4-1-1的销售清单,可进行如下的分组设计: 图4-1-6 重新设置分组 数据展现如下(图4-1-7): 大中型企业与公共组织云平台 图4-1-7 重新设置分组数据预览 4.1.2. 交叉表结合分组应用 图4-1-1中的数据用交叉表展示时,分组也可以和交叉表结合在一起使用(图4-1-8) 大中型企业与公共组织云平台 图4-1-8 分组和交叉表结合使用 展示如下: 图4-1-9 分组和交叉表结合使用数据预览 大中型企业与公共组织云平台 4.2. 数据依赖处理区域拼接 用户可能会需要设计一些较为复杂的统计表,例如数据来源于不同的系统,或者对于数据有不同的统计口径,而这些数据又要集中体现在一张统计报表中。 V5.5之前的产品,如果用户想处理复杂数据,只能利用查询引擎的功能,做数据表的关联或者定义复合查询,然后才能把一个查询引入到报表中来。查询的设计太过复杂,针对一个查询的报表设计的灵活性和直观性又都比较差。V55自由查询中使用多个可扩展区域的数据依赖功能解决了这个难题。 交叉表是一种常用的报表统计样式。自由报表中交叉表的设计比较直观:在一个可扩展区域内,可以拖入行列维度字段和设置统计指标,并可以直接设置各类指标名称和单元格式。还可以设置是否显示行列标题。 由此,对于复杂的统计报表,我们给出的解决方案是:根据报表数据内容,将其拆分成多块,这样每一块的数据来源单一且统计口径简单。每一块都可以利用一个可扩展区域来设置,而各块之间,只要通过设置数据依赖关系,并且选择性地隐藏某些块的行列表头,就能使这些数据对应起来,最终拼接成一个无缝复杂报表。 1. 交叉表 如图4-1-10,单个交叉表的设计界面比较直观。 图4-1-10 交叉表 图4-1-11是交叉表的数据浏览结果。 图4-1-11 交叉表预览 大中型企业与公共组织云平台 2. 复杂报表的拼接 如下两个交叉表,分别来自不同的语义模型,前者用来统计销售数量,后者用来统计销售总额 图4-1-11 交叉表预览 预览效果如下: 图4-1-11 交叉表预览 图4-04 拼接的展开效果 从预览结果可以看到,名称这一列都是相同的,只是顺序不同而已,很多情况下可能会需要把这两个交叉表合到一张表中展现。这就要用到数据依赖,数据依赖的设置如下: 大中型企业与公共组织云平台 图4-1-11 交叉表预览 此时,预览效果如下: 图4-1-11 交叉表预览 可以看到,两个交叉表销售员已经完全对齐了,第二个交叉表的数据也根据表头进行了调整。为了让展示效果更好些,还可以通过如下设置: 首先,让两张交叉表完全靠拢: 图4-1-11 交叉表预览 大中型企业与公共组织云平台 然后,选中第二个交叉表,点“交叉小计”,设置不显示行标题: 图4-1-11 交叉表预览 此时再预览,可以看到数据已经很规整了: 图4-1-11 交叉表预览 大中型企业与公共组织云平台 5. 报表发布节点 5.1. 报表的发布 在自由报表管理功能中,可以对设计好的自由报表进行“发布节点”,对于第一次发布的节点,可以在发布向导中同时进行功能和菜单的设置。 如果希望将多张自由报表继续发布到同一个功能节点,则可以选择“追加”方式,然后选择一个已有节点进行发布即可。 5.1.1. 发布为查询型节点 首先通过发布向导发布为节点和菜单,然后分配查询模版,最后分配功能权限。 发布向导如下图: 大中型企业与公共组织云平台 图5-1-1 发布向导 1. 发布方式 a) 发布新功能选择【新增】。 b) 覆盖已有功能选择【覆盖】。 c) 在已有功能中添加报表选择【追加】(同一节点多张报表情景下)。 d) 删除功能选择【删除】。 2. 节点类型 a) 发布为查询型节点选择【查询】。 b) 发布为报表型节点选择【报表】。 3. 菜单设置 a) 需要显示快速查询面板请选择【显示快速查询面板】(仅用于查询型节点)。 b) 需要支持穿透、联查功能请选择【穿透】【联查】。 c) 需要显示工具菜单请选择【显示工具菜单】(仅用于查询型节点)。 大中型企业与公共组织云平台 d) 需要显示明细汇总菜单请选择【显示明细/汇总菜单】(仅用于查询型节点)。 4. 功能节点编码及名称 a) 按编码规则填写功能编码 b) 填写功能名称并进行相应多语处理 注:菜单设置还可以根据需要通过功能节点参数进行设置。下面列举了配置显示菜单的参数名称: 图5-1-2 配置显示菜单的参数名称 5. 扩展功能节点参数 除了上边提到的功能节点参数外,还有一些功能节点参数不在预制之列,用户可以添加。 1) 全部输出 如果查询数据量超过预定的值,在查询报表里只能看到预定量的数据,多余的数据会截断。但在输出Excel/PDF时,默认支持全部输出,即虽然看不到全部数据,但能输出来。无此参数时,全部输出CheckBox是可见的,用户可设置,按需使用全部输出功能。如果控制用户只能输出当前查询显示的内容,可加此参数。参数值为N时,全部输出CheckBox不可见,用户只能输出当前数据。 2) 新报表查询条件相关的参数 l 查询项数据打开节点时是否立即加载。 大中型企业与公共组织云平台 默认值为“是”,即无此参数时,打开含新报表查询条件的查询时,查询项的内容直接加载。这样会增加远程调用及打开节点时的流量。对于对打开节点有要求的可加此参数进行控制。将参数值设置为“N”;查询项数据在打开节点时,不进行加载。需要按刷新查询项数据按钮才会加载数据 l 有默认查询方案时是否在打开节点时立即执行查询 默认为false。如需要立即执行的可以加此参数进行控制 l 一个查询里发布了多个报表的,执行了查询,在切换页签时是否也立即执行查询。默认为“是”。新报表查询条件是附在每个报表上的,因此在没有设置共享条件的情况下,可能查询会失败。如需单独执行查询,可以加此参数进行控制 5.1.2. 发布为报表型节点 发布为报表型节点和发布查询型节点过程一样,只需发布类型选择报表即可。请参考发布为查询型节点。 5.2. 发布后节点 自由报表发布后的节点成为一个普通NC功能,功能注册、菜单注册和功能权限控制都是NC统一机制管理的。这个节点我们一般称之为一个报表节点。 报表节点中的多张报表共用查询条件,这意味着查询条件或者查询方案的变化会作用到本节点的所有报表上面。 报表节点分为查询型和报表型两种节点,查询型节点用于系统中查看数据,当数据量超过五千后会截断,报表型节点用于订阅和实例的查看,当数据量超过两万后会截断。请根据实际需要选择节点类型。 5.2.1. 查询节点 查询节点由顶部菜单栏、左侧快速查询面板、中间数据展示区组成。 大中型企业与公共组织云平台 如下图: 图5-1-3 查询型节点 1. 打开节点 节点内所有报表在右边以多页签形式打开,显示报表基本格式,但是不加载报表数据。 2. 点击查询(需要配置查询面板) 根据节点的查询模板配置等内容,如果有查询条件输入界面,则弹出界面供用户设置。根据查询条件进行报表数据的加载和显示。 3. 选择查询方案 对于左侧面板显示的用户已保存的查询方案,鼠标点击时直接按照查询方案内容进行报表数据加载和显示。 4. 切换报表页签 按照当前的查询条件/查询方案内容,进行对应报表数据加载和显示。 5. 数据量 超过5000行数据会给出提示并截断。 6. 工具栏 大中型企业与公共组织云平台 图5-1-4 查询功能节点中的工具栏 7. 工具栏-升序/降序 对于列表,选择任意列中的数据右键或工具栏可进行排序操作。如果设置了分组则按照组内排序。排序是基于内存的,明细数据可选多列排序。 对于交叉表,交叉表的的维度可直接右键或工具菜单下按钮进行排序操作。交叉表的指标和小计只能通过工具栏中的快捷图标排序。 8. 工具栏-是否区域联动 区域联动的开关,默认开启。 9. 工具栏-小计 对于列表,可以基于当前内存数据进行重新分组和小计,用于改变报表样式。 图5-1-5 查询节点工具栏中小计功能 大中型企业与公共组织云平台 10. 工具栏-筛选 基于内存的数据过滤,如图 图5-1-6 查询节点工具栏中筛选功能 11. 工具栏-交叉转置 对于交叉表可以进行行列互换操作。如图转置前后 图5-1-7 转置前 图5-1-8 转置后 大中型企业与公共组织云平台 12. 工具栏-插入图片/删除图片 非扩展区域可以选择一块插入图片,同样可对插入的图片进行删除。 13. 工具栏-强制分页 强制分页后,打印时将分页打印。 14. 工具栏-条件格式,如图设置规则 图5-1-9 条件格式 图5-1-10 新建规则 图5-1-11 应用后数据预览 大中型企业与公共组织云平台 15. 工具栏-穿透/联查 当报表设置了穿透或联查时可以使用该功能。 16. 工具栏-其他功能 格式工具栏、编辑工具栏、单元属性属于基础功能,前面已有介绍。 17. 个性化功能 图5-1-12 个性化功能 个性化:是指保存每个用户的一些个性化设置信息,包含保存功能和恢复功能。 图5-1-13 个性化功能的保存与恢复 保存:目前支持打印设置信息的保存行列表字段所在列的列宽信息。 不同的用户对打开的报表进行打印信息设置或调整行列表字段列宽后,点击“个性化”,选择“保存”,这样就会保存每个用户的设置信息,用户下次打开这张报表里面的打印设置信息及字段的列宽信息就会是自己保存过的信息而被加载出来。 恢复:恢复是指打印设置信息及字段列宽信息恢复到报表格式设计中保存的状态。 大中型企业与公共组织云平台 5.2.2. 报表节点 报表型节点由顶部菜单栏、左侧订阅任务分类、中间数据展现区组成。如下图: 图5-1-12 报表型功能节点 1. 打开节点 节点内多个实例在右侧以页签的形式打开,默认不打开任何实例。 2. 任务分类 分类由三层结构组成,根节点为报表名称,第二层为任务名称,第三层为报表实例。 3. 报表实例 实例数据相关内容一旦生成永久不变,不随语种时区等环境变化而变化。 4. 数据量 报表型节点最大支持20000行数据,超出部分截断。 5. 订阅功能,点【订阅】按钮,如下图: 大中型企业与公共组织云平台 图5-1-13 报表订阅 自由报表订阅是一个真对报表型节点而提供的一种订阅功能,只对发布为报表型功能节点的报表提供服务。订阅后的报表将按照预先设定好的定时服务周期性执行并生成报表实例,报表实例的内容不会随时间和条件的变化而发生改变,是对报表执行时刻状态和数据的保存。报表实例可随时通过打开功能节点或在我的报表库中查阅也可以EXCEL附件的方式发送到邮件或消息中心。 6. 必填内容 任务名称、执行环境设置、定时设置(若启用)、条件设置、接收人。实例命名方式均为必填内容 7. 系统默认 执行环境默认当前用户登陆环境,定时设置默认启用,推送方式默认不勾选(报表节点无需选择默认发送),消息标题默认由报表名称+任务名称+实例名称组成,实例命名方式默认由报表名称+系统日期+时间组成。 大中型企业与公共组织云平台 8. 执行环境设置 执行环境是报表任务执行时的必要条件尤其后台定时任务,根据执行环境的设置模拟用户登陆状态。根据执行环境的语钟和时区显示数据,根据执行环境的用户和集团过滤数据。 9. 定时设置 发生频率可选天、周、月。频率选择“天”间隔选择“1”意思就是每隔一天为一个周期。执行次数可选择一次或多次选择执行一次时需要指定时间点选择执行多次时需要指定时间范围。有效期设置指设置任务的存活的时间范围 10. 条件设置 条件设置指报表执行时数据过滤条件,选择好条件后保存为一个查询方案,然后选择这个方案【确定】即可,执行条件对话框实质是为该节点分配的查询模版。 11. 推送设置 a) 选择接收人顾名思义就是报表消费者,接收人可多选。 b) 接收人留存数据,如果选择了此项就会按照每个接收的数据权限过滤数据,也就会没个接收人都执行一次报表,同时消耗了大量的系统资源请慎用。 c) 推送方式可选择的有,邮件、消息中心、我的报表库三个选项,可都选也可都不选择;选择“邮件”后系统会按照用户所关联的人员档案中的邮件地址发送邮件;选择了“消息中心”后系统将以EXCEl附件的方式发送到NC系统首页的消息中心;选择了“我报表库”后系统会发送到“消息看板”并且在我的消息看板中点“我的报表库”可查阅报表同时也会在门户中查看,报表节点默认可以看到报表执行后数据无需选择。 d) 实例命名方式指报表执行后产生实例名称的规则,支持自定义名称且系统提供内置的变量共选择如日期等。 12. 实例有效期 实例默认在系统中保留7天,立即执行产生的默认任务默认保存1天。(可更改),过期自动删除。 13. 实例命名方式 实例命名即:给报表实例的名称取名的一种方式,系统提供几种变量选择,也可以添加固定文字 大中型企业与公共组织云平台 14. 立即执行 a) 在没有选择任何任务且选择了报表的情况下,点立即执行首先要进行条件设置和推送设置 ,系统默认任务名称和执行环境设置。 b) 选择了任务后点立即执行,系统根据任务中的设置执行报表并生成实例。 c) 系统执行实例是在后台异步执行的。 15. 订阅维护 a) 修改 用户可以修改本人创建的任务中的任何设置,不能修改他人创建的任务。 b) 删除 用户可以删除本人创建的任务和任务实例,也可删除选择了接收人留存的实例。 c) 立即执行 用户可以立即执行本人创建的任务实例。 5.3. 另一种报表节点的实现 1. 浏览型报表节点 除了查询型报表节点,报表型报表节点之外,还有一种浏览型报表节点。浏览型节点的报表展示是按照左侧树分类,右格式设计器的样式展示的。功能上与查询相近,可以预览查询,增加了报表树的展示,可以选择多张报表查询预览。 大中型企业与公共组织云平台 图5-1-14 浏览型报表节点 2. 浏览型节点的实现 浏览型节点有两种实现方式,一种的开发功能节点,一种按目录发布节点;两种方式基本一样,只是实现的方式步骤和对目录树的过滤条件不同。 第一种:开发一个浏览型的功能节点。 在应用管理平台,开发配置工具,功能注册中,增加功能。在功能类名中注册: nc.ui.iufo.freereport.bowser.FreeReportBowserFunclet 大中型企业与公共组织云平台 图5-1-15 添加一个浏览型节点 以此种方式定义的功能节点,将浏览出所有的报表目录和报表。如果需要增加对数据的管控,可以在参数中注册管控类。 如下图所示,在参数中增加参数名称为:BDManager_Service_Class 参数值为实现了IBDManageModeService接口的一个实现类全路径名称。 IBDManageModeService接口中的getVisibleCondition方法返回的是数据的管控条件,注册该类后,左侧的树分类会根据接口的返回值过滤分类。 图5-1-16 参数注册 第二种:按目录发布节点 按目录发布节点需要一个已有的管理节点,在该节点的spring配置文件中,增加发布目录按钮,并注册在界面上。如图为配置文件需要配置的内容。 发布目录功能类名: 大中型企业与公共组织云平台 nc.ui.iufo.freereport.published.PublishRepDirAction 图5-1-17 图5-1-18 按上图配置的节点,界面上会出现发布目录按钮 大中型企业与公共组织云平台 图5-1-19 配置参数后出现的发布目录按钮 点击按钮,弹出发布节点界面,该界面与发布报表的界面一样,同样可以做新增,覆盖,追加,删除等操作。 通过此界面发布的节点,目录信息和节点信息将会存在一张固定的表中,打开该节点时,将会按照功能节点查询报表目录信息,保证该节点只能看到发布的目录中的报表。同样的,也可以在功能注册中给该节点注册管控条件,注册方法与浏览型节点一样。 大中型企业与公共组织云平台 图5-1-20 发布节点向导 备注:对于组织级的节点,可能需要在分类上显示组织参照。对于两种浏览型的节点,都可以通过注册参数的方式进行组织参照注册。在功能注册节点中,增加参数: 参数名称:UserDefineRefModelClassName 参数值:nc.ui.iufo.freereport.published.AbsRepPubRefModel,集成自该类的子类,实现自己的组成参照模型。注册该参数后会显示组织参照。如下图: 大中型企业与公共组织云平台 图5-1-21 图5-1-22 显示组织参照的报表型节点 5.4. 报表订阅中心 报表订阅中心管理着系统中所有的报表订阅,可维护任意报表的订阅任务及实例。为订阅任务的统一管理提供了便捷。 大中型企业与公共组织云平台 打开订阅中心节点,如下图: 图5-1-23 报表订阅 页面布局: 订阅中心界面由顶部的菜单栏,左侧订阅任务分类,中间任务信息组成。左侧为树形结构,第一层是模块名称,第二层是功能节点名称,第三层是报表名称,第四层是接收人名称(前提是选择了接收人留存数据),第五层是报表实例名称。一个功能节点可以有多个报表,一个报表下可订阅多个任务,一个任务会产生多个实例。 5.4.1. 订阅报表报表 在左侧树形结构中选择一个报表名称,点【新增】按钮填写任务信息。如下图: 大中型企业与公共组织云平台 图5-1-24 添加订阅信息 1. 必填内容 任务名称、执行环境设置、定时设置(若启用)、条件设置、接收人。实例命名方式均为必填内容 2. 系统默认 执行环境默认当前用户登陆环境,定时设置默认启用,推送方式默认不勾选(报表节点无需选择默认发送),消息标题默认由报表名称+任务名称+实例名称组成,实例命名方式默认由报表名称+系统日期+时间组成。 3. 执行环境设置 执行环境是报表任务执行时的必要条件尤其后台定时任务,根据执行环境的设置模拟用户登陆状态。根据执行环境的语钟和时区显示数据,根据执行环境的用户和集团过滤数据。 4. 定时设置 发生频率可选天、周、月。频率选择“天”间隔选择“1”意思就是每隔一天为一个周期。执行次数可选择一次或多次选择执行一次时需要指定时间点选择执行多次时需要指定时间范围。有效期设置指设置任务的存活的时间范围 大中型企业与公共组织云平台 5. 条件设置 条件设置指报表执行时数据过滤条件,选择好条件后保存为一个查询方案,然后选择这个方案【确定】即可,执行条件对话框实质是为该节点分配的查询模版。 6. 推送设置 a) 选择接收人顾名思义就是报表消费者,接收人可多选。 b) 接收人留存数据,如果选择了此项就会按照每个接收的数据权限过滤数据,也就会没个接收人都执行一次报表,同时消耗了大量的系统资源请慎用。 c) 推送方式可选择的有,邮件、消息中心、我的报表库三个选项,可都选也可都不选择;选择“邮件”后系统会按照用户所关联的人员档案中的邮件地址发送邮件;选择了“消息中心”后系统将以EXCEl附件的方式发送到NC系统首页的消息中心;选择了“我报表库”后系统会发送到“消息看板”并且在我的消息看板中点“我的报表库”可查阅报表同时也会在门户中查看,报表节点默认可以看到报表执行后数据无需选择。 d) 实例命名方式指报表执行后产生实例名称的规则,支持自定义名称且系统提供内置的变量共选择如日期等。 7. 实例命名方式 实例命名即:给报表实例的名称取名的一种方式,系统提供几种变量选择,也可以添加固定文字 8. 立即执行 后台异步执行任务,任务执行成功时给出提示(订阅中心不能查看执行结果)。 5.4.2. 报表组合订阅 报表组合订阅是将多个报表组合在同一个任务当中。订阅后会同时执行并将附件绑定到同一邮件中。与报表订阅中心的区别是条件设置可以选多个报表,如图: 大中型企业与公共组织云平台 图5-1-25 报表组合订阅界面 5.4.3. 订阅维护 1. 任务修改 选择一个任务点【修改】,修改任务信息 2. 任务删除 选择一个或多个任务点【删除】,删除任务包括任务下的所有实例,删除后所有用户不可见。 3. 实例删除 选择一个或多个实例点【删除】,删除实例,若未选择接受人留存数据删除后则所有用户不可见,若选择了接收人留存数据则只影响对应接收人。 4. 任务过滤 条件过滤出需要维护的任务。 5. 数据源配置 大中型企业与公共组织云平台 用于报表实例配置存储数据源。 5.5. 报表的导入导出 报表管理节点提供报表的导入和导出功能,若报表存在私有语义模型会同时导出私有语义模型,如下图; 图5-1-26 报表的导出 1. 按目录导出 选择按目录方式导出,则会到出该目录下的所有报表包括所有子目录下的报表;同时会导出该目录下的子目录结构。 2. 按报表导出 按报表导出方式不会导出目录结构,可以多选同时导出。 3. 报表导入 若导入文件中存在目录信息,同时会导入目录及目录的结构,导入时重置审计信息为当前登陆用户,集团、组织等信息都会发生改变;若导入文件中存在私有语义模型则会同报表一并导入;导入若发现有同名报表则生成新的编码和名称主键改变。 大中型企业与公共组织云平台 4. 文件格式 导入导出文件采用xml格式标签代表目录,下的子标签为对象信息;代表报表,代表语义模型。 6. 穿透、联查和联动 6.1. 报表穿透 自由报表穿透是指按照用户在报表格式中设定的穿透规则,进行关联报表的数据查看。报表穿透暂时没有提供业务扩展机制。 目前支持两种方式:穿透到单张自由报表直接浏览;穿透到自由报表发布后节点。 图6-1-1 穿透规则管理 穿透规则管理器如上所述,对于表格中的每一列,有必要进行解释下: 1. 规则序号:一个序号而已,仅供显示用,没特别意义。 2. 规则编码:这个主要用于发布后结点控制按钮的可用性上。走的是UAP的统一权限控制,具体可以参考这样的文章。 3. 规则名称:对应的就是穿透菜单下的子菜单名称 4. 穿透字段:如果设置了这个字段,则意味着只有点击该字段对应的数据时,对应的穿透菜单才会出现。像上表中的设置,你只有在销售员对应的数据列上才能看到名为“穿透到汇总”这个菜单项。不设的话,意味着,只要在扩展区内点右键,穿透里都会有这个菜单项。 大中型企业与公共组织云平台 5. 目标节点:如果需要穿透到自由报表发布后的节点,则需要在此设置对应的结点。 6. 目标报表:设置穿透后需要打开的报表。 接下来还需要对按钮【编辑】作进一步说明。 选中一条穿透规则,点【编辑】则会打开规则编辑器: 图6-1-2 穿透规则编辑 这个编辑器的作用就是对目标表设置一些过滤条件。如上所示,我们主要需要关注“目标表条件类型”这一列,可以对目标表的页维度,参数进行赋值,这样过滤出来的数据就是用户需要的了。按上表的设置,穿透打开后的报表的页维度的值应当等于当前报表鼠标所在位置的销售员名称,我们具体看下执行的结果: 大中型企业与公共组织云平台 图6-1-3 对报表应用穿透规则 最后看下执行的结果: 图6-1-4 应用穿透规则执行后的结果 这就是穿透,和后面要讲的联查相比,穿透是比较简单的,没有业务扩展接口,用户不用写任何代码即可实现查看其它报表数据的功能。但正因为简单,能传递的过滤条件也非常有限,对于很多复杂的业务需求,就不得不靠报表联查了。 大中型企业与公共组织云平台 6.2. 报表联查 报表联查是根据业务需要进行当前报表的关联数据查看等动作,这是一个业务扩展机制,需要业务产品根据扩展机制进行联查功能的开发。 6.2.1. 报表联查更深的一点理解 报表联查是根据业务需要进行当前报表的关联数据查看等动作,这是一个业务扩展机制,需要业务产品根据扩展机制进行联查功能的开发。和报表穿透很像,但比报表穿透更具扩展性,业务部门可以根据传过来的联查参数进行任意的拼接,获得关联数据。 联查是语义模型级的,最终配置时是给对应的语义模型配置,所有基于此语义模型生成的报表都有该联查信息。穿透是报表级的(更准确的说是可扩展区级)。 6.2.2. 业务联查的实现步骤 1. 实现接口:ITraceDataOperator a) 联查操作接口,也就是如何进行联查,目前定义了三个操作,主要需要实现前两个。 /** 执行数据追踪各业务模块根据需求执行追踪操作*/ public void traceData(Container container, TraceDataParam param); /*** 业务联查的菜单*/ public IMenuActionInfo getMenuItemInfo(); /** 扩展追踪动作提供除“数据追踪”功能外的其他操作 */ public Action[] ctreateExtensionActions(); b) 另一个接口ITraceDataOperator2用于增加联查菜单可用性的校验。该接口是继承ITraceDataOperator的。 大中型企业与公共组织云平台 /** * 由业务组判断联查菜单是否可用,isEnable()方法会经常调用此方法,请注意效率 * 另外,此方法不能直接弹出对话框,需要弹出对话框提示用户的,请在traceData() *中做*/ public boolean validate(IContext context, TraceDataParam param); c) 如果对于用户选中多行的情况需要做处理的,可同时实现接口IBeforeTraceData。注意:如果此方法中经过判断不想继续进行联查操作,那么不要返回null,而是建议抛出一个com.ufida.zior.exception MessageException。 /** * 执行数据追踪前,各业务模块根据需求对追踪参数进行处理 * @param container 追踪过程中弹出对话框等需要的父组件。 * @param selTraceParams 当前选中区域的联查参数数组 * @return TraceDataParam * 返回处理过的联查参数,可以使用其addParam()方法进行扩展属性设置 */ public TraceDataParam beforeTraceData(Container container, TraceDataParam[] selTraceParams); d) 下面是一个完整的简单例子,用户可以参考着实现自己的联查: /** 大中型企业与公共组织云平台 *自由报表【联查】的一个简单例子 *@author:zhongkm2011-5-13上午09:49:42 */ publicclass MyTraceDataOperator implements ITraceDataOperator { private String reportID = null; private String user_name = null; public MyTraceDataOperator(String userName, String reportID) { this.reportID = reportID; this.user_name = userName; } @Override public IMenuActionInfo getMenuItemInfo() { DefaultMenu menuInfo = new DefaultMenu("zkmcode","我的联查1"); menuInfo.setIcon("/images/reportcore/exit.gif"); menuInfo.setToolTipText("试试我的联查"); return menuInfo; } @Override publicvoid traceData(Container container, TraceDataParam param) { 大中型企业与公共组织云平台 IRowData rowData = (IRowData) param.getRowData(); if (rowData != null) { // 根据报表ID打开报表,并根据查询条件加载数据 FreeReportFuncletUtil.showReport(container, getReportID(), getReportDrillParam(param)); } } /** *把联查参数转成穿透参数,可以看出联查和穿透基本是一样的 *@paramtraceData *@return */ public FreeReportDrillParam getReportDrillParam(TraceDataParam traceData) { FreeReportDrillParam drillParam = new FreeReportDrillParam(); drillParam .setTraceDatas(new SimpleRowDataParam[] { new SimpleRowDataParam( traceData) }); drillParam.setDrillRule(new ReportDrillInfo()); IQueryCondition queryCondition = (IQueryCondition) traceData 大中型企业与公共组织云平台 .getParam(FreeReportContextKey.KEY_IQUERYCONDITION); queryCondition = processQueryCondition(queryCondition, traceData); drillParam.setSrcCondition(queryCondition); return drillParam; } /** *根据选择的数据,在原有查询条件的基础上追加查询条件 *也可以选择抛弃原来的查询条件,完全由这边来决定 *@paramqueryCondition *@return */ private IQueryCondition processQueryCondition( IQueryCondition queryCondition, TraceDataParam traceData) { BaseQueryCondition baseCondition = (BaseQueryCondition) queryCondition; if(baseCondition == null) baseCondition = new BaseQueryCondition(true); IRowData rowData = (IRowData) traceData.getRowData(); String userName = (String) rowData.getData(getUser_Name()); 大中型企业与公共组织云平台 // 追加的查询条件 FilterItem item = new FilterItem(); StringBuilder condition = new StringBuilder(); condition.append(getUser_Name()).append(" = '").append(userName).append( "' "); item.setExpression(condition.toString()); FilterDescriptor descAppend = new FilterDescriptor(); descAppend.addFilter(item); Descriptor[] newDesc = null; newDesc = new Descriptor[] { descAppend }; baseCondition.setDescriptors(newDesc); return baseCondition; } public String getReportID() { returnreportID; } publicvoid setReportID(String reportID) { 大中型企业与公共组织云平台 this.reportID = reportID; } public String getUser_Name() { returnuser_name; } publicvoid User_Name(String user_name) { this.user_name = user_name; } @Override public Action[] ctreateExtensionActions() { returnnull; } } 2. 实现接口TraceDataInterface package nc.pub.smart.tracedata; /** *业务联查接口,由业务组根据具体业务去实现 * *@authorwanyonga 大中型企业与公共组织云平台 * */ publicinterfaceTraceDataInterface { ITraceDataOperator[] provideTraceDataOperator(); } 业务联查接口,通过此接口可以获得n个联查操作,执行具体的联查动作。即可以把实现了ITraceDataOperator接口的操作类组合在一起,一次性注册给需要的语义模型。下面是我的一个实现,只返回一个联查操作MyTraceDataOperator. /** *测试联查的小例子 *@author:zhongkm2011-5-13上午09:47:35 */ publicclass MyTraceDataTest implements TraceDataInterface{ //"wuliao1"这张报表对应的id private String reportID = "1001AA100000000011TD"; private String user_Name ="user_name"; @Override public ITraceDataOperator[] provideTraceDataOperator() { returnnew ITraceDataOperator[] { new MyTraceDataOperator(user_Name, reportID)}; 大中型企业与公共组织云平台 } } 3. 联查信息的注册 a) 业务部门实现完自己的联查后,我们为开发用户提供界面操作,可通过【语义模型管理】--【工具】--【业务扩展】中给对应的语义模型增加联查接口。如下图所示: 图6-1-5 联查接口注册 所属模块、注册类名及接口名称为必输项。联查注册对应数据库中的表为iufo_tracedataregister。 b) 然后在“报表平台-〉分析建模-〉语义模型管理”节点中,为已经建立的语义模型配置联查接口实现类。 4. 增加联查 在【语义模型管理】--【工具】--【业务扩展】中给对应的语义模型增加联查 大中型企业与公共组织云平台 图6-1-6 为语义模型分配业务联查 这样,所有基于语义模型dddd生成的报表,在发布后结点中都可以看到对应的联查菜单。 5. 联查的执行 报表节点中,如果引用的语义模型中配置了联查接口实现类的话,会在联查菜单下出现具体业务联查菜单项,每个菜单项会调用到对应的联查动作Action。 6.2.3. 工具方法 目前只提供一个工具类:FreeReportFuncletUtil,有三个方法 /**通过联查参数打开报表节点中的指定报表*/ publicstaticboolean openReportNode(String funcode, FuncletInitData initData) 大中型企业与公共组织云平台 /**通过功能id打开节点*/ publicstaticboolean openReportNodeById(String funcid, FuncletInitData initData) /**在发布后节点内切换报表显示*/ publicstaticboolean showReport(Container container, String reportID, FreeReportDrillParam drillParam) 方法一: /** * 通过联查参数打开报表节点中的指定报表 * @param funcode * @param initData * @return */ public static boolean openReportNode(String funcode, FuncletInitData initData) n 方法参数说明: u String funcode:目标节点的功能编码。 u FuncletInitDatainitData:这是UAP封装的打开节点时的初始数据对象。 对于报表节点的打开,要求这个FuncletInitData对象的initData属性实现IReportNodeInitData接口,便于从中获取穿透参数: 方法二: /** * 通过功能id打开节点中 * @param funcid 大中型企业与公共组织云平台 * @param initData * @return */ public static boolean openReportNode(String funcid, FuncletInitData initData) n 方法参数说明: u String funcid:目标节点的功能ID。 u FuncletInitDatainitData:这是UAP封装的打开节点时的初始数据对象。 对于报表节点的打开,要求这个FuncletInitData对象的initData属性实现IReportNodeInitData接口,便于从中获取穿透参数: 方法三: /** * 在发布后节点内切换报表显示 * @param container * @param reportID * @param drillParam * @return */ public static boolean showReport(Container container, String reportID, FreeReportDrillParam drillParam) n 方法参数说明: u Container container:父窗口。 u String reportID:目标报表的id。 u FreeReportDrillParam drillParam:自由报表打开时的穿透参数。 穿透参数是自由报表进行报表数据加载的一种参数条件。在报表执行 大中型企业与公共组织云平台 的时候,如果发现上下文中有报表穿透参数,则会执行查询交互接口IQueryAction的doQueryByDrill方法,此方法具体内容详见第六章的扩展机制介绍。 区别: 方法一和方法二基本一样,唯一区别是前者传报表的编码,后者传报表的ID,参数FuncletInitData initData要求实现IReportNodeInitData接口,便于从中获取穿透参数: publicinterface IReportNodeInitData { public FreeReportDrillParam getReportDrillParam(); } /** * 自由报表发布节点的初始数据对象接口,用于传递报表穿透参数 */ public interface IReportNodeInitData { /** * 返回自由报表通用的穿透参数 * * @return */ public FreeReportDrillParam getReportDrillParam(); } 当然你也可以直接构造FreeReportDrillParam对象,然后作为参数传进来。参数FreeReportDrillParam drillParam的构造可以参考2.1中的代码。 大中型企业与公共组织云平台 方法三中的container必须为Mainboard。与前两种方法的区别是,前两种方法都会新创建报表设计器,然后再打开报表,而方法三直接在原有的设计器中打开报表(相当于添加了一个页签)。 6.3. 区域联动 前面讲到的穿透和联查都属于报表级的,从一张报表打开另一张报表。除此以外,我们还提供了在同一张报表内,一个扩展区控制另一个扩展区数据展开的功能,即区域联动。 先分析联动的设置界面(报表中至少存在两个扩展区时才能打开): 图6-1-6 扩展区域联动定义 大中型企业与公共组织云平台 1. 这个界面需要讲的地方不多,很多内容应该都能直接看懂,只对以下几点作说明: a) 默认展开:这个是设置目标扩展区是否加载数据。默认情况下,设计器在查询数据或切换到预览态时,所有扩展区都会加载数据。如果这里设为“否”,则对应的扩展区先不会加载数据,只有等“当前扩展区”联动它时,才会按联动条件去加载数据。 b) 设置方式:“默认”或“自定义”。默认方式就是上图中我们看到的界面,绝大部分业务需求都可以通过此种方式来实现。当默认方式实在无法实现时,也可以“自定义”,实际上就是由用户自己写一个类,来控制联动的展开。由于这种方式比较复杂,一般不推荐用户使用。 2. 过滤条件表格中两个字段的内容也需要说明一下: a) 字段:目标扩展区的中字段,可以从对应语义模型树中选一个(意味着该字段可以不出现在目标扩展区中)。 b) 值:当值类型为“字段”时,值中的字段来自当前扩展区中的字段+隐藏字段,所以实现的时候是以下拉框的形式供用户选择。 3. 下面通过两个简单的联动案例来说明区域联动的使用情况。 案例一:行列表联动行列表,如下图所示 图6-1-7 联动的两个扩展区域 希望通过双击第一个扩展区的某一行时,下面的扩展区会根据双击行的销售员过滤数据,设置很简单就是刚开始的那张图中的设置结果,再看下联动效果吧: 大中型企业与公共组织云平台 图6-1-8 联动效果 案例二,再看个与图表相关的联动 图6-1-9 图表相关的联动 饼图是各产品销售总额的分布图,要求双击上面行列表中某行时,饼图会显示对应销售员的分布图,联动设置和上文的基本一样,同样是“销售员”=“销售员”的形式。 我们最后看下联动效果图: 大中型企业与公共组织云平台 图6-1-10 销售员为丁健的图表联动效果图 再看一下另一个人的分布图: 大中型企业与公共组织云平台 图6-1-11 销售员为陈羽的图表联动效果图 大中型企业与公共组织云平台 7. 报表节点的扩展 除了上面介绍的联查外,报表节点支持以查询菜单的动作为入口的一系列业务扩展机制。 7.1. 查询动作扩展 查询动作接口为:nc.ui.iufo.extend.IQueryAction,主要完成查询菜单和查询方案等界面交互功能。 其实现类应该在client中。 报表平台提供了此接口的默认实现:nc.ui.iufo.freereport.extend. DefaultQueryAction。 /** * “查询”交互的扩展 */ public interface IQueryAction { public static final String KEY_IQUERYACTION = IQueryAction.class.getName(); /** * “查询”菜单的执行动作 * * @param parent * @param context * @param reportModel * @param oldCondition 大中型企业与公共组织云平台 * @return */ public abstract IQueryCondition doQueryAction(Container parent, IContext context, AbsAnaReportModel reportModel, IQueryCondition oldCondition); /** * 查询交互的对话框,需要从中获取查询方案面板 * * @param parent * @param context * @param reportModel * @param oldCondition * @return */ public abstract QueryConditionDLG getQueryConditionDlg(Container parent, IContext context, AbsAnaReportModel reportModel, IQueryCondition oldCondition); /** * 根据指定查询方案进行查询 * * @param parent * @param context 大中型企业与公共组织云平台 * @param reportModel * @param queryScheme * @return */ public abstract IQueryCondition doQueryByScheme(Container parent, IContext context, AbsAnaReportModel reportModel, IQueryScheme queryScheme); /** * 根据外部送入的穿透参数进行查询 * * @param parent * @param context * @param reportModel * @param drillParam * @return */ public abstract IQueryCondition doQueryByDrill(Container parent, IContext context, AbsAnaReportModel reportModel, FreeReportDrillParam drillParam); /** * 页维度过滤的事件处理 * * @param parent 大中型企业与公共组织云平台 * @param context * @param reportModel */ public abstract void doPageDimFilter(Container parent, IContext context, AbsAnaReportModel reportModel); } 7.2. 查询条件 查询扩展中查询交互、按方案查询和按穿透参数查询三个方法的返回值都是查询条件nc.itf.iufo.freereport.extend.IQueryCondition。 报表执行过程中会使用此查询条件,并将其放在上下文中进行传递。例如语义模型执行时就可以使用键值FreeReportContextKey. KEY_IQUERYCONDITION从上下文中获取此条件对象。 此接口的实现类应该在public中。 业务节点中经常会通过查询模板对话框获取查询条件,请注意创建查询模板时要求注册的查询字段编码和语义模型字段名称一致。请不要使用基于元数据创建的查询模板,因为这种方式返回的where条件子句会出现表别名不固定的情况,在传递给语义模型执行的时候往往会导致sql错误。除非业务查询扩展中自己能够处理此查询条件并传递到语义模型正确执行。 报表平台提供了此接口的默认实现:com.ufida.report.anareport.base. BaseQueryCondition。 /** * “查询”交互返回的条件 * 大中型企业与公共组织云平台 */ public interface IQueryCondition extends Serializable, Cloneable { /** * 是否继续本次查询 * * @return boolean */ public abstract boolean isContinue(); /** * 返回针对各个区域的条件设置 * * @param areaName 报表扩展区域名称 * @param smartModel 引用的语义模型 * @return IAreaCondition */ public abstract IAreaCondition getAreaConditions(String areaName, SmartModel smartModel); /** * 返回报表格式模型的调节器 * * @return IReportAdjustor */ 大中型企业与公共组织云平台 public abstract IReportAdjustor getReportAdjustor(); /** * 返回业务逻辑对报表单元格式(包括精度)的处理器 * * @return IBusiFormat */ public abstract IBusiFormat getBusiFormat(String areaName, SmartModel smartModel); } 7.3. 区域条件 自由报表中语义模型的执行是以扩展区域为单位的,所以查询条件中需要针对每个扩展区域获取其语义模型执行条件。 此接口的实现类应该在public中。 报表平台提供了此接口的默认实现:com.ufida.report.anareport.base. BaseAreaCondition。 /** * 为报表中各个区域设置的“查询”条件 * */ public interface IAreaCondition { /** * 返回额外设置的语义模型描述器数组,包括:排序、筛选、汇总等 大中型企业与公共组织云平台 * @return Descriptor[] */ public abstract Descriptor[] getAllDescriptors(); /** * 返回外部设置的报表区域参数数组 * @return Parameter[] */ public abstract Parameter[] getParameters(); } 7.4. 业务格式 业务格式接口nc.itf.iufo.freereport.extend.IBusiFormat,用于实现业务逻辑对报表数据的特殊格式要求。 此接口的实现类应该在public中。 /** * 业务逻辑对报表格式的处理接口 * */ public interface IBusiFormat { public static int BUSIFORMAT_TYPE_NONE = 0;// 没有业务格式 public static int BUSIFORMAT_TYPE_COLUMN = 1;// 整列(字段)使用同样的业务格式 大中型企业与公共组织云平台 public static int BUSIFORMAT_TYPE_ROW = 2;// 业务格式和行数据相关 /** * 返回报表区域中,指定语义模型字段的业务格式类型,请使用本接口的常量定义 * * @param areaPK * @param smartID * @param fldName * @return */ public abstract int getFormatType(String fldName, CountField countField); /** * 返回指定字段的整列精度,如果不需要重新指定则请返回TableConstant.UNDEFINED * * @param areaPK * @param smartID * @param fldName * @return */ public abstract int getColumnDigital(String fldName, CountField countField); 大中型企业与公共组织云平台 /** * 根据行数据返回指定字段的精度,如果不需要重新指定则请返回TableConstant.UNDEFINED * * @param areaPK * @param smartID * @param fldName * @param rowData * @return */ public abstract int getDataDigital(String fldName, CountField countField, IRowData rowData); /** * 返回字段新的整列格式 * * @param areaPK * @param smartID * @param fldName * @param oldFormat * @return */ public abstract IFormat getColumnFormat(String fldName, CountField countField, IFormat oldFormat); 大中型企业与公共组织云平台 /** * 根据行数据返回字段对应新的单元格式 * * @param areaPK * @param smartID * @param fldName * @param rowData * @param oldFormat * @return */ public abstract IFormat getDataFormat(String fldName, CountField countField, IRowData rowData, IFormat oldFormat); } 7.5. 格式调整器 格式调整器接口nc.itf.iufo.freereport.extend.IReportAdjustor,用于实现根据查询条件动态更改报表格式的要求。但是一旦业务代码进行了格式调整,意味着用户自己定义的报表格式一定会有损失,请慎重使用。 此接口的实现类应该在public中。 /** * 自由报表格式模型调节器 */ 大中型企业与公共组织云平台 public interface IReportAdjustor { /** * 进行单个扩展区域的格式模型调整 * * @param context * @param areaPK * @param reportModel */ public abstract void doAreaAdjust(IContext context, String areaPK, IAreaCondition areaCond, AbsAnaReportModel reportModel); /** * 进行报表格式模型的调整 * * @param context * @param reportModel */ public abstract void doReportAdjust(IContext context, AnaReportModel reportModel); } 如果业务逻辑需要对报表数据进行再加工处理,则可用上面的格式调整器同时实现报表数据调整接口nc.itf.iufo.freereport.extend.IReportDataAdjustor。 /** 大中型企业与公共组织云平台 * 自由报表数据模型的业务代码扩展 * */ public interface IReportDataAdjustor extends IReportAdjustor { /** * 进行交叉表头的处理 * * @param context * @param areaPK * @param reportModel */ public abstract CrossTableModel doAdjustCrossHeader(String areaPK, IContext context, CrossTableModel crossTabel, AbsAnaReportModel reportModel); } 7.6. 报表订阅相关接口 报表可以通过创建订阅任务的方式,实现后台定时执行。 相关接口有三个: 1. 报表订阅条件设置的交互接口: nc.ui.iufo.extend. ISubscribeAction 其实现类应该在client中。 默认实现类:nc.ui.iufo.freereport.extend. DefaultSubscribeAction。 大中型企业与公共组织云平台 /** * 报表订阅条件设置的交互接口 */ public interface ISubscribeAction { public static final String KEY_ISUBSCRIBEACTION = "nc.ui.iufo.extend.ISubscribeAction"; /** * 报表订阅条件设置的交互 * * @param parent * @param context * @param reportModel * @param oldCondition * @return */ public abstract ISubscribeQueryCondition doSubscribeAction(Container parent, IContext context, AbsAnaReportModel reportModel, ISubscribeQueryCondition oldCondition); } 2. 报表订阅条件接口: nc.itf.iufo.freereport.extend.ISubscribeQueryCondition 大中型企业与公共组织云平台 其实现类应该在public中。 默认实现类:com.ufida.report.anareport.base. BaseSubscribeCondition。 /** * 报表订阅的查询条件,应该支持保存相对条件 * */ public interface ISubscribeQueryCondition extends Serializable { /** * 订阅条件的文字显示内容 * * @return */ public abstract String getConditionNote(); } 3. 报表订阅条件转换器接口: nc.itf.iufo.freereport.extend. ISubscribeConditionConvertor 其实现类应该在public中。 默认实现类:com.ufida.report.anareport.base. DefaultSubConvertor。 /** * 报表订阅的查询条件转换接口 * */ 大中型企业与公共组织云平台 public interface ISubscribeConditionConvertor { public static final String KEY_ISUBSCRIBECONVERTOR = "nc.itf.iufo.freereport.extend.ISubscribeConditionConvertor"; /** * 处理报表订阅条件,将相对条件根据上下文转换成执行时的绝对条件 * * @param subscribCondition * @param context * @param reportModel * @return */ public abstract IQueryCondition getQueryCondition(ISubscribeQueryCondition subscribCondition, IContext context,AbsAnaReportModel reportModel); } 7.7. 组织权限扩展接口 默认情况下,报表数据会按照2.24.3节中的数据权限规则进行过滤。 为了满足用户个性化需求,有些用户查看的自定义报表,要根据用户的组织权限进行控制,我们提供了组织权限扩展机制。该机制提供组织权限扩展接口IOrgAuthorityExt,报表开发者可以实现该接口。根据用户的组织权限需求,返回组织权限的筛选描述器即可。用户的接口实现类可以继承默认的接口实现类:DefaultOrgAuthorityExt,并根据实际需求选择控制流程。 大中型企业与公共组织云平台 /**     * 获得组织权限的筛选描述器     * @param context:执行上下文     * @param areaPK:区域PK     * @param smartModel:语义模型     * @param nodeType:当前节点类型(全局、集团、组织)     * @param groupField:集团字段,优选选取用户设置的,其次是语义模型默认的:pk_group     * @param isGroupSet:集团字段是否是用户设置的(与默认集团筛选条件的拼写有关)     * @param orgFieldSet:用户设置的组织字段(与默认集团筛选条件的拼写有关)     * @param orgField :组织字段,优先选取用户设置的,其次是语义模型默认的:pk_org     * @return: 筛选描述器     */     public abstract FilterDescriptor getMainOrgDescriptor(IContext context , String areaPK, SmartModel smartModel, NODE_TYPE nodeType, Field groupField, boolean isGroupSet, Field orgFieldSet, Field orgField) throws MessageException; 大中型企业与公共组织云平台 7.8. 报表变量的赋值实现 变量的赋值可以通过两种方式实现。 1. 可以在查询前,通过一下代码对报表变量的值进行修改。需要知道报表变量的编码值。 ReportVariables varPool =ReportVariables.getInstance(reportModel.getFormatModel()); varPool.getVariable("key").setValue("value"); 2. 可以注册报表变量实现类 注册变量可以使用以下两个类中的任意一个(根据需求选取)。 a) 一种是实现com.ufida.report.free.plugin.param. IReportVarService接口,并注入到报表格式中。该接口的实现将覆盖所有的取值方式。即预置的变量(如日期等)也从该接口取值。 b) 另一种是继承com.ufida.report.free.plugin.param.AbsReportVarService,该接口继承IReportVarService接口,增加了contains方法,用来判断该变量是否是此接口加入的,从而判断变量的取值是否从该接口取。 IReportVarService接口中有两个方法: 接口1: /** * 获取变量,返回需要注册的所有变量 * * @return */ public List getVars(); 接口2: /** 大中型企业与公共组织云平台 * 设置变量的值。返回变量<编码,值>集合。查询时将从此取值 * * @param context 报表的上下文。 * @param paraKey 参数key * @return */ public Object getVarsValues(IContext context, String paraKey); AbsReportVarService接口继承IReportVarService,内部有一个方法: public boolean contains(Object obj) 载入变量接口: 在报表变量定义界面,点击载入变量 大中型企业与公共组织云平台 图7-1-1 报表自定义变量设置 弹出以下界面,输入变量实现类。 图7-1-2 报表变量载入 确定后会载入getVars接口返回的所有变量。取值按接口的返回值确定。 大中型企业与公共组织云平台 7.9. 工具方法 自由报表中,提供了一些常用格式样式的代码设置方法,有了这些方法,可以在适当的时机使用代码对格式样式进行调整,而不用使用格式设计器。一般的使用场景都是在格式调整器中调用相应方法,格式调整器的使用方法,可参照【查询扩展机制】相关。 工具方法类:com.ufida.report.anareport.areaset.AreaContentSetUtil,下面对工具类得各个方法加以说明 1. 统计分组格式设置方法 /** * 根据区域内容设置重新设置扩展区 * * @param areaContentSet * @param anaModel * @return */ public static boolean resetExCellByAreaContent(AreaContentSet areaContentSet, AbsAnaReportModel anaModel) ; 该方法将参数中的区域设置成一个分组合的格式。 参数AreaContentSet:此类主要用封装重设区域的信息,主要参数信息包括: private String areaPk:扩展区主键 private String smartModelDefID:语义模型ID private AreaFieldSet[] detailFldNames:明细字段信息(非分组分合计字段) 大中型企业与公共组织云平台 private AreaFieldSet[][] groupFldNames:分组字段信息 private AreaFieldSet[] areaFieldSet:统计字段信息 private AreaFieldSet[] uncountFieldSet:不做统计的字段信息(一般不设置areaFieldSet时,认为所有的数值型字段都做统计,该属性是用来标明那些不做统计的数值型字段) private int showType = SUBTOTAL_AFTER_GROUP:显示类型,合计在分组前或合计在分组后 private boolean isShowCount = true:是否显示合计信息 private Map formatMap:标题,小计,合计,标题的格式信息 private String title:标题内容信息 private AreaPosition titleArea:标题所在区域位置 private int tilteHeight = 2:标题区域高度 private IFormat titleFormat:标题单元样式 private RepHeader repHeader = null :暂无用 参数AbsAnaReportModel:报表模型。 对于如下图的格式,设置方法如下: AreaContentSet contentSet= new AreaContentSet(); contentSet.setAreaPk(pkArea); contentSet.setSmartModelDefID(smartId); contentSet.setDetailFldNames(detailFlds); contentSet.setGroupFldNames(grpFlds); contentSet.setAreaFieldSet(countFlds); 大中型企业与公共组织云平台 AreaContentSetUtil.resetExCellByAreaContent(contentSet,anaRepModel); 其中pkArea为界面中扩展区的pk,smartId为引入语义模型的id,detailFlds为明细字段内容,grpFlds分组字段内容,countFlds统计字段内容。 设置前格式: 图7-1-3 设置前格式 设置后格式: 图7-1-3 设置后格式 2. 级次汇总格式设置方法 级次汇总的设置方法跟分组统计的方法是一样的,只是参数稍有变化。级次汇总的第一个参数是public class SumByLevelAreaSet extends AreaContentSet,它继承了AreaContentSet,增加了一个m_sumDef属性;在级次汇总方法中,其他的参数设置一样,不需设置分组字段信息,而是设置m_sumDef级次分组字段。 大中型企业与公共组织云平台 与级次汇总相关的几个类型 SumByLevelAreaSet:继承自AreaContentSet封装字段信息。 SumByField:级次汇总分组字段信息,内部封装了字段信息,级次编码规则,汇总起始级次,汇总终止级次。这些信息是级次分组的必要信息。 SumByLevelCode:主要封装了SumByField信息。 注意,级次分组字段信息一定要使用SumByField类型。 原始格式 图7-1-4 原始格式 级次汇总样式图: 图7-1-5 级次汇总样式图 大中型企业与公共组织云平台 3. 将扩展区域的语义模型参数增加为报表参数 /** * * 将扩展区域的语义模型参数增加为报表参数,并设置该扩展区域参数的值取新报表参数的值. * * @param areaname 扩展区域名称 * @param anaModel 报表模型 * @param doSetParamValue 是否设置该扩展区域参数的值取新报表参数的值 * @return */ public static boolean addReportParameter(AbsAnaReportModel anaModel, boolean doSetParamValue) ; 功能如同注释中描述的,将语义模型参数增加为报表参数。注释描述很详细。 4. 增加报表参数 /** * * 将扩展区域的语义模型参数增加为报表参数,并设置该扩展区域参数的值取新报表参数的值. 注:本方法未进行扩展区域setChangedParams处理。 * 大中型企业与公共组织云平台 * 修改历史: created by tanghw at 2011-4-14 * * @param areaname * 扩展区域名称 * @param param * 扩展区域参数 * @param anaModel * 报表模型 * @param doSetParamValue * 是否设置该扩展区域参数的值取新报表参数的值 * @return */ public static boolean addReportParameter(String areaname, Parameter param, AbsAnaReportModel anaModel, boolean doSetParamValue) 详见注释。 5. 交叉区域设置 /** * 根据交叉区内容设置重新设置交叉区 * * @create by wanyonga at 2010-8-2,上午08:51:49 * 大中型企业与公共组织云平台 * @param crossAreaContentSet * @param anaModel * @return */ public static boolean resetCrossAreaByCrossAreaContent(CrossAreaContentSetcrossAreaContentSet,AbsAnaReportModel anaModel) 将当前区域设置成交叉表格式。 参数CrossAreaContentSet: 与分组管理的参数类似,主要属性如下,说明见注释。 /** * 要重新设置区域内容的扩展区PK */ private String areaPk; /** * 要应用的语义模型定义ID */ private String smartModelDefID; /** * 交叉指标方向 */ private int measureDirection = ROW_DIRECTION; /** 大中型企业与公共组织云平台 * 列维度字段 */ private AreaFieldSet[] columnFldNames; /** * 行维度字段 */ private AreaFieldSet[] rowFldNames; /** * 交叉指标设置 */ private AreaFieldSet[] measureSet; 原格式图: 图7-1-6 原格式图 设置后格式: 大中型企业与公共组织云平台 图7-1-7 设置后格式 6. 清除区域信息 public static void clearArea(CellsModel fmtModel, IArea area) 清除area区域内的信息,包括文字,语义模型字段等。 7. 删除字段 /** * 根据区域内容设置某些字段进行删除 * * @create by wanyonga at 2010-7-27,上午09:54:39 * @param areaContentSet * @param anaModel * @return */ public static boolean resetExCellByHideFields(AreaContentSet areaContentSet, boolean hideCalcFields, AbsAnaReportModel anaModel) 第一个参数与分组管理的相同,但是对于删除字段方法,AreaContentSet中只有detailFldNames是有效的,detailFldNames的字段将被删除。 大中型企业与公共组织云平台 参数hideCalcFields目前没有用到。 参数anaModel是报表模型。 注:该方法每次调用都是基于原格式的,对于第一次调用会缓存一份原始格式信息,之后的每次调用都是基于原始格式的。 8. 不使用缓存的交叉区域删除字段方法 /** * 根据交叉区域内容设置某些字段进行删除(不用缓存原始格式的) * * @create by wanyonga at 2010-7-27,上午09:54:39 * @param areaContentSet * @param anaModel * @return */ public static boolean resetCrossCellByHideFieldsNoCache(AreaContentSet areaContentSet, boolean hideCalcFields, AbsAnaReportModel anaModel) 与删除字段方法一样。只是不用缓存。每次调用都使实际格式改变。 9. 使用缓存的交叉区域删除字段(删除关联字段) /** * 按字段删除交叉区(使用缓存原始格式) * @param areaContentSet 大中型企业与公共组织云平台 * @param hideCalcFields * @param anaModel * @return */ public static boolean resetCrossAreaByHideRelatedFields(AreaContentSet areaContentSet, boolean hideCalcFields,AbsAnaReportModel anaModel) 参数与删除字段一样。使用缓存。 关联字段:在格式设计时的语义模型树上,可以拖动出字段下级的字段信息。例如下图中,询报价单查询报表的语义模型上,主单位可以展开,展开的下级中字段,称之为关联字段。类似这样的字段拖到界面上时,它的表达式是形如this.pk.name的形式。 由于界面上可能拖动了很多类似的字段,例如主单位下面的计量单位主键,计量单位名称等,都被拖到了界面上,要列举的字段可能很多。针对这种情况,提供了一种较为快捷的删除方式,删除关联字段。删除关联字段的意思是,对于类似计量单位主键,计量单位名称等这些都是从主单位中关联出来的字段,只需要在删除字段中cunitid(主单位)即可,方法将会把从主单位关联出来的字段全部删除,例如计量单位主键,计量单位名称都将被删除。 大中型企业与公共组织云平台 图7-1-8 删除字段说明 10. 交叉区删除字段(使用缓存,不删除关联字段) /** * 按字段删除交叉区(使用缓存原始格式) * @param areaContentSet * @param hideCalcFields * @param anaModel * @return 大中型企业与公共组织云平台 */ public static boolean resetCrossAreaByHideFields(AreaContentSet areaContentSet, boolean hideCalcFields, AbsAnaReportModel anaModel) 参数与删除字段一样。使用缓存。 11. 按单元位置删除交叉区 /** * 按位置删除交叉区 * @param areaContentSet * @param hideCalcFields * @param anaModel * @return */ public static boolean resetCrossAreaByHidePosition(HideCrossAreaSet areaContentSet, boolean hideCalcFields,AbsAnaReportModel anaModel) 参数HideCrossAreaSet: 该参数中delCells为指定的单位位置,方法会根据该位置所在的区域,删除行或列。 在交叉区中,如果删除单元在列维度中,则删除单元所在行;如果删除单元在行维度中,则删除单元所在列。 12. 删除关联字段 /** * 根据区域内容设置某些字段进行删除(列表型扩展区,关联字段删除) 大中型企业与公共组织云平台 * * @create by wanyonga at 2010-7-27,上午09:54:39 * @param areaContentSet * @param anaModel * @return */ public static boolean resetExCellByHideRelatedFields(AreaContentSet areaContentSet, boolean hideCalcFields, AbsAnaReportModel anaModel) 删除关联字段。 关联字段:在格式设计时的语义模型树上,可以拖动出字段下级的字段信息。例如下图中,询报价单查询报表的语义模型上,主单位可以展开,展开的下级中字段,称之为关联字段。类似这样的字段拖到界面上时,它的表达式是形如this.pk.name的形式。 由于界面上可能拖动了很多类似的字段,例如主单位下面的计量单位主键,计量单位名称等,都被拖到了界面上,要列举的字段可能很多。针对这种情况,提供了一种较为快捷的删除方式,删除关联字段。删除关联字段的意思是,对于类似计量单位主键,计量单位名称等这些都是从主单位中关联出来的字段,只需要在删除字段中cunitid(主单位)即可,方法将会把从主单位关联出来的字段全部删除,例如计量单位主键,计量单位名称都将被删除。 大中型企业与公共组织云平台 图7-1-9 删除关联字段举例 13. 根据区域内容设置某些字段进行隐藏 /** * 根据区域内容设置某些字段进行隐藏 * * @param areaContentSet * @param anaModel * @return 大中型企业与公共组织云平台 */ public static boolean resetExCellByHideFields(AreaContentSet areaContentSet, boolean hideCalcFields,AbsAnaReportModel anaModel) ; 14. 设置单元格信息 /** * 直接设置表格中指定单元位置的内容 * * @param cellInfos * @param anaModel * @return */ public static boolean resetCellInfo(ExCellInfoSet cellInfos, AbsAnaReportModel anaModel) ; 直接向单元格设置信息。 参数ExCellInfoSet是单元格信息的一个封装,里面封装了包括值,样式,应用字段等信息。ExCellInfoSet的主要属性是一个嵌套的Map(详细结构查看该类),按单元位置对应信息的结构存储,信息的内容是一个内层的Map,存储着值key对应值,格式key对应格式,等信息。关于map中key的常量见ExtendAreaConstants类。 15. 设置页维度信息 /** * * 直接设置页维度项目 * 大中型企业与公共组织云平台 * @param cellInfos * @param anaModel * @return */ public static boolean resetReportCondition(String smartID, ReportConditionItem[] condItems, boolean clear,AbsAnaReportModel anaModel) 向报表设置页维度信息。 参数smartID:语义模型主键。 参数condItems:页维度字段信息。ReportConditionItem类是对页维度信息的封装,里面包括如下属性 private String m_fieldCode = null;字段编码,一般对应语义模型表达式 private String m_disField = null;显示字段,在界面上显示的页维度 private String m_smartID = null;语义模型id private boolean m_showAll = true;是否显示全部 参数clear:是否清除原有页维度 参数anaModel:报表模型 16. 设置冻结点 /** * 设置冻结点 * * @param anaModel 大中型企业与公共组织云平台 * @param pos * @return */ public static boolean setFreezePosition(AbsAnaReportModel anaModel, CellPosition pos) 向报表中设置冻结点。参数Pos为冻结点位置。 17. 设置固定成员 /** * * 设置指定字段的固定成员 * * @param fieldName * @param fixValues * @return */ public static boolean setFixValues(String areaPK, String fieldName, FixValueInfo[] fixValues,AbsAnaReportModel anaModel) ; 参数areaPK:扩展区pk 参数fieldName:语义模型字段表达式 参数fixValues:固定成员值信息。结构简单,值和格式信息两个属性。 参数anaModel:报表模型 18. 明细汇总切换 /** 大中型企业与公共组织云平台 * 根据区域内容设置某些字段进行删除 * * @create by wanyonga at 2010-7-27,上午09:54:39 * @param areaContentSet * @param anaModel * @return */ public static boolean changeDetailToCount(String areaPK, boolean showDetail, AbsAnaReportModel anaModel) 当showDetail为true时,将报表格式调整为显示完整信息(明细和汇总)。 当showDetail为false时,将报表格式调整为只显示汇总信息。 明细: 图7-1-9 明细 汇总: 大中型企业与公共组织云平台 图7-1-10 汇总 19. 清除缓存信息 /** *

清除上次查询缓存

* @param exAreaPk * @param reportmodel */ public static void clearExCellFromCache(String exAreaPk, AbsAnaReportModel reportmodel) 按扩展区清除删除,分组方法中设置的缓存。 参数exAreaPk:扩展区主键 20. 设置初始格式 public static boolean showOriginalFields(String areaPK, AbsAnaReportModel anaModel) 将缓存中的格式重新设置到界面上。相当于恢复初始格式。 21. 设置合并单元 public static boolean setCombinedArea(AreaPosition area, IFormat format, Object value, AbsAnaReportModel anaModel) 将区域area设置成合并单元。 大中型企业与公共组织云平台 参数area:合并区域 参数format:合并区域格式 参数value:合并区域值 参数anaModel:报表模型 22. 清除所有缓存信息 /** *

清除上次查询缓存

* @param exAreaPk * @param reportmodel */ public static void clearTempCacheBeforeSave(String exAreaPk, AbsAnaReportModel reportmodel) 清除所有缓存的信息。包括分组,删除,交叉等工具方法中的缓存。 23. 设置数据依赖 /** * 设置数据依赖 TODO add by yuyangi DataRelation DataRelationAction */ public static boolean setDataRelation(AreaDataRelation dataRelation, AbsAnaReportModel anaModel) 向格式中设置数据依赖。 参数dataRelation:数据依赖的封装类。其中属性DataRelaItem为数据依赖详细信息,封装了如下信息: 大中型企业与公共组织云平台 String m_mainArea = null;//依赖的主区域 CellPosition pos = null;// 依赖的主区域的格式位置(表格的绝对位置) String m_mainFld = null;// 依赖的主区域中的字段 24. 执行语义模型查询数据 /** * 直接调用语义模型执行,返回结果 * * @create by ll at 2011-5-9,上午10:26:55 * * @param anaModel * @param queryDatas * @return * @throws SmartException */ public static DataSet[] providerDataSet(AbsAnaReportModel anaModel, FreeQueryParam[] queryDatas)throws SmartException 参数queryDatas为语义模型执行的参数封装,详见类内部的注释。 25. 获取扩展区引用的语义模型 /** * 获取报表扩展区中引用的语义模型 * * @create by ll at 2011-5-9,下午03:58:13 大中型企业与公共组织云平台 * * @param areaPK * @param anaModel * @return */ public static SmartModel getSmartModelfromArea(String areaPK, AbsAnaReportModel anaModel) 根据扩展区pk获取该扩展区引用的语义模型。如果没有引用则为null。 26. 删除行 /** * 删除行 * @param row 行号 * @param anaModel */ public static void delRow(int row, AbsAnaReportModel anaModel) 删除第row行。 27. 获取当前报表设置的冻结点 /** * 获取冻结点 * @param anaModel * @return */ 大中型企业与公共组织云平台 public static CellPosition getFreezePos(AbsAnaReportModel anaModel) 28. 按区域位置设置公式 /** * 向area增加公式 * @param formula 公式信息 * @param anaModel 报表模型 * @param area 增加公式的区域 */ public static void addFormula2Cells(String formula, AbsAnaReportModel anaModel, IArea area) 向区域中设置公式。 参数formula:公式字符串 29. 按字段名称设置公式 /** * 按字段名称,向单元格式上设置公式。 * @param formula * @param anaModel * @param exCell * @param fldname */ public static void addFormulaByFldname(String formula, AbsAnaReportModel anaModel, ExtendAreaCell exCell, String fldname) 按界面上的字段表达式设置公式。 大中型企业与公共组织云平台 参数formula:公式字符串 参数exCell:扩展区 参数fldname:字段表达式 30. 删除隐藏字段 /** * 删除隐藏字段 * @param anaModel * @param exAreaPk * @param flds */ public static void removeAreaHideFields(AbsAnaReportModel anaModel, String exAreaPk, Field[] flds) 在格式设计界面可以设置隐藏字段(这些字段被查询出来,但是不显示在界面上),该方法提供了对这种隐藏字段的删除机制。 31. 分页打印设置 /** * 如果在addGroupFlds里面,则将字段类型设置成为分组字段; * 如果在removeGroupFlds里面,并且现在是分组字段,那就取消分组变成明细字段; * 如果在pageBreaks里面,则为此字段增加分页符:AnaRepField.getDimInfo().setPageBreak(new FreePageBreak()); * fromOriginalFormat表示是从原始格式开始调整还是从当前格式直接调整,因为担心业务部门有可能会先做其他调整,再设置分组和强制分页符。 大中型企业与公共组织云平台 * @param anaModel * @param areaPK * @param addGroupFlds * @param removeGroupFlds * @param pageBreaks * @param fromOriginalFormat * @return */ public static boolean setGroupPageBreakers(AbsAnaReportModel anaModel,String areaPK, Field[] addGroupFlds, Field[] removeGroupFlds, Field[] pageBreaks, boolean fromOriginalFormat) 该方法是在打印前设置打印的分组和分页信息的。详见注释。 32. 恢复原始格式 /** *

将格式恢复到原始格式

* @param reportModel * @param exAreaPk * @return */ public static boolean resetExArea(AbsAnaReportModel reportModel, String exAreaPk) 将格式恢复成原始格式。 大中型企业与公共组织云平台 8. 报表图表 8.1. 图表类型 8.1.1. 图表分类 图表类型 子图表类型 柱状图 簇状柱状图 堆积柱状图 圆柱图 三维簇状柱状图 三维堆积柱状图 三维圆柱图 瀑布柱状图 饼图 饼图 三维饼图 折线图 折线图 面积图 面积图 堆栈面积图 三维面积图 三维堆积面积图 金字塔图 金字塔图 三维金字塔图 表8-1-1 图表类型 大中型企业与公共组织云平台 8.1.2. 图表详细说明 8.1.2.1. 柱状图 柱状图是用一系列高度不等的纵向条纹表示数据分布情况,其柱状条纹的高度表示数据的大小。能够系列的展现一个数据指标在不同类别上的数据大小的变换。柱状图分为以下小类别:二维柱状图、二维堆积柱状图,三维柱状图,三维堆积图,瀑布图。柱状图如图(图8-1-1,图8-1-2)示例: 图8-1-1 二维柱状图 图8-1-2 二维堆积图 8.1.2.2. 饼图 饼图是用扇形区域大小来直观的显示每一数值相对于总数值的大小以及所占百分比,能够很直观的体现一个数据指标占整体数据的比重。饼图又细分为平面饼图和三维饼图,下图为一个三维饼图(图8-1-3): 大中型企业与公共组织云平台 图8-1-3 三维饼图 8.1.2.3. 折线图 折线图常用数据随从另一个数据连续变化的情况,使用折线将数据三点串联起来,形成折线图形,凸显数据变化情况以及趋势,包括折线图和曲线图,下图为示例(图8-1-4,图8-1-5): 图8-1-4 折线图 大中型企业与公共组织云平台 图8-1-5 曲线图 8.1.2.4. 面积图 面积图是利用各系列的折线与坐标轴间围成的图形来表示各系列数据随从另一数据连续变化而变化的情况以及趋势,与折线图有所相似,但其又能体现图部分与整体之间的关系。面积图分为面积图、堆积面积图、三维面积图和三维堆积面积图,下图为一个面积图(图8-1-6,图8-1-7): 图8-1-6 面积图 图8-1-7 三维面积图 大中型企业与公共组织云平台 8.2. 图表属性 8.2.1. 标题 轻量图表可以设置标题和副标题,两者包含: n 标题名称 n 字体:字体大小、样式、加粗、倾斜 n 字体颜色 n 背景色 其设置界面如下(图8-2-1): 图8-2-1图表属性设置——标题属性 8.2.2. 分类轴 分类轴的属性提供分类轴名称显示: 其设置效果如下图(图8-2-2): 大中型企业与公共组织云平台 图8-2-2分类轴名称设置效果图 8.2.3. 值域轴 值域轴包含以下功能: n 最小值、最大值 n 百分号、千分位 其设置效果如下图(图8-2-3): 图8-2-3值域属性设置效果图 8.2.4. 图例 图例的属性提供是否显示图例的功能,设置效果如下图(图8-2-4): 大中型企业与公共组织云平台 图8-2-4不显示图例效果图 显示图例效果图: 图8-2-5 显示图例效果图 8.2.5. 标签 标签提供是否显示标签的功能,其设置效果如下图(图8-2-6): 大中型企业与公共组织云平台 图8-2-6标签设置效果图 8.2.6. 饼图属性 饼图的属性是针对饼状图表进行属性设置的,包括以下属性: 空心百分比:设置饼图上空心的百分比例。 显示分类:设置饼图上是否显示各部分的类型名称。 显示数值:设置饼图上是否显示各部分的实际数值。 显示标签线:设置是否为标签添加标签线使标签外延至图形区域外。 其设置效果如下图(图8-2-7): 大中型企业与公共组织云平台 图8-2-7饼图属性效果图 9. 产品轻量 9.1. 分析上下文 分析上下文包括上栏和左栏两部分,具体如图9-1-1、9-1-2所示。上栏包括报表标题、查询组件和导出excel的工具按钮。左栏包括选中查询条件的显示区、清空按钮、查询按钮和查询组件。 图9-1-1上栏 大中型企业与公共组织云平台 图9-1-2左栏 查询组件包括文本输入框、下拉框、树、参照组件和日历组件,其中树只能在左栏显示,其他组件上栏左栏均可以显示,文本输入框支持enter键或者焦点移开操作输入。以下为各个组件的显示效果: 文本输入框 图9-1-3 文本输入框 下拉组件 大中型企业与公共组织云平台 图9-1-4 下拉组件 树 图9-1-5树 参照组件 图9-1-6参照组件 大中型企业与公共组织云平台 图9-1-7参照组件 日历组件 图9-1-8日历组件 工具栏支持刷新和导出excel操作。 大中型企业与公共组织云平台 图9-1-9工具栏 9.2. 报表轻量展现 报表轻量展现区将设计好的自由报表展示出来。 能够显示各种设置效果:定义的字体、背景色、对齐方式、图片提示、报表链接、单元格合并效果等。 图9-2-1轻量展现 9.3. 交互操作 交互操作包括:选择查询条件、查询、清空、刷新、导出excel、报表穿透。 打开一张报表,选中查询条件,查询条件将显示在“当前选中”区,点击查询按钮,报表显示区将显示最新的查询结果。点击清空按钮可以清空条件显示区的所有选中条件。点击工具栏的刷新可以刷新报表显示区的内容,点击导出 大中型企业与公共组织云平台 excel可以将报表显示区的内容导出到excel中。 9.4. 报表链接 报表间支持穿透,点击一张报表能够穿透到定义的穿透报表中。 图9-4-1穿透 图中“地区分类编码”为定义的报表链接,(显示为蓝色,当鼠标移动到链接上有下划线出现)。点击能够穿透到另一张报表中。 图9-4-2穿透 大中型企业与公共组织云平台 图9-4-3穿透 9.5. 默认查询方案 在自由报表平台重量级端,可以对报表进行默认查询方案的设置,对于设置了默认查询方案的功能节点,在自由报表平台轻量端打开的时候,默认第一次打开加载默认查询方案。 n 设置默认查询方案 在自由报表重量级端,对设计的自由报表,设置完查询项之后,点击预览会弹出默认查询方案设置面板,在点击查询方案的页签,出现如下对话框: 大中型企业与公共组织云平台 图9-5-1设置默认查询方案 在查询条件页签上,设置默认的查询条件,例如设置地区为江苏 设置完查询条件后,将其保存为方案。右击保存的方案,选择设为默认查询方案选项,即设置完成。 报表就会在预览状态下显示加载默认查询方案后的显示效果。如下图: 图9-5-2执行默认查询方案后效果 大中型企业与公共组织云平台 n 加载默认查询方案 将设置了默认查询方案的报表进行发布,发布为portal节点,具体见发布部分。 在轻量端打开该报表,第一次默认加载查询方案,如下图: 图9-5-3轻量执行默认查询方案 9.6. 预警 自由报表可以对数据进行预警,即对某区间的数据设置标记。 9.6.1. 设置预警 打开自由报表,选择需要预警的区域,点击格式,选择条件格式,如下图: 大中型企业与公共组织云平台 图9-6-1 条件格式 打开条件格式后,弹出条件格式对话框,如下图: 图9-6-2 条件格式规则管理 可以新增,修改,删除规则。每个规则就是设置的预警。 点击新建规则,出现如下对话框 大中型企业与公共组织云平台 图9-6-3 新建规则 选择规则类型,然后设置对应规则下的格式即可。 最终显示效果为: 图9-6-4 自由报表设置后的显示效果 大中型企业与公共组织云平台 9.6.2. 轻量显示效果 图9-6-5 轻量预警显示效果 9.7. 发布 9.7.1. 发布为portal节点 对设计好的自由报表可以发布为portal节点,即以功能节点的形式打开。 n 在自由报表界面,点击发布—>发布为portal节点,弹出发布为portal节点的对话框,如下图: 图9-7-1 发布为portal节点 大中型企业与公共组织云平台 图9-7-2 发布为portal节点对话框 n 对发布为portal节点对话框,有四种方式: a) 新增portal节点 新增portal节点的,分为两步 Ø 发布为功能节点 发布为功能节点,首先选择发布的功能节点的目录,然后填写节点编码及名称和所属组织。 大中型企业与公共组织云平台 图9-7-3 新增portal节点—发布为功能节点 所属组织选择非全局的时候,点击下一步会对报表进行组织校验,未进行完整主组织校验的报表不能发布为portal节点,如下图提示: 图9-7-4 报表为设置主组织 Ø 发布为菜单 发布为菜单时,选择发布为菜单的路径,填写菜单项编码以及菜单项名称。 大中型企业与公共组织云平台 图9-7-5 新增portal节点-发布为菜单 Ø 分配职责 成功发布portal节点后,需要登录分析门户,以管理员身份登录,点击布局管理下的职责,如下图: 图9-7-6 功能节点职责分配 打开职责后,选择组织以及职责类型,找到想要分配的用户,点击功能分配按钮,如下图: 大中型企业与公共组织云平台 图9-7-7 选中用户,分配功能节点 然后找到要分配的功能节点进行分配,如下图: 图9-7-8 分配功能节点 Ø 以普通用户登录进去,找到发布的那个节点然后打开,,如下图: 大中型企业与公共组织云平台 图9-7-9 打开发布的报表 最终效果如下图: 图9-7-10 轻量显示效果 b) 覆盖portal节点 如果对已经发布的功能节点,想要以另外一张报表覆盖掉,则选择覆盖,这时只要选中你想要覆盖的功能节点即可,如下图: 大中型企业与公共组织云平台 图9-7-11 覆盖portal节点 c) 追加portal节点 对于自由报表轻量,一个功能节点可以展现多张报表,展现形式为页签的形式。想要展现多张报表,就需要对功能节点进行报表的追加发布。 Ø 追加发布portal节点只要选择追加选项后,在功能树上选择要追加的节点,点完成即可。如下图: 大中型企业与公共组织云平台 图9-7-12 追加发布portal节点 Ø 在追加完成后,打开功能节点,即可看到多张报表,如下图: 图9-7-13 追加的轻量显示效果 Ø 对多张报表的功能节点,可以进行报表的顺序管理。 I. 打开报表顺序管理,并切换到portal节点树,如下图: 大中型企业与公共组织云平台 图9-7-14 报表顺序管理 图9-7-15 报表顺序管理界面 II. 选中想要调整顺序的功能节点,在这里可以设置默认报表顺序方案,也可以新建方案 设置默认方案: 选中需要调整顺序的功能几点,双击打开默认方案,对下方的报表列表进行顺序的上下移动以及是否显示的勾选。如下图: 大中型企业与公共组织云平台 图9-7-16 对某功能节点进行报表顺序设置 最终显示效果为: 图9-7-17 轻量显示效果 大中型企业与公共组织云平台 新建方案:选择新建,输入方案名称以及针对的用户如下图: 图9-7-18 新建顺序方案 然后和设置默认查询方案一样设置报表的顺序和是否显示的勾选。 d) 删除portal节点 对于自由报表的删除portal节点,在选中一个功能节点后,将该功能节点删除,具体删除如下图: 大中型企业与公共组织云平台 图9-7-19 删除portal节点 9.7.2. 发布为portlet 对于设计好的自由报表,可以发布为portlet,具体为选中自由报表,然后点击发布下的发布为portlet,如下图: 图9-7-20发布为portlet 大中型企业与公共组织云平台 图9-7-21发布为portlet面板 发布为portlet分为三种方式,分别是新增,覆盖以及删除 n 新增portlet a) 对于新增portlet,首先选择发布portlet的组织,选择组织后会进行校验,如果该组织下,该报表已经发布过,则只能选择覆盖和删除。如下图: 图9-7-22新增portlet面板 b) 对所选组织下没有发布过portlet,可以填写标题,高度,宽度,版本以及模板。 高度:默认-1。0代表适应页面大小,撑满页面。-1表示适应内容高度,其他值则是具体的像素值 宽度:默认100%,具体看设定的百分比,可调整 模板:选择预置的模板。预置模板通过display.xml和portlet.xml进行配置 c) 发布成功后,以管理员身份登录,点击系统管理下的布局管理。 大中型企业与公共组织云平台 图9-7-23布局管理 Ø 选择组织,然后新建一个页面,然后对该页面进行设计,打开设计面板 图9-7-24新增布局 Ø 进行布局设计,然后将选中的portlet拖入到布局管理器中。 大中型企业与公共组织云平台 图9-7-25设计布局 Ø 设计结束后,设置属性,选择启用 图9-7-26启用布局 Ø 以普通是否登录分析门户,点击创建的页面,则看到最终效果 大中型企业与公共组织云平台 图9-7-27最终效果 n 覆盖portlet 覆盖portlet可以对portlet的标题,高度,宽度以及版本进行修改。如下图: 图9-7-28覆盖portlet 同样,在选择组织的时候,会进行校验,只有所选组织下的发布过portlet的才可以覆盖 n 删除portlet 可以删除portlet。具体如下图: 大中型企业与公共组织云平台 图9-7-29删除portlet S同样,在选择组织的时候,会进行校验,只有所选组织下的发布过portlet的才可以删除 10. 商业分析门户 分析门户提供了一个报表管理界面作为上页分析门户,在该页面上,以登录用户的权限进行过滤,可以看到发布过的透视表,自由报表以及订阅的报表,即我的报表库。具体页面如下: 图10-1报表管理页面 在左侧面板,有透视表,自由报表以及我的报表库,选中想要打开的报表,点击打开即可。具体如图: n 自由报表: 大中型企业与公共组织云平台 选中自由报表选项,然后选中需要打开的功能节点,点击打开 图10-2 自由报表打开操作 打开后效果图为: 图10-3 自由报表打开效果图 n 透视表: 选中透视表选项,然后选中需要打开的功能节点,点击打开 大中型企业与公共组织云平台 图10-4 透视表打开操作 打开效果如下图: 图10-5 打开透视表效果图 n 我的报表库 选中的报表库选项,然后选中需要打开的报表,点击打开 图10-6 打开我的报表库操作 打开效果如下图: 大中型企业与公共组织云平台 图 10-7 我的报表库打开效果 11. 辅助开发工具 11.1. 安装盘脚本 11.1.1. 构造平台中支持自由报表(以及语义模型) 业务组件中需按照以下规范要求配置: 1. 各组件下的item.xml文件中增加如下导出项(内容不需要修改)   0099 自由报表 iufo_freerep_dir 大中型企业与公共组织云平台 1=1 2. 和item.xml在同一目录下需增加FR.properties文件,内容如下:  ################################################## #               自由报表对象导出配置文件                                                  # ################################################## #导出目录是否为格式对象目录[值为'Y'或'N'] bFmd=Y #格式目录对象ID fid=1001ZE1000000000109L #导出目录是否为查询对象目录[值为'Y'或'N'] bQmd=Y #查询目录对象ID qid=1001ZE10000000000ZHU #数据源名称[配置员导出时设置] datasourcename= #导出目录全路径[配置员导出时设置] exportdir= 其中:fid和qid的值需要替换成基准库中自由报表格式目录id和查询目录id 大中型企业与公共组织云平台 11.1.2. 发布的报表节点导出 发布的报表节点其功能和菜单随业务产品导出,不需要单独配置。但是报表节点对应报表需要进行配置: 1. 更改item.xml配置文件:     029   报表发布节点   iufo_reppublish            parentid in (select cfunid from sm_funcregister where funcode like '1413%' or funcode like '1414%' or funcode like '8020%' or funcode like '8024%' or funcode like '8030%' or funcode like 'E052%')   其中标红色的部分,是安装盘要导出的功能注册表的where条件,请替换成各个产品自己的具体条件sql。 2. 在res项目中的 ufob 的module.map文件中加入脚本的导出目录: iufo_reppublish = iufo_reppublish 11.2. 安装程序 产品安装过程和升级过程中,报表平台会处理业务组件中预置报表和语义模型的脚本数据,业务组件不需要做任何事情。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档