您已经熟悉使用 Cognos 来创建报表,进行自助式设计分析,然而这些需要的创建的应用都依赖于对应的元数据模型,用户使用元数据模型对他们的数据源进行分析和报告。元数据模型是整 个 Cognos 应用的基础,它是一个或多个数据源中信息的业务演示。基于这个基础,您才能够创建报表,进行自助式设计分析。
Cognos 能支持多种数据源,包括关系型的和多维的数据库。元数据模型能隐藏底层数据源的复杂结构,可以更好地控制数据怎样展现给最终用户。元数据的组织和扩展就需要用到 Cognos 的元数据模型设计工具 Framework Manger。
Cognos 的元数据模型设计工具 Framework Manger 可以连接企业的各种数据源(包括关系型数据库,多维数据库,文本,OLAP 等),对数据结构进行描述,为 Cognos 的多维分析,即席查询,报表等各种应用提供统一一致的数据视图,降低对企业数据访问的复杂性,同时提供对各种应用使用的结构的统一的管理。
Cognos BI 10 的最新版本中在 Framework Manager 中增加了模型设计加速器,可以帮助开发人员更迅速、更轻松的创建新模型,并且模型优化时系统将充分利用知识库的经验。它的主要功能是:
- 帮助开发人员通过一个向导式的自动化工具,用快速简便的方法创造新的建模框架。
- 从一个包含了知识库经验的模型开始建模,并添加更复杂的模型需求。
- 通过知识库的经验指导建模和帮助纠正和验证的常见错误。
第一个元数据模型
- 在开始菜单中启动 IBM Cognos Framework Manager,选择 Create a new project using Model Design Accelerator。模型设计加速器适合于基于关系型数据库星形模型的元数据建模。星形模型是一种多维的数据关系,它由一个事实表(Fact Table)和一组维表(Dimension Table)组成。
- 在“New Project”中输入名称“第一个元数据模型”和目录位置,如图 1 所示。当在 Framework Manager 中工作时,实际上是在一个 Project 中进行操作的。Project 以一个文件夹的形式出现在文件系统中,它包含一个 Project 文件(.cpf) 和 XML 文件。
图 1. 项目 - 在登录窗口输入用户名和密码,在本教程中是 administrator 和 cognos,然后点击确定。语言选择“英文”,数据源选择“great_outdoors_warehouse”。
- 在对象选择中,展开 GOSALESDW 的 Tables,选择以下表后点击 Continue。
- GO_TIME_DIM
- SLS_ORDER_METHOD_DIM
- SLS_PRODUCT_DIM
- SLS_PRODUCT_LOOKUP
- SLS_PRODUCT_TYPE_LOOKUP
- SLS_PRODUCT_LINE_LOOKUP
- SLS_SALES_FACT
- 在 IBM Cognos Framework Manager User Guide 窗口中介绍了使用 Model Design Accelerator 的步骤,您阅读后点击 Close。
- 在 Model Accelerator 面板,右键选择 Fact Query Subject,选择 Rename,输入 Sales Fact。
- 在 Explorer tree 面板,展开 SLS_SALES_FACT,选择以下字段拖拽到 Sales Fact 对象。
- QUANTITY
- UNIT_COST
- UNIT_PRICE
- UNIT_SALE_PRICE
- GROSS_MARGIN
- SALE_TOTAL
- GROSS_PROFIT
- 重命名 New Query Subject 1 为 Products。
- 在 Explorer tree 面板:
- 展开 SLS_PRODUCT_LINE_LOOKUP 拖拽 PRODUCT_LINE_EN 到 Products 对象。
- 展开 SLS_PRODUCT_TYPE_LOOKUP 拖拽 PRODUCT_TYPE_EN 到 Products 对象。
- 展开 SLS_PRODUCT_LOOKUP 拖拽 PRODUCT_ NAME 到 Products 对象。
- 对话框 Relationship Editing Mode for: Products 会弹出来,原因是 Framework Manager 无法检测出 SLS_PRODUCT_LOOKUP 和 SLS_SALES_FACT 的关系,因此需要手动指定。按住 Ctrl 选择 SLS_PRODUCT_LOOKUP 的 PRODUCT_NUMBER 和 SLS_PRODUCT_DIM 的 PRODUCT_NUMBER,点击左上角的 Create a Model Relationship 按钮。在 Modify the Relationship 对话框中点击 OK,然后点击 OK 关闭 Relationship Editing Mode for: Products 对话框,如图 2 所示。
图 2. 关系
- 在 Explorer tree 面板展开 SLS_PRODUCT_DIM,选择以下字段拖拽到 Products 对象。
- PRODUCT_KEY
- PRODUCT_LINE_CODE
- PRODUCT_TYPE_KEY
- PRODUTCT_TYPE_CODE
- PRODUCT_NUMBER
- PRODUCT_IMAGE
- INTRODUCTION_DATE
- DISCONTINUED_DATE
- 重命名 New Query Subject 2 为 Time。
- 在 Explorer tree 面板,展开 GO_TIME_DIM,选择 DAY_KEY 再按住 Shift 键选择 WEEKDAY_EN,把包含这两个字段的中间所有字段拖拽到 Time 对象。
- 重命名 New Query Subject 3 为 Order Methods。
- 在 Explorer tree 面板,展开 SLS_ORDER_METHOD_DIM,选择以下字段拖拽到 Order Methods 对象。
- ORDER_METHOD_KEY
- ORDER_METHOD_CODE
- ORDER_METHOD_EN
- 最后在 Model Accelerator 面板的模型如图 3 所示。点击 Generate Model 按钮,提示框选择 Yes,模型设计加速器会根据您的选择来生成模型。当生成结束后,IBM Cognos Framework Manager 的界面就会展示在您的面前。
图 3. Model Accelerator
- 点击工具栏上的保存按钮,您的第一个元数据模型就创建成功了。
- Physical View 是包含支持星型模型的表。
- Business View 是包含需要的查询字段。
- Presentation View 是包含在 Business View 的快捷方式。
图 4. 模型的层次
导入额外元数据模型
前面您用 Model Design Accelerator 构建了您的第一个元数据模型。接下来您可以用 Metadata Wizard 来手工添加其他元数据,包括导入元数据,创建关系,更新 Business View 和 Presentation View。
- 在 IBM Cognos Framework Manager 的 Project Viewer,右键选择 Physical View 下面的 gosalesdw 命名空间,选择 Run Metadata Wizard。
- 选择 Data Sources 后 Next。
- 选择“great_outdoors_warehouse” 数据源后 Next。
- 在对象选择中,展开 GOSALESDW 的 Tables,选择 SLS_SALES_TARG_FACT 后 Next。
- 选择 Between each imported query subject and all existing query subjects in the model,如图 5 所示。点击 Import 然后点击 Finish。
图 5. 导入元数据
- 双击 gosalesdw 命名空间,然后选择 Diagram 标签页来查看关系的图形,如图 6 所示。您可以看到刚导入的 SLS_SALES_TARG_FACT 没有对象连接,需要您手工创建。
图 6. Diagram 关系图
- 在 Project Viewer 窗格,选择 GO_TIME_DIM 下的 MONTH_KEY ,再选择 SLS_SALES_TARG_FACT 下的 MONTH_KEY,右键选择 Create,再点击 Relationship。关系定义对话框如图 7 所示,点击确定。
图 7. 关系定义
- 重复第 25 步,创建 SLS_PRODUCT_DIM 和 SLS_SALES_TARG_FACT 在 PRODUCT_TYPE_KEY 字段的关系。
- 在 Project Viewer 窗格,右键选择 Business View 命名空间,点击创建,选择 Query Subject,输入 Sales Target Fact 后点击 OK。
- 在 Query Subject Definition 窗口,在 Available Model Objects 下展开 Physical View,在 gosalesdw 下选择 SLS_SALES_TARG_FACT,把 SALES_TARGET 拖动到 Query Items and Calculations 面板下,如图 8 所示。
图 8. 查询对象定义
- 在 Business View 命名空间下点击刚才创建的 Sales Target Fact 查询对象,按住 Ctrl 再选择 Products 和 Time,也就是刚才定义过关系的维度,右键选择 Create Star Schema Grouping。在 Create Star Schema Grouping 对话框输入 Sales Target 后点击 OK,如图 9 所示。
图 9. 创建基于以事实为中心和其关联维度的模型
- 把刚才创建的 Sales Target 命名空间拖动到 Presentation View 下。
- 右键选择 Presentation View 命名空间,点击 Create,然后选择 Namespace,把名字定义为 Sales。接着把 Sales Fact、Products、Time 和 Order Methods 的快捷方式拖动到 Sales 命名空间,如图 10 所示。
图 10. Presentation View 命名空间
设定 Determinants
Determinants 是 IBM Cognos BI 的特性,通常来用来控制聚合的粒度。当维度数据和事实数据基于有重复值的粒度层次关联时候就需要 Determinant。
Determinants 反映了代表查询对象的子集或集合,是用来保证准确的数据聚合。Determinants 可以定义唯一标识一个数据集的数据库列集合,或者可以指定一个能够标识数据中的非唯一集的列集合。
在您的元数据模型中,日期是时间的惟一性 determinants。而非惟一 determinants 的例子是月份,在同月的时间中月份是重复的,在指定月份的非惟一 determinants 时候就要指明是 Group By。这样就暗示 IBM Cognos 在处理到非惟一 determinants 的属性时候有重复数据,需要采用聚合函数来避免重复计数。
- 在 Project Viewer 的 Physical View 命名空间下,双击 GO_TIME_DIM 查询对象,然后点击 Determinants 标签页。您可以看到只有根据主键的一个 determinant,下面您可以添加 Year、Quarter、Month 作为 Determinants。
- 右键选择 pk,点击 Rename,输入 Day 然后回车。
- 在 Determinants 窗格,点击 Add,右键选择 New Determinant,点击 Rename,输入 Year 然后回车。
- 选中 Year,把 CURRENT_YEAR 拖拽到 Key 窗格。
- 选择 Year 旁边的 Group By 的复选框。
- 按照第 35 到 37 的步骤,添加 Quarter 作为 determinant,QUARTER_KEY 拖拽到 Key 窗格,选择 Group By 的复选框。
- 选中 Quarter, 把 CURRENT_QUARTER 拖拽到 Attributes 窗格。Attributes 是与 determinant key 相关的数据项。如果 Attributes 使用在报表中,则 Key 就会用在基于聚合函数的 SQL 中。
- 按照第 35 到 37 的步骤,添加 Month 作为 determinant,MONTH_KEY 拖拽到 Key 窗格,选择 Group By 的复选框。
- 选中 Month, 把下列字段拖拽到 Attributes 窗格。
- CURRENT_MONTH
- MONTH_NUMBER
- MONTH_EN
- 通过上下箭头,调整顺序依次为 Year、Quarter、Month 、Day。最后点击 OK,如图 11 所示。
图 11. Determinants
图 12. SLS_PRODUCT_DIM
增加业务逻辑
通常会把业务逻辑放在 Business View 这个层次的,比如过滤和计算。有些时候为了考虑性能和维护成本,也会放到 Physical View 这个层次。
在您的模型中,SLS_PRODUCT_LOOKUP 是支持多语言的,为了正确返回 Product Name,需要添加过滤条件。从性能角度考虑,这个过滤放在 Physical View 这个层次可以避免返回额外的数据记录。
过滤
过滤被用来限制查询主题所检索的记录。Framework Manager 有两种过滤:
- 内嵌式 Embedded :面向单个查询主题。
- 独立式 Stand-alone :可重复使用。
接下来您将采用内嵌式过滤来让 SLS_PRODUCT_LOOKUP 返回英文的产品名称。
- 在 Project Viewer 窗格,Physical View 下的 gosalesdw 命名空间,双击 SLS_PRODUCT_LOOKUP,选择 Filters 标签页,点击 Add。在 Name 编辑框输入 Language Filter。
- 在 Available Components 面板里,双击 PRODUCT_LANGUAGE。在 Expression Definition 面板输入 = ‘ EN ’。
Framework Manager 中的对象有一个标识符,可以拥有相同的名字,但是必须使用一个名字空间进行唯一标识。查询项有一个三部分的标识符 [namespace].[query subject].[query item]。
- 最后计算公式为:[GOSALESDW].[SLS_PRODUCT_LOOKUP].[PRODUCT_LANGUAGE] = 'EN',如图 13 所示。然后点击 OK。
图 13. 内嵌式过滤
- 选择 Test 标签页,点击 Test Sample,查看结果后再点击 OK。
计算
您可以创建计算来给报表作者提供他们经常使用的值。计算可以使用查询项、参数、函数。有两种类型的计算:
- 内嵌式 Embedded :面向单个查询主题。
- 独立式 Stand-alone :可重复使用。
接下来您将采用内嵌式计算来生成盈亏平衡点 Quantity * Unit Cost。
- 在 Project Viewer 窗格,Business View 命名空间下双击 Sales Fact,点击右下角的 Add。在 Name 编辑框输入 Break Even Point。
- 在 Available Components 窗格,双击 Quantity。点击 Functions 标签页,双击 *。点击 Model 标签页,双击 Unit Cost。
图 14. 内嵌式计算
维度建模关系
您前面已经使用标准关系建模,设计的元数据可以在 Report Studio 中用基本关系即席查询和报表。此外,在 IBM Cognos BI 中,还可以使用维度建模关系建模 Dimensionally Modeled Relational 简称 DMR。维度建模关系建模指的是一个建模人员为关系型数据源提供的允许进行 OLAP 风格查询的维度信息,这样就能在 Business Insight Advanced 访问成员函数,进行自主式设计分析和向上、向下钻取。
维度建模关系建模通过以下元素定义:
- 常规维度 Regular Dimensions
- 度量维度 Measure Dimensions
- 范围关系 Scope Relationships
常规维度
常规维度表达的是描述性数据,这些数据为度量维度中建模的数据提供上下文。常规维度由一个或多个用户定义的层次结构组成,这些层次结构由层、键、标题和属性组成。
常规维度可分解为称为“级别”的信息组。反过来,各级别可以组织为层级。例如,产品维度可以包含组织到单一层级(称为 Product)中的级别 Product Line、Product Type 和 Product。另一个示例是时间维度,包含组织到两个层级中的级别 Year、Quarter、Month、Week 和 Day。一个层级 YQMD 包含级别 Year、Quarter、Month 和 Day,另一个层级 YWD 包含级别 Year、Week 和 Day。
最简单的级别定义包含业务键和标题,其中任意一项都引用一个查询项目。级别的实例(或行)定义为该级别的成员。它由成员的唯一名称标识,它是一个五部分的 标识符,[namespace].[dimension].[hierarchy].[level].[query item]。
如果级别的业务键足以标识级别的每个数据集,则可将级别定义为唯一级别。比如 Product 级别的成员是唯一级别,因为它不需要 Product Type 的定义。未定义为唯一级别的级别类似于非惟一 determinants,比如月份。
- 在 Project Viewer 窗格,右键点击 Model 选择 Create,然后点击 Namespace,命名为 Dimensional View。
- 右键点击 Dimensional View 选择 Create,然后点击 Regular Dimension。
- 在 Available items 窗格,展开 Business View 下的 Time,拖拽 CURRENT_YEAR 到 Hierarchies 窗格。
- 右键选择 Hierarchies 窗格最上面的 CURRENT_YEAR,点击 Rename,输入 Time。
- 把 CURRENT_YEAR (All) 重命名为 Time (All),把最下面的 CURRENT_YEAR 重命名为 Year。
- 选择 Year 层级,在下方窗口的 Role 选择 _businessKey,然后点击 Close。
- 点击下方窗口的 Add,命名为 Year Caption,在 Available Components 窗口展开 Business View 下的 Time,把 CURRENT_YEAR 拖拽到 Expression definition 窗口。编辑表达式为:cast([Business View].[Time].[CURRENT_YEAR], char(4)) 后点击 OK。
- 在下方窗口选择 Year Caption 的 Role 为 _memberCaption,然后点击 Close。
图 15. 层次结构面板
- 从 Available items 窗格把 QUARTER_KEY 拖拽到 Hierarchies 窗格的 Year 层下方。重命名为 Quarter,然后指定 QUARTER_KEY 为 _businessKey 的 Role。
- 仿照 57 和 58 步骤,添加 Quarter Caption 项,表达式为 cast([Business View].[Time].[CURRENT_QUARTER], char(1))。指定 Role 为 _memberCaption。
- 从 Available items 窗格把 MONTH_KEY 拖拽到 Hierarchies 窗格的 Quarter 层下方。重命名为 Month,然后指定 MONTH_KEY 为 _businessKey 的 Role。
- 从 Available items 窗格把 CURRENT_MONTH 拖拽到右下方窗口,选择 _memberCaption。
- 从 Available items 窗格把 DAY_KEY 拖拽到 Hierarchies 窗格的 Month 层下方。重命名为 Day。注意 DAY_KEY 已经是 _businessKey 的 Role,这是因为 DAY_KEY 是表的主键,属性是 Identifier。
- 从 Available items 窗格把 DAY_DATE 拖拽到右下方窗口,选择 _memberCaption。命名为 Day Caption。点击 Source 编辑定义为 cast([Business View].[Time].[DAY_DATE], char(10))。点击 OK,因为日期是唯一的,勾选 Unique Level 选项。
图 16. 时间维度
- 时间维度的排序往往很有用,比如利用 Lag 函数查看当前月和上月的数据就需要成员排序。点击 Member Sort 标签页,在 Sorting Options 中,勾选 Metadata、Data 和 Always (OLAP compatible)。点击 Detect 来检测用在 Level Sort Properties 定义的字段,如图 17 所示。最后点击 OK。
图 17. 成员排序
- 重命名 New Dimension 为 Time。
- 您可以参照上面的步骤,在您的模型中添加 Products 维度,结果如图 18 所示。在 Available items 窗格,展开 Business View 下的 Products。
- Product Line 层的 _businessKey 是 PRODUCT_LINE_CODE。
- Product Line 层的 _memberCaption 是 PRODUCT_LINE_EN。
- Product Type 层的 _businessKey 是 PRODUCT_TYPE_KEY。
- Product Type 层的 _memberCaption 是 PRODUCT_TYPE_EN。
- Product Name 层的 _businessKey 是 PRODUCT_KEY。
- Product Name 层的 _memberCaption 是 PRODUCT_NAME。
图 18. 产品维度
- 您可以仿照上面的步骤,在您的模型中添加 Order Methods 维度,结果如图 19 所示。在 Available items 窗格,展开 Business View 下的 Order Methods。
- Order Methods 层的 _businessKey 是 ORDER_METHOD_KEY。
- Order Methods 层的 _memberCaption 是 ORDER_METHOD_EN。
图 19. 订购方法维度
度量维度
度量维度是一个事实逻辑集合,可以实现对关系型数据源进行 OLAP 风格的查询。度量维度是表达常规维度所描述的数量数据。接下来您将创建度量维度。
- 右键点击 Dimensional View,选择 Create,然后点击 Measure Dimension。
- 在 Model Objects 窗格,展开 Business View 下面的 Sales Fact,按住 Shift 选择从 QUANTITY 到 Break Even Point 的所有字段,拖拽到 Measures 窗格,如图 20 所示。
图 20. 度量维度
- 点击 OK。重命名 new Dimension 为 Sales Fact。
- 重复 69 到 71 的步骤,创建 Sales Target Fact 的 Measure Dimension,选择 Business View 下面 Sales Target Fact 的 SALES_TARGET。
范围关系
范围关系仅存在于度量维度和标准维度之间,定义可以用于报表的度量所在的层。在范围关系中没有设置控制查询生成方式的条件,因此前面的关系定义仍然需要, 以便生成 SQL 语句。如果度量维度和标准维度之间有关系定义的话,范围关系会自动创建,比如您的模型就会自动创建范围关系。
- 双击 Dimensional View 命名空间,选择 Diagram 标签您可以看到范围关系如图 21 所示。您可以双击关系来编辑范围,接下来用 Dimension Map 标签来编辑范围关系会更容易。
图 21. 范围关系
- 选择 Dimension Map 标签,点击 Sales Target Fact,可以看到所有的维度都是高亮显示,这表明目前都在范围内。现在您想让 Order Methods 不在 Sales Target Fact 范围内,而且 Sales Target Fact 的范围只能是 Time 的 Month 层和 Products 的 Product Type 层。
- 点击 Month 层,工具栏上点击 Set Scope 按钮。
- 点击 Product Type 层,工具栏上点击 Set Scope 按钮。
- 点击 Order Methods 维度,工具栏上点击 Remove Scope 按钮。
图 22. 设置 Sales Target Fact 范围
创建和管理包
模型设计和定义结束以后,需要通过 Framework Manager 的管理和发布包的功能,将它发布到 Cognos 服务器上去,业务人员就能基于发布好的模型,定制我们需要的查询报表和分析报表。在发布之前,您需要在 Presentation View 下创建准备发布的命名空间。
- 在 Project Viewer 窗格,右键 Presentation View 点击 Create,选择 Namespace,重命名为 Query,用来做关系型报表。把 Presentation View 下的 Sales Target 和 Sales 命名空间拖拽到 Query 命名空间下。
- 在 Project Viewer 窗格,右键 Presentation View 点击 Create,选择 Namespace,重命名为 Analysis,用来做维度型分析。接着需要创建维度建模的 Star Schema Grouping 然后放置到 Analysis 命名空间下。
- 右键点击 Dimensional View 下的 Sales Fact,选择 Create Star Schema Grouping,如图 23 所示。然后点击 OK。
图 23. 维度建模的 Star Schema Grouping
- 右键点击 Dimensional View 下的 Sales Target Fact,选择 Create Star Schema Grouping,然后点击 OK。
- 拖拽新创建的两个命名空间到 Analysis 命名空间下。最后的 Presentation View 如图 24 所示。
图 24. Presentation View
- 在 Project Viewer 窗格,右键 Packages 文件夹,点击 Create,选择 Package。
- Name 输入 My Query,然后点击 Next。
- 清除 Model 命名空间的选择,仅仅选择 Presentation View 下面的 Sales Target 和 Sales,如图 25 所示。
图 25. 定义 My Query 包的内容
- 点击 Next,然后设置包函数列表,缺省是包含全部的函数,这里只需要保留 DB2,移除其他的。
- 点击 Finish,当提示要启动 Publish Package Wizard,选择 Yes。
- 包缺省是放置在 Cognos > 公共文件夹,您可以改成 Cognos > 我的文件夹。去掉 Enable model versioning 的选择。点击 Next。
- 在 Add Security 可以设置包的访问权限和管理权限,然后点击 Next。
- 确保选择了 Verify the package before publishing,然后点击 Publish。
- 发布成功后点击 Close。
重复步骤 83 到 91 发布 My Analysis,这次只选择 Sales Target Fact 和 Sales Fact 命名空间,如图 26 所示。
图 26. 定义 My Analysis 包的内容
安全性
在 Framework Manager 中,安全性是一种对 Cognos 产品的元数据和数据的权限进行限制的一种方法。对数据的访问进行限制有很多业务原因。 例如,有些数据可能含有绝密数据,只允许特定用户进行查看;可能有各种数据,用户只需要从特定的表或列中检索数据;或者表中含有很多记录,您的用户只需要 检索该表记录的子集。
Framework Manager 中有三种安全性类型,每个类型都按照用户、组和角色来定义权限。
- 给对象提供可视权限(基于对象安全)
这是通过保持对象的可见性或者隐藏该对象来给对象提供安全性。
您点击需要进行安全设置的对象,从 Actions 菜单,选择 Specify Object Security,然后根据用户、组和角色来设置允许或者拒绝访问。
- 定义安全性过滤(数据安全性)
这是创建一个安全性过滤并将其应用到特定的查询主题。当报表作者设置报表时,该过滤可以控制显示给报表作者的数据。
您点击查询对象,从 Actions 菜单,选择 Specify Data Security,然后设置用户、组和角色,在 Filter 列上,选择 Create/Edit Embedded filter 或者 Insert from Model 来使用过滤来控制安全性。
- 设定包访问权限 (元数据安全性)
这是对包访问设置应用安全性,确定哪些用户有权访问该包。
刚才您在发布包的 Add Security 步骤可以进行设置,也可以在 Framework Manager 中点击需要设置的包,从 Actions 菜单点击 Package,选择 Edit Package Settings 来设置。
总结
您已经成功建立了第一个元数据模型,并创建并发布包以便业务人员和开发人员使用。在 IBM Cognos Connection 可以看到您刚才发布两个包,如图 27 所示。
图 27. 在 IBM Cognos Connection 中查看
接下来您就可以用这两个包来进行报表设计和自助分析了。您可以使用 My Analysis 包来进行多维分析,可以在 Business Insight Advanced 使用层次、成员、属性、度量等多维模型元素,如图 28 所示。
图 28. 用 Business Insight Advanced 进行自助分析
您也可以用 My Query 包来进行报表设计,包括用 Report Studio 来设计交互式离线报表,如图 29 所示。
图 29. 用 Report Studio 进行报表设计