教程:使用 MongoDB、WCF、OData 和 PowerBI 构建 Azure 上的商业智能解决方案
发布于 2014-05-20 作者 陈 忠岳
目录
- 概述
- 前提条件
- 创建 Windows Server 2012 Datacenter 虚拟机
- 通过 WCF(Windows Communication Foundation)使用 OData 连接 MongoDB
- 开放政府数据:FAA Aircraft Registry
- 使用 LINQPad 查看 OData
- 使用 PowerBI 实现 OData 可视化
- 使用 PowerMap 显示数据地图
- 结论
概述
本教程共包含三个开放主题:开放政府、开放数据以及开源。首先,对于开放政府,我们使用美国联邦航空管理局(FAA)提供的开放域数据。其次,我们使用开源数据库 MongoDB 来存储数据。最后,我们使用开放数据协议 OData 来实现数据连接与可视化。
前提条件
本教程需要您拥有 Microsoft Azure 订阅账户。如果没有,您可以通过申请 “VM Depot 中国客户优先体验计划”获得。此外,您还需要使用 Visual Studio 来创建 WCF(Windows Communication Foundation)OData 数据服务。如果您没有 Visual Studio 的完整版本,请在此处免费下载 Visual Studio Express。
创建 Windows Server 2012 Datacenter 虚拟机
登录您的 Azure 门户,选择“虚拟机”标签。在该标签页,选择“计算 > 虚拟机 > 快速创建”。在“镜像”中选择“Windows Server 2012 Datacenter”,然后填写其他相关信息创建虚拟机。
虚拟机的启动运行将需要几分钟的时间。创建好虚拟机之后,打开“虚拟机”标签页,选择您刚刚创建的这台虚拟机。选择“仪表盘”选项,单击“连接”,获取用来建立虚拟机的远程桌面文件。
系统提示您打开或保存这个 RDP 文件。先保存,然后打开您的下载文件夹,双击打开这个 RDP 文件。这时会出现一个安全警告,提醒您无法识别该远程连接的发行商,单击“连接”即可(因为它是可信任来源)。
在“Windows 安全”对话框中,单击“使用其他账号”:
输入您所创建账号的用户名和密码,保持域名为空,然后单击“确定”。
这时会出现一个类似下图的安全警告,单击“确定”即可(因为它是一个可信任的远程计算机):
只需几秒钟的时间,您就可以通过远程桌面连接并登录到虚拟机。
创建 MongoDB
首先我们需要做的是,通过打开 MongoDB 通信端口来为 MongoDB 的运行准备虚拟机。在 Azure 门户上,选择您刚刚创建的虚拟机,然后选择端点。新建以下端点:
NAME: mongodb
Protocol: TCP
Public Port and Private port: 27017
这只是在 Azure 虚拟机上创建 MongoDB 的最低要求。有关配置选项的更多详细信息,请登录 https://www.mongodb.org/ 查阅相关文档。
接下来,我们需要创建并清空 MongoDB 数据库,然后在您的本地计算机(而不是虚拟机)上启动 MongoDB 服务器(下载文件到您的计算机上可以避免很多安全问题和提示)。
登录 MongoDB 网站,选择“下载”标签。在该标签页,选择 Windows 64 位版本的下载链接。
下载“.zip”文件后,复制到虚拟机上。创建目录“C:\mongodb”,将该文件解压缩到这个目录。
然后,创建目录“C:\data”和“C:\data\db”。
以管理员身份打开命令提示符,运行以下命令来启动 MongoDB 数据库进程:
C:\mongodb\bin\mongod.exe
控制台消息显示“等待连接”,表示 mongod.exe 进程运行成功。
再次以管理员身份打开命令提示符,运行以下命令,使用 mongo.exe shell来连接 MongoDB:
C:\mongodb\bin\mongo.exe
mongo.exe shell mongo通过您在前面操作中创建的端口 27017 来连接 mongod.exe。现在,MongoDB 实例已启动运行,并可接收数据和命令。
为了保证实例的正常运行,我们可以执行 mongotop.exe 程序。该程序跟踪 MongoDB 实例读取数据的时间,每秒钟进行一次测试,这是验证实例正常工作的一种既简便又快捷的方法。出现错误或者响应缓慢,都说明服务器或配置出了问题。有关 mongotop 的更多文档,请点击此处浏览。
第三次以管理员身份打开命令提示符,运行以下命令来启动 mongotop:
C:\mongodb\bin\mongotop.exe
如果响应时间很短,说明系统运行正常。尤其当数据库内的数据很少或没有时,最佳的响应时间应为 0 毫秒:
有关创建 MongoDB 的完整操作指南,请点击此处。
通过 WCF(Windows Communication Foundation)使用 OData 连接 MongoDB
本教程指导我们使用 WCF(Windows Communication Foundation)来创建开放数据协议(OData)数据服务。
WCF 是用来创建面向服务的应用程序的一种框架。它从一个服务终结点向另一个服务终结点以异步消息的方式传送数据作为。一个服务终结点可以是 IIS 或一个应用程序支持的连续可用服务的一部分。
OData 是用来创建以及使用数据 API 的一种标准化协议。它建立在核心协议(如 HTTP)和普遍接受的方法(如 REST)之上。
打开 Visual Studio(我使用的是 2012 版)或者免费的 Visual Studio Express,创建一个新的网站。选择“Empty ASP.NET Web Application”模板并给它命名。
打开 NuGet 程序包管理器,搜索 MongoDB OData 驱动。我使用的是这个驱动。有关驱动的更多详细信息,请点击此处。有关源代码的详细信息,请点击此处。
安装驱动之后,打开 Web.config,根据以下格式更新 MongoDb 实例的连接字符串:
connectionString="mongodb://DNS NAME:27017/<yourDBName>"
然后,登录到 Azure 下载发布配置文件。在 Visual Studio 中,使用发布网站选项来导入您的发布配置信息。保持所有默认设置不变,单击“发布”。
这样就完成了!您使用 WCF 成功创建了一个 OData 服务。
您的服务接入 URL 为:
https://<YourWCFServiceURL>/OData.svc/
开放政府数据 – FAA Aircraft Registry
FAA Aircraft Registry 是一个公共的飞机登记数据库,包括 80 万个人飞机登记、数千飞机经销商以及其他数据点,且每周都会有更新。数据以逗号分隔格式(CDF)的方式提供,并可通过常用的数据库管理应用程序进行操控。
此例中的数据仅供参考所以本文不作具体说明。您也可以使用你喜爱的任何数据源。本教程假设我们在 Azure 上已拥有一个 MongoDB 实例,并加载了数据。
MongoDB 中的数据可划分到一个或多个集合中。我根据 FAA 网站下载的原文件创建了几个集合。从 OData 客户端访问,每一个集合都像数据库中一个独立的表格。我使用 MongoImport 命令将下载的逗号分隔格式文件加载到每个集合当中。
使用 LINQPad 查看 OData
现在我们可以通过 OData 来测试 Azure 上的 MongoDB 到客户端的连接。一种最快速、简便的方法是使用 LINQPad,它是一种免费的工具,最初的创建是为了互动查询 SQL Server,现在已被扩展为可立即执行表达式的 C#/VB/F# 暂存器。更重要的是,它有一个易于使用的 OData 连接接口。单击“新建连接”,选择“WCF 数据服务”选项以连接到 WCF OData 服务,如下图所示:
在下一个页面中,输入您的连接 URL,保持其他选项不变。单击“测试”按钮测试您的连接,然后单击“确定”保存。
使用 PowerBI 实现 OData 可视化
我们使用 PowerBI 的两个主要功能 Power Query 和 Power Map 来实现数据可视化。PowerBI 是一套实用的自助服务商业智能工具,它是附加到 Microsoft Excel 用于数据发现、组合、优化、可视化的软件。您还可以使用 PowerBI for Office 365 实现数据分享。
在我使用的示例数据集中,有 7606 条有关美国飞机经销商的数据记录。本例中,我将按“州”来进行经销商排列和分组,然后将经销商按“州”记录在地图上。
打开一张新的 Excel 数据表格,选择“Power Query”标签。在该标签页,选择“从其他源 > 从 OData Feed”。
输入您 WCF OData 服务的 URL。
双击该表格,在编辑模式下打开。然后,选择“组”,在“分组依据”中选择“STATE_ABBREV”,“操作”中选择“计算行数目”。
由此生成的查询为:
= Table.Group(DEALER_Data1, {"STATE_ABBREV"}, {{"Count", each Table.RowCount(_), type number}})
下图为查询结果中的原始数据:
使用 PowerMap 显示数据地图
接下来,我们通过选择“插入 > 地图 > 启动 Power Map”来启动 PowerMap。
在出现的第一个页面中,选择“州名缩写”来定义地图布局的表现形式,然后单击页面右下角的“下一步”按钮。注意:这时 PowerMap 已经能够把我选择的数据识别为美国州名的缩写,并在地图上标出它们的相应位置。
在下一个页面中,我们需要选择显示内容和格式。本例中,我选择“气泡”和“平面图”这两个菜单选项。
此外,还有其他一些用于地图显示的选项。希望您能尝试各种方式显示数据,并将结果上传到 PowerBI for Office365 与我们分享!
结论
本例中,我向您介绍了如何借助 WCF 将 Microsoft Azure 上的 MongoDB 数据用于 OData 客户端应用程序、如何使用 Microsoft PowerBI 轻松实现数据可视化和地图显示。这是一个比较简单的可视化示例,更多示例请点击此处。此外,Power Query 还提供了一个内置的在线搜索功能,可以帮助您轻松发现其他来源的开放数据,并把这些数据融入您的查询和可视化功能。
最后,如果您还有其他感兴趣的内容,或者您已部署过其他相关技术,请不吝反馈!
本文转载自: