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

《Microsoft SQL Server 2008 MDX Step by Step》学习笔记五:生成复杂的集合(Sets)(上)

 
阅读更多

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


导读:本文介绍集合(Sets)的进阶内容,本文将包括以下内容:

■1、组装一个有序集合

■2、应用标准来控制集合成员关系(Apply criteria to control set membership )

■3、应用集合逻辑和高级的集合生成技术。

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


1、组装有序集合

打开MDX查询编辑器,如下:

例6-1

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{[Product].[Product].[Product].Members} ON ROWS
FROM [Step-by-Step]
;

查询结果:

我们修改排序,如下:

例6-2

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Order(
{[Product].[Product].[Product].Members},
([Measures].[Reseller Sales Amount]),
DESC
) ON ROWS
FROM [Step-by-Step]
;

注意排序字段,这里使用了Order函数(http://msdn.microsoft.com/zh-cn/library/ms145587.aspx)。

例6-3

SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Internet Sales Amount])
} ON COLUMNS,
Order(
{[Product].[Product].[Product].Members},
VBAMDX!ABS(
([Measures].[Reseller Sales Amount]) -
([Measures].[Internet Sales Amount])
),
DESC
) ON ROWS
FROM [Step-by-Step]
;

注意,我们使用了上一节提到的VBA函数,结果以两列之差的绝对值为排序依据。

注意:使用Order还可以突破分层限制。

例6-4

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{[Product].[Subcategory].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;

例6-5

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{[Product].[Category].[Category].Members} *
{[Product].[Subcategory].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;

再进一步,看一个双排序的例子

例6-6

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Order(
{[Product].[Category].[Category].Members} *
{[Product].[Subcategory].[Subcategory].Members}
,
([Measures].[Reseller Sales Amount]),
DESC
) ON ROWS
FROM [Step-by-Step]
;

在上面的查询中,交叉联接使用默认排序,而且后面指定了([Measures].[Reseller Sales Amount])排序,但是大家注意到没有,这一列并没有按照指定的数值排序,为什么呢?因为默认的ASC和DESC是分层的(hierarchical),换句话说,这些元组的前一个成员的排序被保留了。为了打乱这个层次结构,可以使用BASC和BDESC(http://msdn.microsoft.com/zh-cn/library/ms145587(v=SQL.105))。

例6-7

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Order(
{[Product].[Category].[Category].Members} *
{[Product].[Subcategory].[Subcategory].Members},
([Measures].[Reseller Sales Amount]),
BDESC
) ON ROWS
FROM [Step-by-Step]
;

OK!这下消停了。^_^

顺便,我们提一下Hierarchize函数(http://msdn.microsoft.com/zh-cn/library/ms145981.aspx),该函数可以按层次结构的顺序组织指定集中的成员,返回集的有效多维表达式 (MDX)。。

我们看一个例子

例6-8

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Hierarchize(
{
([Product].[Product Categories].[Subcategory].[Road Bikes]),
([Product].[Product Categories].[All Products]),
([Product].[Product Categories].[Subcategory].[Mountain Bikes]),
([Product].[Product Categories].[Category].[Bikes]),
([Product].[Product Categories].[Subcategory].[Touring Bikes])
}
) ON ROWS
FROM [Step-by-Step]
;

如果定义POST标志,则 Hierarchize 函数按非自然顺序对一定级别的成员进行排序。 也就是说,子成员优先于他们的父级。

例6-9

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Hierarchize(
{
([Product].[Product Categories].[Subcategory].[Road Bikes]),
([Product].[Product Categories].[All Products]),
([Product].[Product Categories].[Subcategory].[Mountain Bikes]),
([Product].[Product Categories].[Category].[Bikes]),
([Product].[Product Categories].[Subcategory].[Touring Bikes])
},
POST
) ON ROWS
FROM [Step-by-Step]
;

注意到排序规则了么?如果没有观察出来,请留言或联系我,3w@live.cn,呵呵。

范围操作符:包含一个默认的排序

例6-10

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

;

/*
Reseller Sales Amount
CY 2001 $8,065,435.31
CY 2002 $24,144,429.65
CY 2003 $32,202,669.43
CY 2004 $16,038,062.60

*/

2、检索一个集合的最后一个或第一个元组

我们用到两个函数TopCount(http://msdn.microsoft.com/zh-cn/library/ms144792.aspx)和BottomCount(http://msdn.microsoft.com/zh-cn/library/ms144864.aspx

注意:这两个函数总是会打乱层次结构。

例6-11

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


/*
Reseller Sales Amount
Road Bikes $29,358,206.96
Mountain Bikes $26,492,684.38
Touring Bikes $10,451,490.22
Mountain Frames $4,713,672.15
Road Frames $3,849,853.34
*/

注意,未指定顺序时,默认按升序排列。

Head函数(http://msdn.microsoft.com/zh-cn/library/ms144859(v=SQL.105)),返回集中位置靠前的指定数目的元素,同时保留重复项。Head 函数从指定集的开始处返回指定的元组数目。并保留元素的顺序。Count 的默认值为 1。如果指定的元组数目小于 1,则 Head 函数返回空集。如果指定的元组数目超过了集中的元组数目,则此函数返回原始集。

Tail函数(http://msdn.microsoft.com/zh-cn/library/ms146056.aspx),Tail 函数从指定集的结尾处返回指定的元组数目。 会保留元素的顺序。 Count 的默认值为 1。如果指定的元组数目小于 1,则该函数返回空集。 如果指定的元组数目超过了集中的元组数目,则此函数返回原始集。

例6-12

SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Tail(
Order(
{[Product].[Subcategory].[Subcategory].Members},
([Measures].[Reseller Sales Amount]),
BDESC
),
5
) ON ROWS
FROM [Step-by-Step]
;

/*
Reseller Sales Amount
Tires and Tubes $925.21
Bike Stands (null)
Fenders (null)
Lights (null)
Panniers (null)
*/

Item函数(http://msdn.microsoft.com/zh-cn/library/ms145501.aspx),下面,我们看一个比较复杂的例子

例6-13

WITH
MEMBER [Measures].[Top Product Sales] AS
{
EXISTING
TopCount(
[Product].[Product].[Product].Members,
1,
([Measures].[Internet Sales Amount])
) *
{[Measures].[Internet Sales Amount]}
}.Item(0)
,FORMAT_STRING="Currency"
MEMBER [Measures].[Top Product Name] AS
{
EXISTING
TopCount(
[Product].[Product].[Product].Members,
1,
([Measures].[Internet Sales Amount])
)
}.Item(0).Item(0).Name
SELECT
{
([Measures].[Internet Sales Amount]),
([Measures].[Top Product Sales]),
([Measures].[Top Product Name])
} ON COLUMNS,
{
([Date].[Calendar Year].[CY 2001]),
([Date].[Calendar Year].[CY 2002]),
([Date].[Calendar Year].[CY 2003]),
([Date].[Calendar Year].[CY 2004])
} ON ROWS
FROM [Step-by-Step]
;

上例中综合运用了本节和上节的几个常用函数,大家可以自行分析。

小结:本文是集合(Sets)的进阶,介绍了几个常用的排序函数,下文继续介绍过滤集合和组合集合,以及一些高级的技巧。

参考资源:

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, ...

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

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

    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....

    MDX step by step CD

    通过"MDX step by step"教程,读者将逐步学习如何构建这些查询,理解如何在多维环境中提取、分析和展示数据。书中每章的示例会帮助读者加深对MDX语法的理解,通过实际操作来探索不同场景下的应用。例如,可能有练习...

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

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

    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的核心管理知识,...

    sql server2008文档教程

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

    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...

    Microsoft SQL Server 2012 Analysis Services 高级教程 pdf

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

    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, ...

Global site tag (gtag.js) - Google Analytics