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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot近期公司内部在做一种通用查询报表,方便人力资源分析、统计数据。由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的,故我也打算借鉴一下。
原文: 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( 11).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的登场吧。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
32 0
|
4月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
39 1
|
24天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
2月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
|
2月前
|
存储 Java Apache
|
2月前
|
数据可视化 Python
我是如何把python获取到的数据写入Excel的?
我是如何把python获取到的数据写入Excel的?
39 2
|
2月前
|
索引 Python
Python基于Excel多列长度不定的数据怎么绘制折线图?
本文档详述了如何运用Python从CSV格式的Excel文件中读取特定范围的数据,并基于这些数据绘制多条折线图。文件的第一列代表循环增长的时间序列,后续各列包含不同属性的数据。通过指定起始与结束行数,可选取一个完整的时间循环周期内的数据进行绘图。每列数据以不同颜色和线型表示,并且图片长度会根据时间序列的长度动态调整,确保图表清晰易读。最终生成的图表将保存至指定文件夹。
|
2月前
|
关系型数据库 MySQL Windows
MySQL数据导入:MySQL 导入 Excel 文件.md
MySQL数据导入:MySQL 导入 Excel 文件.md
|
2月前
|
数据管理 数据处理 数据库
分享一个导出数据到 Excel 的解决方案
分享一个导出数据到 Excel 的解决方案
|
2月前
|
数据采集 SQL DataWorks
【颠覆想象的数据巨匠】DataWorks——远超Excel的全能数据集成与管理平台:一场电商数据蜕变之旅的大揭秘!
【8月更文挑战第7天】随着大数据技术的发展,企业对数据处理的需求日益增长。DataWorks作为阿里云提供的数据集成与管理平台,为企业提供从数据采集、清洗、加工到应用的一站式解决方案。不同于桌面级工具如Excel,DataWorks具备强大的数据处理能力和丰富的功能集,支持大规模数据处理任务。本文通过电商平台案例,展示了如何使用DataWorks构建数据处理流程,包括多源数据接入、SQL任务实现数据采集、数据清洗加工以提高质量,以及利用分析工具挖掘数据价值的过程。这不仅凸显了DataWorks在大数据处理中的核心功能与优势,还展示了其相较于传统工具的高扩展性和灵活性。
98 0
下一篇
无影云桌面