教程:使用 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 的最低要求。有关配置选项的更多详细信息,请登录
http://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 为:
http://<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 还提供了一个内置的在线搜索功能,可以帮助您轻松发现其他来源的开放数据,并把这些数据融入您的查询和可视化功能。
最后,如果您还有其他感兴趣的内容,或者您已部署过其他相关技术,请不吝反馈!
本文转载自:
教程:使用 MongoDB、WCF、OData 和 PowerBI 构建 Azure 上的商业智能解决方案的更多相关文章
- WCF Odata 开放数据协议应用
OData简介 说起 WCF Data Service ,不得不说的是 OData.对于一个标准的 Web 服务,它往往会提供了一些功能,比如说:订货.退货这些,然后使用者通过HTTP协议来使用这些功 ...
- WCF开发指南之构建服务
一. 引言 Windows通讯基础(简称为WCF)是一种SDK,用于让你使用典型的CLR编程结构(例如用于发布和消费服务的类和接口等)来构建Windows面向服务的应用程序.WCF的编程模型是声明性的 ...
- ArcGIS Pro 简明教程(4)工具和模型构建器
ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...
- Android Studio 入门级教程(三):gradle项目构建
声明 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4456420.html [系列] Andr ...
- WCF系列教程之初识WCF
本随笔参考自WCF编程系列(一)初识WCF,纯属读书笔记,加深记忆. 1.简介:Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程 ...
- (转)Hprose与WCF在云计算平台Azure上的对决
Windows Azure Platform是一个运行在微软数据中心的云计算平台.它包括一个云计算操作系统和一个为开发者提供的服务集合.开发人员创建的应用既可以直接在该平台 中运行,也可以使用该云计算 ...
- AngularJS是为了克服HTML在构建应用上的不足而设计的
AngularJS中文网:http://www.apjs.net/ 简介 AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构 ...
- OData.NET已在 GitHub上开源
OData.NET已在 GitHub上开源 微软最近已将OData .NET所有类库的源代码全部发布在GitHub上. 以下与OData相关的项目目前都已迁移到GitHub上: ODataLib Ed ...
- [SDK2.2]Windows Azure Storage (15) 使用WCF服务,将本地图片上传至Azure Storage (上) 服务器端代码
<Windows Azure Platform 系列文章目录> 这几天工作上的内容,把项目文件和源代码拿出来给大家分享下. 源代码下载:Part1 Part2 Part3 我们在写WEB服 ...
随机推荐
- STORM 免费且开源的WebSerivce测试工具
一.名称 STORM 是一款免费且开源的WebSerivce测试工具 二.使用方式 1.发布自己的webservice服务 例如:http://www.webxml.com.cn/WebService ...
- 调度思路+EurekaServer获得当前机器的instanceid
调度思路 概念 Build 一次完整的构建 整个流水线 Task(BuidStep) 流水线中的某一个步骤单元 先假设对于一个Build(流水线)而言里面所有Task是串行执行的 并且各Task之间不 ...
- Qt之json解析
Jsoner::Jsoner(QObject *parent) : QObject(parent){ QJsonObject json; json.insert("loginna ...
- Codeforces Round #336 (Div. 2) D. Zuma
Codeforces Round #336 (Div. 2) D. Zuma 题意:输入一个字符串:每次消去一个回文串,问最少消去的次数为多少? 思路:一般对于可以从中间操作的,一般看成是从头开始(因 ...
- chmod 命令 set uid ,set gid,sticky bit 说明
permission的符号模式表: 模式 名字 说明 r 读 设置为可读权限 w 写 设置为可写权限 x 执行权限 设置为可执行权限 X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行 ...
- 提交App Store注意事项1
1.未遵守苹果iOS APP数据储存指导方针. 如果你的App有离线数据下载功能,尤其需要关注这一点.因为离线数据一般占用存储空间比较大,可以被重新下载和重建,但是用户往往希望系统存储空间紧时也依然能 ...
- android SurfaceView绘制 重新学习--切图clipRect详解
解释都在代码注释中: public class SampleView extends View { private Paint mPaint; private Path mPath; public S ...
- XE5 安装破解
以下转载自: 盒子 不可以将本破解补丁分享到国外网站.论坛中!低调啊! 本破解补丁只适合中国大陆地区的Delphi.C++Builder爱好者和开发者! 本破解补丁只可用于个人研究交流使用,不得做商 ...
- 我是如何实用:before :after
本文地址http://www.cnblogs.com/Bond/p/3972854.html 最近一直做移动端,没和IE6打交道了,瞬间感觉世界变美好了.移动端虽然还是各种坑,但是比起修复IE6那还是 ...
- backbone showcase
http://www.mhtml5.com/2012/06/5119.html http://tieba.baidu.com/p/2389371223 http://www.jdon.com/tags ...