大数据企业报表解决方案
发布时间: 2018-09-11
世界各国政府承诺了要增加透明度,因此将他们收集的信息发布为开放数据集。能够扩大业务成果的宝贵洞察就位于这些数据集所包含的大量数据中,亟待您的发现。例如,通过分析开放数据集,您可以回答这样的问题:增加医疗保健投资有可能减少专科医疗程序的等待时间吗?
IBM Bluemix 中的 Embeddable Reporting 是基于云计算的企业级商业智能 (BI) 解决方案,可以帮助您回答这些问题。由 IBM? Cognos? Business Intelligence 驱动的 Embeddable Reporting 为 BI 分析师、架构师和开发人员提供了一个在 Bluemix 上托管的、熟悉的开发环境,可用于构建新的业务分析解决方案。
本教程将详细介绍利用 Embeddable Reporting 构建端到端的报表解决方案来分析开放数据的步骤。完整的解决方案(该解决方案也采用了 Liberty for Java? 运行时、Cloudant NoSQL DB 服务和 dashDB 服务)涉及:
将开放数据加载到充当操作数据存储的基本表中。
从操作数据存储中提取数据,转换数据,然后将数据加载到一个星型模式的数据仓库中。
针对星型模式的数据仓库构建报表。
在练习中,使用了由加拿大政府提供的与健康相关的数据。要探讨的问题是,医疗保健系统中的支出上升是否会让一个国家的公民更加了解自己的健康状况?为了回答这个问题,要分析医疗保健支出和感知健康状况之间的关系。断言这两个主题之间的因果关系是很难的(这需要进行具体的研究);但是,您可以了解一下这两个指标每年的变化。
要回答这个问题(并确定投资是否可以促成所期望的结果),首先要从加拿大健康趋势和医疗保健支出的原始数据开始。图 1 示出了健康趋势开放数据集的一部分。
图 1. 健康趋势开放数据集

然后,将原始数据转换成星型模式,如图 2 所示,以便轻松创建报表和执行结果分析:

图 2. 按国家列出的健康趋势 — 星型模式
星型模式定义了维度 和事实,以便更轻松地创建适当的查询,以有用的方式来显示数据。事实是指您会在报表中看到的总数(例如,总消费金额,或者认为其健康状态为非常好的人的总数),而维度是指划分这些总数的类别(例如,每年或每个省)。
最后,将会执行必要的分析,构建一个看起来类似于图 3 的报表:
图 3. 医疗保健支出与健康状态感知的对比报告

图 3 是一个组合图表,其中的条形图代表每年的医疗保健支出,线形图代表每年认为自己的健康状态为良好或非常好的加拿大公民的百分比。
这样的报告的价值在于,它专注于业务成果的讨论,这也是业务领袖、政策制定者和决策者所关注的主题。在本例中,我们要讨论的主题是,在 10 年期间,感觉自己的健康状态为良好或非常好的加拿大人的数量增加了1%,这是否证明医疗保健支出的 68% 增幅(接近 850 亿美元)是合理的。该练习的目的不是要得出有关加拿大医疗保健支出的明确结论,而是要让您理解,通过在 Bluemix 中使用开放数据和 Embeddable Reporting 服务,您可以执行哪些分析类型。
“该报告的价值在于,它专注于业务成果的讨论,这也是业务领袖、政策制定者和决策者所关注的主题。”
前提条件
一个 IBM ID 和一个 Bluemix 帐户(注册获得 免费试用版帐户,如果您已经有一个帐户,请 登录 Bluemix)。
# 文件(单击本节末尾的获取代码按钮)。将 # 保存到您在自己的文件系统中所选择的位置,并解压它。Datasets 文件夹包含两个数据文件,可随时将它们加载到 dashDB 中。Scripts 文件夹中包含的脚本用于创建和填充数据仓库中的表。
如果已经具备 IBM Bluemix 和 Cognos Business Intelligence 相关的知识和经验,这会对您有所帮助,但这不是必需的。
备注:本教程的说明假设您将使用 “经典” Bluemix UI。当登录时,不要单击 Try the new Bluemix 选项。
第 1 步。在 Bluemix 中配置并初始化 Embeddable Reporting 服务
为了编写报表,并将之嵌入到应用程序中,Embeddable Reporting 要求:
一个 Bluemix 运行时(Liberty for Java 或 IBM SDK for Node.js)。
一个数据存储,用于托管其 Content Repository。Content Repository 保存了 Embeddable Reporting 的报表定义和服务元数据,而且它将缓存报表工件,以提高报表执行的性能。Cloudant NoSQL DB 和 MongoLab 是用于数据存储的两个选择。
至少有另一个数据存储用于托管作为报表创建依据的数据仓库。SQL Database 和 dashDB 是数据仓库的两个选择。
在这一步中,配置运行时为 Liberty for Java,内容存储数据服务为 Cloudant NoSQL DB,数据仓库服务采用了 dashDB 以及 Bluemix 上的 Embeddable Reporting 服务。
为 Embeddable Reporting 部署一个应用程序运行时
使用您的 IBM ID 登录 Bluemix。
在仪表板中,选中并展开 dev 空间,如图 4 所示:
图 4. 在 Bluemix 仪表板上选中 dev 空间

在 Cloud Foundry Apps 框中单击 CREATE APP。选中 Web 作为应用程序类型。
单击 Liberty for Java 并单击 CONTINUE。
输入 HealthCareReportingApp 或者您所选择的惟一名称,并单击 FINISH。
为 Embeddable Reporting 内容存储部署一个数据服务
配置 Cloudant NoSQL DB 作为数据服务,充当 Embedded Reporting 内容存储:
返回到仪表板,并在 Data & Analytics 框中单击 WORK WITH DATA。
单击 NEW SERVICE 按钮。
在 Full-Service 类别中,单击 Cloudant NoSQL DB,然后单击 CHOOSE CLOUDANT NOSQL DB。
对于 Space,可选中 dev。
对于 App,可选择您在部署应用程序运行时的时候创建的 Liberty Runtime 应用程序,以确保该服务被绑定到运行时。
对于 Service name,可提供您所选择的名称或使用默认名称。
保留 Selected Plan 为 Shared,然后单击 CREATE。
如果提示重新载入应用程序,请单击 RESTAGE。
为 Embeddable Reporting 数据仓库部署一个数据服务
配置 dashDB 作为 Embedded Reporting 的数据仓库:
返回到仪表板并在 Data & Analytics 框中单击 WORK WITH DATA。
单击 NEW SERVICE 按钮。
在 Full-Service 类别中,单击 dashDB,然后单击 CHOOSE DASHDB。
对于 Space,可选中 dev。
对于 App,可选中您之前创建的 Liberty Runtime 应用程序,以确保该服务被绑定到运行时。
对于 Service name,可输入 HealthCareDW 或者您选择的另一个名称,或使用默认名称。
保留 Selected Plan 为 Entry 并单击 CREATE。
如果提示重新载入应用程序,请单击 RESTAGE。
创建 Embeddable Reporting 服务
返回到仪表板并在 Services & APIs 框中单击 USE SERVICES OR APIS。
在 Business Analytics 类别中,单击 Embeddable Reporting。
对于 Space,可选中 dev。
对于 App,可选中您在部署应用程序运行时的时候所使用的名称。
对于 Service name,可输入 HealthCareReportingService 或您选择的另一个名称,或者使用默认名称。
保留 Selected Plan 为 Free plan 并单击 CREATE。
如果提示重新载入应用程序,请单击 RESTAGE。
初始化 Embeddable Reporting
Embeddable Reporting 服务需要有关 Cloudant 数据服务的信息,将其初始化为它的 Content Store 存储库:
返回仪表板,然后单击应用程序的名称,跳转到它的概述页面。
在 dashDB 实例框中,单击 Show Credentials,并记下 jdbcurl、username 和 password 的值,在 第 4 步 中需要使用它们。
在 Cloudant NoSQL DB 实例框中,单击 Show Credentials 并将 url 值复制到剪贴板。
单击 Embeddable Reporting 实例框。
在 Embeddable Reporting 服务页面中,将刚才从 Cloudant 凭证中复制的 URL 粘贴到 Repository URI 区域中。
单击 Start。
第 2 步。 将开放数据集加载到 dashDB
dashDB 提供了一个选项,将开放数据文件直接下载到数据库中。当数据已经是可以处理的格式时,此选项很有用。但在大多数情况下,您需要更改原始数据的格式,然后才能将它作为一个新表加载到数据仓库中。本教程中使用的数据集也是如此。我们已经为您清理好了数据,所以在这一步中,您可以按原样将它们手动加载到 dashDB 中。
本文的案例分析范例中使用的原始数据集是 医疗保健支出数据(Series B_Série B-2014.xlsx 文件,Total 工作表)和 健康趋势数据,来自加拿大政府的 Open Government 站点。# 文件包含一个名为 Datasets 的文件夹,您可以在该文件夹中找到两个文件,随时都可以将它们加载到 dashDB 中。
如果还没有下载该文件,请单击 前提条件 小节末尾处的获取代码按钮,下载 # 文件。
加载到 dashDB 中的原始数据将发挥操作数据存储 (ODS) 的作用(但它可能不符合现实生活中的交易数据)。您将使用 ODS 创建在后续步骤中会用到的数据仓库表,以便通过 Embeddable Reporting 创建报表。
将支出数据 (HealthExpByProvince.xls) 加载到名为 HEALTHEXPBYPROVINCE 的新表中,将趋势数据 (HealthTrends.csv) 加载到名为 HEALTHTRENDS 的新表中:
返回 Bluemix 仪表板。
选中并展开 dev 空间。
单击 HealthCareReportingApp 应用程序并打开其概述页面。
单击 dashDB 服务实例框,并单击 LAUNCH。
从左侧菜单中选择 Load > Load from Desktop。
浏览到 HealthTrends.csv 文件。
对于 Does row one contain the column names?,可选中Yes。
单击 Preview 查看文件的前 10 行。单击 Next。
在 Choose the target 选项卡中,选中 Create a new table and load。单击 Next。
初始的行读取决定了在选项卡上显示的建议长度。如果您的数据可能包含比建议长度更长的值,那么现在应该增加建议长度,以防止在将数据加载到表中时出现错误。
在 Define new table 选项卡中,可以看到新表的名称,而且可以编辑列的名称和长度。
使用 Edit 按钮,将所有的 VARCHAR 字段长度改为 100。
单击 Finish。在 Load complete 选项卡,可以看到所加载的数据的摘要(提交的行数、加载的行数,等等。)
从左侧菜单中选择 Tables。
在 Table Name 上,选中您刚才创建的表。这里显示了表的定义。您还可以单击 Browse Data 来查看实际数据。
重复前面的过程,加载 HealthExpByProvince.xls 文件,创建一个新的 HEALTHEXPBYPROVINCE 表。
第 3 步。 定义一个数据仓库,并将数据加载到其中。
在这个步骤中,您将创建一个正式的数据仓库和一个星型模式,让查询和报表的创建任务变得更轻松。通常情况下,(根据您使用的数据集和要回答的问题)您需要定义满足需求所需的维度和事实。(或者,您甚至可能会发现数据已经准备好,您可以创建您想要的报表,因此,您不需要转换它。)
本教程不打算介绍如何确定构成星型模式的维度和事实;但是,我们会为您确定它们。如需了解有关星型模式和数据仓库的更多信息,可以探索以下资源。
基于在本例中使用的开放数据集所包含的数据,我们确定了六个维度和四个事实。这些维度包括:
日期 维度,对应年份 (D_DATE)。
国家 是加拿大 (D_COUNTRY)。
省份 指的是每个加拿大省 (D_PROVINCE)。
主题 是一般的健康概念的类别,如健康状况 (D_TOPIC)。
项目 向下钻取一个主题更具体的方面,比如,糖尿病 (D_ITEM)。
特点 与百分比类型相对应,比如(总体)比率或年龄标准化比率 (D_CHARACTERISTIC)。
这些事实包括:
按省份划分的医疗保健总支出 (F_PROV_HEALTHEXP)。
按国家划分的医疗保健总支出 (F_COUNTRY_HEALTHEXP)。
按省份划分的总体健康趋势 (F_PROV_HEALTHTREND)。
按国家划分的总体健康趋势 (F_COUNTRY_HEALTHTREND)。
# 文件的 Scripts 文件夹中包含的脚本用于创建和填充在本教程示例中使用的表。
创建星型模式
在 dashDB 中,使用以下步骤在数据仓库中创建一个星型模式。我们提供的 SQL 语句以本文的示例所使用数据集为基础。(如果您已经确定其他维度和事实来支持您要创建的报表,您可以修改相应的语句。)
维度和事实将是您的数据库中的新表。首先创建维度,因为事实表将会引用它们:
在左侧菜单中选择 Tables
单击 Add Table。
删除现有的 Data Definition Language (DDL) 语句,然后输入以下语句,创建一个维度表:

在上述语句下面,输入以下 DDL 语句来创建一个事实表:

单击 Run DDL 并等待对话框显示消息 DDL ran successfully。
单击 OK 并关闭 Create a table 对话框。
使用 Scripts 文件夹中的文件的脚本代码,为我们在数据中确定的每个维度和事实重复此过程。
现在,我们已经创建了表,将通过创建主键和外键来完成星型模式:
从左侧菜单中选择 Run SQL。
删除所有的示例 SQL 语句。
输入以下 SQL 语句,创建一个主键:

在上述语句下面,输入下面的 SQL 语句,创建一个外键:

单击 Validate,以确保 SQL 语句的语法正确。
单击 Run。
在页面的底部,在状态部分,确保状态显示为 Succeeded。
使用在 Scripts 文件夹中的脚本,为每个表重复上述步骤,创建所有主键和外键。
现在,您的表准备好了,是时候填充它们了。首先填充维度表,这样,在填充事实表时,就可以引用新的记录:
从左侧菜单中选择 Run SQL。
删除所有的示例 SQL 语句。
输入下面的 SQL 语句,填充一个维度表:

输入下面的 SQL 语句,填充一个事实表:

单击 Validate,以确保 SQL 语句的语法正确。
单击 Run。
在页面的底部,在状态部分,确保状态显示为 Succeeded。
使用 Script 文件夹中的脚本,为我们在数据中确定的每个维度和事实重复表填充步骤。
通过执行一个简单的 SELECT SQL 语句(例如:SELECT * FROM D_DATE)在验证在该屏幕上的数据,或转到 Tables 并在那里浏览数据。
第 4 步。 为 Embeddable Reporting 创建一个新的包
在开始构建报表之前,Embeddable Reporting 服务需要关于通过 dashDB 托管的数据仓库服务的信息。在 Embeddable Reporting 中,通过创建一个新的包 来提供该信息:
返回 Bluemix 仪表板。
选中并展开 dev 空间。
单击 HealthCareReportingApp 应用程序,打开其概述页面。
单击 Embeddable Reporting 服务实例框。
单击 New Package。
在 Provide a Name and Option Description For Your New Package 对话框中:
对于 Name,可输入 Health 或类似的适合的名称。
对于 JDBC URI、User Name 和 Password,可输入在第 1 步的 "初始化 Embeddable Reporting" 一节中保存的 dashDB 凭证。
单击 Create。
成功创建 Health 包之后,您可以查看并创建报表定义、数据源 和可视化。图 5 显示了单击左侧选项卡式菜单中的 Data Sources 时可以看到的内容。在创建 Health 包时,Embeddable Reporting 服务还创建了一个默认的数据源,其名称为 datasource,该数据源使您可以访问 dashDB 数据仓库中的信息。
图 5. Health 包数据源

第 5 步。 导入一个报表可视化
可视化可以帮助报表制作者让其报表变得更生动,更好地讲述数字背后的故事。Embeddable Reporting 使用 Cognos Report Studio 制作报表。Cognos Report Studio 补充了一些丰富的图表和表格,您可以在报表中使用它们。Report Studio 用户可以从 IBM AnalyticsZone 或从不断成长的可视化作者社区中导入更多的可视化。
导入一个 Combination 图表可视化,并将它加载到您的 Health 包中,用它来制作 Health Expense vs Perceived Health Wellness 报表:
在一个单独的浏览器窗口或选项卡中,访问 IBM AnalyticsZone 的可视化下载区。如有需要,请使用您的 IBM ID。
向下滚动到标题为 Combination 的可视化,并单击 Read more 链接。
单击 Download 按钮。
保留下载方法和产品的默认值不变,然后单击 Download。
阅读并接受下载条款,将 az.Combination_10_2_2.zip 文件保存到您选择的位置。不要解压 .zip 文件。
返回到加载了您的 Embedded Reporting 服务的浏览器窗口或选项卡。
单击左侧选项卡式菜单中的 Visualizations 选项卡,并单击 New Visualization 超链接。
在 Create Visualization 对话框中,单击 BROWSE 并浏览到您保存可视化的位置。
不要更改 Name 字段的值,现在该值被设置为 az.Combination。
单击 CREATE 按钮。
Combination 图表可视化已随时可用于报表制作。
第 6 步。 确定报表所需的 SQL
是时候来定义一个 SQL 语句了(根据您在数据库中创建的维度表和事实表),收集将在报表中显示的数据。常见的维度(如,年份和国家)应该链接事实表。您用来组织数据的维度应该是结果列的一部分。在写这篇文章时,Embeddable Reporting 没有提供提示,所以在运行时选择特定的记录并不简单,而这个过程超出了本教程的讨论范围。现在,您可以通过在报表中使用 SQL 语句来直接筛选记录。
在这里,您将只关注某个特定的 特点 ('Rate')、某个特定的 项目 ('Perceived health, very good or excellent (%) ') 和某个国家 ('Canada')。对于特点维度,SQL 会对名称进行筛选,而对于项目和国家,SQL 会对 ID 进行筛选:

前面的 SQL 语句返回了在加拿大(国家)中觉得自己的健康状况非常好或极好(项目)的人的总比率(特点),以及政府每年用于医疗保健的支出。它们共同的维度(年份和国家)链接到事实表(支出和趋势)。
第 7 步。 构建报表
在这一步中,您将在 Embeddable Reporting 服务中使用 Cognos Report Studio 创建 图 3 中所示的 Health Expense vs Perceived Health Wellness 报表:
在 Bluemix 中浏览到 Embedded Reporting 服务,如果 Health 包尚未展开,请展开它。
在左边选项卡式菜单中单击 Report Definitions。
单击 New Report Definition 超链接,在新的浏览器选项卡中打开 Report Studio。
在 New 对话框中选中 SQL Blank,然后单击 OK。
在 Data Source 对话框中选中 datasource,然后单击 OK。
在 SQL 对话框中,粘贴 第 6 步 中的 SQL 语句,并单击 Validate。如果没有出错,请单击 OK。
在 Content Pane 中单击 Toolbox 选项卡,如图 6 所示。
图 6. Report Studio 中提供的丰富报表控件

在 Toolbox 中向下滚动工具列表,并将 Visualization 工具拖动到 Work Area。
在 Visualization Gallery 对话框中,单击 Combination Chart,然后单击 OK。
在 Object and Query Names 对话框中:
在 Visualization name 处输入您选择的名称。
保留 Data container 和 Data container name 的默认值。
从 Query name 的下拉菜单中选择 Query1。
单击 OK。
在 Content Pane 中单击 Data Items 选项卡。
在 Work Area 中,单击 Combination Chart:Line Data。在 Properties 编辑器中,使用下拉菜单,将 Query2 更改为 Query1,如图 7 所示。
图 7. 为报表图表设置查询

从 Data Items 窗格中,将 YEAR 拖动到 Combination Chart:Clustered column data 和 Combination Chart:Line data的 Categories (x-axis) 上。
在 Combination Chart:Clustered column data 的 Categories (x-axis) 下面,单击 YEAR,在 Properties 编辑器中,单击Sorting 的省略号,然后将会弹出 Sorting 对话框。
在 Data items: 下方选中 YEAR,并将它拖动到 Sort List: 窗格,如图 8 所示,并单击 OK。
图 8. 设置报表图表的排序筛选器

将 TOTAL_EXP 从 Data Items 选项卡拖动到 Combination Chart:Clustered column data的 Size 上。
将 TOTAL_TREND 从 Data Items 选项卡拖动到 Combination Chart:Line data的 Size 上。Work Area 中的 Combination Charts 现在看起来应该类似于图 9。
图 9. 最终报表的图表维度和度量

在 Combination Chart:Clustered column data 的 Size 下面,单击 TOTAL_EXP。在 Properties 编辑器中,将 Aggregate Function 属性从 Automatic 更新为 Total,如图 10 所示。
图 10. 为关键度量设置聚合函数

在 Combination Chart:Line data的 Size 下面,单击 TOTAL_TREND,并在 Properties 编辑器中,将 Aggregate Function 属性从 Automatic 更新为 Total。
在 Work Area 中单击 Combination Chart 上的任意位置,并将 Width 属性从 500 修改为 1000。
保存并运行您的报表。
您已经使用 Report Studio 与 IBM Bluemix 上的 Embeddable Reporting 服务构建了您的第一个报表。
结束语
通过使用 Embeddable Reporting 服务和其他 Bluemix 服务进行本教程的案例研究,您学习了如何生成企业报表解决方案的一些关键要素。dashDB 服务的作用是托管从两个开放数据集导入的操作数据。dashDB 还托管了星型模式 — 制作报表的主要数据源。最后,您从星型模式获得了所需的 SQL,可以用 Cognos Report Studio 来构建组合图表报告。