`
netxdiy
  • 浏览: 728233 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《Microsoft SQL Server 2008 MDX Step by Step》学习笔记七:执行聚合(上)

 
阅读更多

SQL Server 2008中SQL应用系列及BI笔记系列--目录索引

导读:本文介绍执行聚合(Aggregation)的进阶内容,包括:

■1、用Sum和Aggregation执行求和

■2、用Avg函数计算均值

■3、用表达式计算均值

■4、用Stedv计算标准偏差

本文所用数据库和所有源码,请到微软官网下载

1、执行求和

MDX的聚合函数:Aggregationhttp://msdn.microsoft.com/zh-cn/library/ms145524.aspx

求和还有一个函数:Sum(http://msdn.microsoft.com/zh-cn/library/ms145484.aspx

我们依旧从一个最简单的例子看起

例7-1

SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Transaction Count]),
([Measures].[Reseller Order Count])
} ON COLUMNS,
TopCount(
{[Product].[Subcategory].[Subcategory].Members},
5,
([Measures].[Reseller Sales Amount])
) +
{([Product].[Subcategory].[All Products])} ON ROWS
FROM [Step-by-Step]
;

需要说明的是:上例中,[Reseller Sales Amount]代表这个表中Sales Amount字段的数量,[Reseller Transaction Count]代表底层事实表数据记录的数值,[Reseller Order Count]代表底层事实表的订单数。

查询结果如下:

邀月工作室

下面我们增加对subcategory进行TopCount 5 求和

例7-2

WITH
MEMBER [Product].[Subcategory].[Top 5] AS
Sum(
TopCount(
[Product].[Subcategory].[Subcategory].Members,
5,
([Measures].[Reseller Sales Amount])
),
([Measures].CurrentMember)
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Transaction Count]),
([Measures].[Reseller Order Count])
} ON COLUMNS,
TopCount(
[Product].[Subcategory].[Subcategory].Members,
5,
([Measures].[Reseller Sales Amount])
) +
{
([Product].[Subcategory].[Top 5]),
([Product].[Subcategory].[All Products])
} ON ROWS
FROM [Step-by-Step]
;

结果如下:
邀月工作室

前两列是累加的,因而没有问题,最后一列Reseller Order Count不是从五个分类中累加的,而是对所有产品中的子分类的订单进行汇总。很显然,这不是我们想要的结果,此时,我们需要借助于Aggregation函数

例7-3

WITH
MEMBER [Product].[Subcategory].[Top 5] AS
Aggregate(
TopCount(
[Product].[Subcategory].[Subcategory].Members,
5,
([Measures].[Reseller Sales Amount])
),
([Measures].CurrentMember)
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Transaction Count]),
([Measures].[Reseller Order Count])
} ON COLUMNS,
TopCount(
[Product].[Subcategory].[Subcategory].Members,
5,
([Measures].[Reseller Sales Amount])
) +
{
([Product].[Subcategory].[Top 5]),
([Product].[Subcategory].[All Products])
} ON ROWS
FROM [Step-by-Step]
;

邀月工作室

Tips:在求和时,我们通常应该使用Aggregion,而非Sum。当然,这并非绝对。

2、用AVG函数计算均值

MDX中的求均值函数为Avg(http://msdn.microsoft.com/zh-cn/library/ms146067.aspx

我们还是从一个最简单的例子入手:

例7-4

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
} ON ROWS
FROM [Step-by-Step]
;

邀月工作室

下面我们求均值

例7-5

WITH
MEMBER [Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales] AS
Avg(
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
},
[Measures].CurrentMember
)
SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{([Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales])} +
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
} ON ROWS
FROM [Step-by-Step]
;

结果:

邀月工作室

加上季度数据

例7-6

WITH
MEMBER [Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales] AS
Avg(
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
},
[Measures].CurrentMember
)
SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{([Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales])} +
Hierarchize(
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
} +
{
[Date].[Calendar].[Calendar Quarter].[Q1 CY 2003]:
[Date].[Calendar].[Calendar Quarter].[Q4 CY 2003]
}
) ON ROWS
FROM [Step-by-Step]
;

邀月工作室

加上季度平均:

例7-7

WITH
MEMBER [Date].[Calendar].[CY 2003 Quarterly Avg Reseller Sales] AS
Avg(
{
[Date].[Calendar].[Calendar Quarter].[Q1 CY 2003]:
[Date].[Calendar].[Calendar Quarter].[Q4 CY 2003]
},
[Measures].CurrentMember
)
MEMBER [Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales] AS
Avg(
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
},
[Measures].CurrentMember
)
SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{
([Date].[Calendar].[CY 2003 Monthly Avg Reseller Sales]),
([Date].[Calendar].[CY 2003 Quarterly Avg Reseller Sales])
} +
Hierarchize(
{
[Date].[Calendar].[Month].[January 2003]:
[Date].[Calendar].[Month].[December 2003]
} +
{
[Date].[Calendar].[Calendar Quarter].[Q1 CY 2003]:
[Date].[Calendar].[Calendar Quarter].[Q4 CY 2003]
}
) ON ROWS
FROM [Step-by-Step]
;

注意:AVG是一个静态函数,那么,如果是动态的表达式求均值,用什么方法?

3、用表达式计算均值

例7-8

SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Order Count])
} ON COLUMNS,
{
[Date].[Calendar Year].[CY 2001]:
[Date].[Calendar Year].[CY 2004]
} ON ROWS
FROM [Step-by-Step]
;

邀月工作室

下面我们加上每年的月均值,这是动态计算的:

例7-9

WITH
MEMBER [Measures].[Monthly Avg Reseller Sales Amount] AS
Avg(
EXISTING [Date].[Calendar].[Month].Members,
[Measures].[Reseller Sales Amount]
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Order Count]),
([Measures].[Monthly Avg Reseller Sales Amount])
} ON COLUMNS,
{
[Date].[Calendar Year].[CY 2001]:
[Date].[Calendar Year].[CY 2004]
} ON ROWS
FROM [Step-by-Step]
;

邀月工作室

下面我们再加上每年的每个订单的销售均值,这也是动态计算的:

例7-10

WITH
MEMBER [Measures].[Average Reseller Sales Amount] AS
([Measures].[Reseller Sales Amount]) / ([Measures].[Reseller Order Count])
,FORMAT_STRING="Currency"
MEMBER [Measures].[Monthly Avg Reseller Sales Amount] AS
Avg(
EXISTING [Date].[Calendar].[Month].Members,
[Measures].[Reseller Sales Amount]
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Reseller Order Count]),
([Measures].[Monthly Avg Reseller Sales Amount]),
([Average Reseller Sales Amount])
} ON COLUMNS,
{
[Date].[Calendar Year].[CY 2001]:
[Date].[Calendar Year].[CY 2004]
} ON ROWS
FROM [Step-by-Step]
;

4、计算标准偏差

MDX使用函数Stdev(http://msdn.microsoft.com/zh-cn/library/ms146068.aspx),来计算标准差,它使用无偏差总体公式,而

对应地,StdevP 函数(http://msdn.microsoft.com/zh-cn/library/ms146019.aspx)使用有偏差总体公式。

看一个复杂点的例子:

例7-11

WITH
MEMBER [Measures].[Average Reseller Sales Amount] AS
([Measures].[Reseller Sales Amount])/ ([Measures].[Reseller Transaction Count])
,FORMAT_STRING="Currency"
MEMBER [Measures].[Variance Reseller Sales Amount] AS
(
([Measures].[Squared Reseller Sales Amount]) /
(([Measures].[Reseller Transaction Count])-1)
) -
(([Measures].[Average Reseller Sales Amount])^2)
,FORMAT_STRING="Currency"
MEMBER [Measures].[StDev Reseller Sales Amount] AS
([Measures].[Variance Reseller Sales Amount])^(0.5)
,FORMAT_STRING="Currency"
SELECT
{
([Measures].[Average Reseller Sales Amount]),
([Measures].[Variance Reseller Sales Amount]),
([Measures].[StDev Reseller Sales Amount])
} ON COLUMNS,
{
[Date].[Calendar Year].[CY 2001]:
[Date].[Calendar Year].[CY 2004]
} ON ROWS
FROM [Step-by-Step]
;

注意:本例中Squared Reseller Sales Amount度量调用一个命名计算

邀月工作室

执行结果:

邀月工作室

小结:本文是聚合函数的进阶,介绍了Aggregation与Sum函数的细微区别,用AVG求静态均值和用表达式求动态均值,还有一个计算标准偏差的函数Stdev。

下文将继续学习Min和Max函数及其他聚合相关功能。

参考资源:

1、MDX官方教程(http://msdn.microsoft.com/zh-cn/library/ms145506.aspx


邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
助人等于自助!
3w@live.cn

分享到:
评论

相关推荐

    Microsoft SQL Server 2008 MDX Step by Step Feb 2009

    ### Microsoft SQL Server 2008 MDX Step by Step (Feb 2009) #### 知识点一:Multidimensional Expressions (MDX) 基础 **Multidimensional Expressions (MDX)** 是一种用于查询多维数据集的语言。MDX 提供了一种...

    Microsoft SQL Server 2008 Analysis Services Step by Step 随书光盘

    《Microsoft SQL Server 2008 Analysis Services Step by Step》随书光盘包含了大量实践性的文件,旨在帮助读者深入理解并掌握SQL Server 2008的Analysis Services(简称SSAS)这一强大的数据仓库和商务智能工具。...

    Microsoft+SQL+Server+2008+MDX+Step+by+Step

    《Microsoft SQL Server 2008 MDX Step by Step》是一本专为SQL Server数据库管理员、数据分析师和开发人员设计的教程,旨在深入探讨多维表达式(Multidimensional Expressions,简称MDX)在SQL Server 2008中的应用...

    Microsoft SQL Server2005 Analysis Step by Step

    Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...

    SQL-Server-2008---Step-by-Step.rar_SQL SERVER 2008_step by step

    《SQL Server 2008 Step by Step》是微软出版社发布的一本针对SQL Server 2008的全面教程,适合初学者和有一定基础的数据库管理员。这本书通过逐步指导的方式,帮助读者掌握SQL Server 2008的核心功能和操作技巧。 ...

    Microsoft.Press.Microsoft.SQL.Server.2008.MDX.Step.by.Step.Feb.2009.rar

    《Microsoft SQL Server 2008 MDX 步步为营》是微软出版社于2009年2月推出的一本专门针对SQL Server 2008中的多维表达式(Multidimensional Expressions,简称MDX)技术的实战指南。这本书详细介绍了如何在SQL ...

    Microsoft SQL Server 2005 Analysis Services Step by Step

    Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...

    SQL Server 2005 BI系列课程(7):MDX解决方案

    7. **工具支持**:了解如何在Microsoft Excel和SQL Server Management Studio(SSMS)中使用MDX,以及如何配合Power Pivot等工具进行更高级的数据分析。 提供的资源,如PPT、视频和文档,将为学习者提供丰富的交互...

    Professional SQL Server 2012 Analysis Services with MDX and DAX part2

    This title serves as an authoritative guide to Microsofts new "SQL Server 2012 Analysis Services" BI product and is written by key members of the Microsoft Analysis Services product development team....

    Microsoft SQL Server 2008 分析服务从入门到精通(全套资料)

    电子书《Microsoft SQL Server 2008 Analysis Services Step by Step》很可能是逐步教程,涵盖了从安装配置到实际操作的整个过程。书中可能涉及以下内容: 1. **安装与配置**:如何在服务器上安装SQL Server 2008,...

    SQL_Server_SSAS_MDX_翻译资料

    它起源于微软在1998年的SQL Server Analysis Services 7.0版本,现在已经成为一个标准化的语言,被其他OLAP(在线分析处理)供应商如Microstrategy Intelligence Server、Hyperion Essbase Server和SAS的Enterprise ...

    精通微软SQLServer2008管理.rar

    《精通微软SQL Server 2008管理》 在IT领域,数据库管理是不可或缺的一环,而微软的SQL Server 2008作为一款广泛使用的数据库管理系统,深受企业和开发者的青睐。本文将深入探讨SQL Server 2008的核心管理知识,...

    Microsoft SQL Server 2012 Analysis Services 高级教程 pdf

    《Microsoft SQL Server 2012 Analysis Services 高级教程》是针对数据库管理员、数据分析师以及IT专业人士的一本深入指南,旨在帮助读者掌握SQL Server 2012中的Analysis Services(简称SSAS)的各项高级功能。...

    Practical MDX Queries: For Microsoft SQL Server Analysis Services 2008 PDF

    "Practical DMX Queries for Microsoft SQL Server Analysis Services 2008" contains more than 250 downloadable DMX queries you can use to extract and visualize data. The application, syntax, and results...

    sql server2008文档教程

    SQL Server 2008是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面表现出色。这款教程适用于初学者,旨在帮助用户掌握SQL Server 2008的基础知识和核心功能。 一、SQL Server 2008...

    Microsoft SQL Server2005 Analysis Services Step by Step

    Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...

    SQL Server 2005 Analysis Services Step by Step

    ### SQL Server 2005 Analysis Services Step by Step #### 概述 SQL Server 2005 Analysis Services (SSAS) 是一个强大的商业智能工具,用于构建多维数据集和数据挖掘模型。本书旨在为用户提供一个逐步指南,帮助...

Global site tag (gtag.js) - Google Analytics