原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot

近期公司内部在做一种通用查询报表,方便人力资源分析、统计数据。由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的,故我也打算借鉴一下。

测试代码下载

原有系统是使用VBA编写的,难以维护,且对新的操作系统如Windows 7、64位架构不支持,我准备用VSTO进行重写。

数据透视表是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。

数据透视表是一种完全自助式的报表,功能很强大,对于提取、分析数据来说非常方便。

下面我们添加一张数据透视表。

1、在【数据】中,选择从SQL Server中提取数据:

我从CodePlex上下载了SQL Server 2012的官方示例数据库:AdventureWorks2012

CodePlex网站也改版了,大量Metro风格 J

2、连接数据库:

3、当前仅仅是测试,选择一个表。当然也可以自己写SQL语句进行筛选数据:

4、点击【完成】结束向导:

5、这里选择【数据透视表报表】:

6、这样一张数据透视表就完成了:

7、在右边拖动我们想要分析的字段:

行维度选择了产品模型和产品,列维度选择了尺寸,最终统计了价格。

双击价格的单元格可以看到明细,相当于钻取报表:

8、除了表格展现,数据透视表还支持各种图表。

在【数据】中点击【已存在的连接】:

9、选择刚刚创建的数据库连接:

10、选择图表类型:

11、类似刚才一样拖动字段,一个图表就生成了,是不是很强大?

右键可以更改图表类型,如饼形图、锥形图等:

12、我打算把数据透视表功能集成到系统中,需要用代码来生成。

通过跟踪宏代码,可以很容易用代码来生成:

Sub Macro1() ' ' Macro1 Macro '  ' Workbooks("123.xlsx").Connections.Add ". AdventureWorks2012 Product", "", Array _ ( _ "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=.;Use Procedure for Prepare=1;Auto Translate" _ , _ "=True;Packet Size=4096;Workstation ID=WINDOWS8NB;Use Encryption for Data=False;Tag with column collation when possible=False;Ini" _ , "tial Catalog=AdventureWorks2012"), Array( _ """AdventureWorks2012"".""Production"".""Product"""), 3 ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ ActiveWorkbook.Connections(". AdventureWorks2012 Product"), Version:= _ xlPivotTableVersion14).CreatePivotTable TableDestination:="Sheet1!R1C1", _ TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion14 Cells(1, 1).Select With ActiveSheet.PivotTables("PivotTable1").PivotFields("ProductID") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _ "PivotTable1").PivotFields("ListPrice"), "Sum of ListPrice", xlSum With ActiveSheet.PivotTables("PivotTable1").PivotFields("Size") .Orientation = xlColumnField .Position = 1 End With With ActiveSheet.PivotTables("PivotTable1").PivotFields("ProductModelID") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("PivotTable1").PivotFields("ProductID") .Orientation = xlRowField .Position = 2 End With End Sub 
        private void fnExcel数据透视表测试()        {            Excel.Application __app = new Excel.Application();            __app.DisplayAlerts = false;            Excel.Workbook __book = __app.Workbooks.Add();            //创建OleDB连接            Excel.WorkbookConnection __conn = __book.Connections.Add("Test", "PivotTable Test"                , "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=.;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WINDOWS8NB;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=AdventureWorks2012"                , "AdventureWorks2012.Production.Product", Excel.XlCmdType.xlCmdTable);            //创建数据透视表            Excel.PivotTable __table = __book.PivotCaches().Create(Excel.XlPivotTableSourceType.xlExternal                , __conn, Excel.XlPivotTableVersionList.xlPivotTableVersion14)                .CreatePivotTable("Sheet1!R1C1", "PivotTable1", __conn, Excel.XlPivotTableVersionList.xlPivotTableVersion14);            //添加行维度            __table.PivotFields("ProductModelID").Orientation = Excel.XlPivotFieldOrientation.xlRowField;            __table.PivotFields("ProductModelID").Position = 1;            __table.PivotFields("ProductID").Orientation = Excel.XlPivotFieldOrientation.xlRowField;            __table.PivotFields("ProductID").Position = 2;            //添加列维度            __table.PivotFields("Size").Orientation = Excel.XlPivotFieldOrientation.xlColumnField;            __table.PivotFields("Size").Position = 1;            //添加值维度            __table.AddDataField("ListPrice", "SUM(ListPrice)", Excel.XlConsolidationFunction.xlSum);            __book.SaveAs(@"D:\test.xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook);            __app.Quit();            System.Runtime.InteropServices.Marshal.ReleaseComObject(__app);            System.Runtime.InteropServices.Marshal.ReleaseComObject(__book);            System.Runtime.InteropServices.Marshal.ReleaseComObject(__conn);            System.Runtime.InteropServices.Marshal.ReleaseComObject(__table);            __app = null;            __book = null;            __conn = null;            __table = null;        }

13、这样我们就可以借助于Excel的数据透视表来展示、分析数据。

正因为PivotTable如此好用,微软将PivotTable功能进行了升级,叫做PowerPivot,作为Excel 2010的一个免费插件发布,定位于企业级自助式的商务智能。

目前最新版本是Microsoft® SQL Server® 2012 PowerPivot® for Microsoft® Excel® 2010,下载地址

与PowerPivot类似,微软还推出了:

Microsoft® SQL Server® 2012 Data Mining Add-ins for Microsoft® Office® 2010

Microsoft® SQL Server® 2012 Master Data Services Add-in For Microsoft® Excel®

PowerPivot也是微软商务智能的主推技术之一,官方网站

以下摘自百度百科

PowerPivot for Excel 是用于在 Excel 工作簿中创建 PowerPivot 数据的创作工具。您将使用数据透视表和数据透视图等 Excel 数据可视化对象来显示您在 Excel 工作簿 (.xlsx) 文件中嵌入或引用的 PowerPivot 数据。

  PowerPivot for Excel 通过下列方式来支持自助商业智能。

  取消当前 Excel 中的行和列限制,以便可以导入更多的数据。

  通过数据关系层,您可以集成来自不同数据源的数据并全面处理所有数据。可以输入数据、复制其他工作表中的数据或从企业数据库中导入数据。可以在数据之间建立关系以分析数据,就好像所有数据都来自一个数据源一样。

  创建可移植、可重用的数据。数据保留在工作簿内。您无需管理外部数据连接。如果您发布、移动、复制或共享工作簿,所有的数据都会和工作簿在一起。

  工作簿的其余部分可以立即使用所有的 PowerPivot 数据。可以在 Excel 和 PowerPivot 窗口之间切换,从而以交互方式处理数据及其在数据透视表或数据透视图中的表示形式。处理数据或其表示形式不是单独的任务。可以在同一个 Excel 环境中一起处理数据及其表示形式。

  PowerPivot for Excel 可以让您导入、筛选数百万行数据以及对这些数据进行排序,远远超过 Excel 中一百万行的限制。排序和筛选操作都非常快,因为它们是由在 Excel 内部运行的本地 Analysis Services VertiPaq 处理器执行的。

  更重要的是,通过使用 PowerPivot for Excel,您可以在来自完全不同的数据源的数据之间建立关系,具体方法是映射包含类似或相同数据的列。在数据之间建立关系时,您是在 Excel 中创建了可在数据透视表、数据透视图或任意 Excel 数据表示对象中使用的全新内容。

  保存的数据存储在 Excel 工作簿内部。数据经过高度压缩,生成的文件的大小适合在客户端工作站上进行管理。

  最后,用户会获得一个包含嵌入数据的工作簿 (.xlsx) 文件,这些数据由内部处理器提取和处理,但完全通过 Excel 呈现。压缩和处理是由 Analysis Services VertiPaq 引擎完成的。查询处理在后台透明地运行,以便在 Excel 中提供海量数据支持。因为由本地 Analysis VertiPaq 引擎执行,排序和筛选操作都非常快。

14、安装完PowerPivot后打开Excel会多了一个Ribbon:

打开PowerPivot Windows后可以看到是一个增强的PivotTable:

结合数据挖掘插件已经可以做很多分析了:

小结:

Office 已经从办公平台开始转换为了微软的数据平台、商务智能平台,SQL Server 2012的发布加剧了这一过程。

PivotTable和PowerPivot可以很方便的做自助式商务智能分析,相较于SQL Server 分析服务和Oracle、IBM的重量级解决方案,是一种轻量级的解决方案,特别适合于业务、管理人员分析、提取需要的数据。

目前PowerPivot还没有开放API,我也只是从表面了解下基本用途,期待Office 15的登场吧。

VSTO学习笔记(十四)Excel数据透视表与PowerPivot的更多相关文章

  1. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  2. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  3. C# 操作Excel数据透视表

    一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的 ...

  4. Java 创建 Excel 数据透视表

    Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...

  5. delphi 控制 EXCEL 数据透视表

    虽说报表多又难做,做报表相当容易. 做报表也可以偷懒的,超级实用又省事.只需要做一个报表,这个报表里面包括几乎所有的数据字段,然后将查询到的数据导出到 excel中,利用excel自带的“数据透视”功 ...

  6. 使用excel 数据透视表画图

    ①    打开Excel,选中需要制表的数据,点击“插入”->“数据透视表”          ②    出现下列对话框,点击“确定”          ③    再新的“sheet”表内对“数 ...

  7. 妙用Excel数据透视表和透视图向导,将二维数据转换为一维数据

    项目中,每年都会有各种经销商的各种产品目标数据导入,经销商和产品过多,手工操作过于单调和复杂.那有没有一种方式可以将复杂的二维数据转换为一维数据呢? 有,强大的Excel就支持此功能. 常用Excel ...

  8. Excel数据透视表的日常应用技巧

    对工作表中数据进行统计是经常需要的.一般情况我们都是使用菜单命令或函数来进行数据的统计的.可是如果要统计的工作表中记录很多,而且需要统计的项目也很多时,使用这种方法就显得力不从心了.请问还有什么更好的 ...

  9. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

随机推荐

  1. 刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?_百度知道

    刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?_百度知道     刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?    2008-05-28 00:04 topofhill | ...

  2. [置顶] RFS的web自动化验收测试——常见问题指引

    引言:什么是RFS——RobotFramework+Selenium2library,本系列主要介绍web自动化验收测试方面. ( @齐涛-道长 新浪微博) 下面的内容还没整理好,先发个问题解决机制吧 ...

  3. mysql双机热备的配置步骤

    设置双机热备: 首先要在两台机器上建立同步用户: grant replication slave on *.* to 'repdcs'@'192.168.21.39' identified by '1 ...

  4. 三篇IMO的文章

    http://column.iresearch.cn/b/201411/687499.shtml?from=singlemessage&isappinstalled=1 http://colu ...

  5. php 控制页面跳转

    <?php class UserAction extends Action{ public function index(){ echo "你好!"; $m=M('user' ...

  6. VIM 用正则表达式

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  7. cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题

    ============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...

  8. 医院API免费接口的公布

    医院通网(http://hospital.yi18.net) 站点上站快两个月了,基本已经稳定,尽管还有非常多小bug,但还是不影响大局.抱着数据开放和共享的理念,医院大全API接口 (http:// ...

  9. 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品

    罗索客 发布于 2006-11-28 21:53 点击:3941次  来自: 原文: http://yuantao82.spaces.live.com/Blog/cns!8FC0A772D812A22 ...

  10. 【Demo 0004】屏幕、窗体及视图基础知识

    本章学习要点       1.  了解iOS中应用程序(UIApplication)与屏幕.窗体以及视图相关基础知识:       2.  掌握应用程序常用的属性与方法:        3.  掌握窗 ...