设为首页 收藏本站
查看: 657|回复: 0

[经验分享] 《Microsoft SQL Server 2008 MDX Step by Step》学习笔记八:执行聚合(下)

[复制链接]

尚未签到

发表于 2016-11-8 07:29:34 | 显示全部楼层 |阅读模式
  SQL Server 2008中SQL应用系列及BI笔记系列--目录索引

  导读:本文介绍执行聚合(Aggregation)的进阶内容,包括:
  ■1、使用Max和Min函数
  ■2、在集中对元组计数
  ■3、DistinctCount函数
  ■4、使用Generate浏览集合
  本文所用数据库和所有源码,请到微软官网下载

  
  1、求最大最小值
  与SQL类似,MDX也提供了名称相同的两个函数:Min(http://msdn.microsoft.com/zh-cn/library/ms145600.aspx)
  Max(http://msdn.microsoft.com/zh-cn/library/ms145601.aspx)
  准备一个原始例子
  例7-12
  SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{[Product].[Subcategory].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;
  
  
  下面我们增加Max函数
  例7-13
  WITH
MEMBER [Measures].[Max Sales By Subcategory] AS
Max(
{[Product].[Subcategory].[Subcategory].Members},
([Measures].[Reseller Sales Amount])
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Max Sales By Subcategory])
} ON COLUMNS,
{[Product].[Subcategory].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;
  结果如下:
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://byfiles.storage.live.com/y1p58gLj_XK-zqgtjLu0BlGLKH32_W14fSrhYIt0SpQW31rQ9-33cLCZvC5kFni-nI2O0_OxVb4eHI/2011-11-23%2016-04-46.png?psid=1
  
  进一步,我们可以再动态计算均值与最大值的比
  例7-14
  WITH
MEMBER [Measures].[Percent of Max] AS
([Measures].[Reseller Sales Amount]) /
([Measures].[Max Sales By Subcategory])
,FORMAT_STRING="Percent"
MEMBER [Measures].[Max Sales By Subcategory] AS
Max(
{[Product].[Subcategory].[Subcategory].Members},
([Measures].[Reseller Sales Amount])
)
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Percent of Max])
} ON COLUMNS,
{[Product].[Subcategory].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;

  
  
  2、在集合中对元组计数(Counting Tuples in Sets)
  与SQL类似,MDX也使用Count(http://msdn.microsoft.com/zh-cn/library/ms146026.aspx)来计数,不过Count函数的参数可以是维度、集、层次结构级别和元组(Tuple)。
  例7-15
  SELECT
{
([Measures].[Internet Sales Amount]),
([Measures].[Reseller Sales Amount])
} ON COLUMNS,
{[Product].[Product].[Product].Members} ON ROWS
FROM [Step-by-Step]
;

  注意结果中有很多null,使用Count加Exists
  例7-5
  WITH
MEMBER [Measures].[Products By Category] AS
Count(
EXISTING {[Product].[Product].[Product].Members}
)
SELECT
{([Measures].[Products By Category])} ON COLUMNS,
{[Product].[Category].Members} ON ROWS
FROM [Step-by-Step]
;
  结果:

  Count也可以进行条件过滤
  例7-17
  WITH
MEMBER [Measures].[Products] AS
Count(
EXISTING {[Product].[Product].[Product].Members}
)
MEMBER [Measures].[Reseller Products] AS
Count(
Filter(
EXISTING {[Product].[Product].[Product].Members},
([Measures].[Reseller Sales Amount]) >=
([Measures].[Internet Sales Amount])
)
)
SELECT
{
([Measures].[Products]),
([Measures].[Reseller Products])
} ON COLUMNS,
{[Product].[Category].Members} ON ROWS
FROM [Step-by-Step]
;

  加上ExcludeEmpty关键字
  例7-18
  WITH
MEMBER [Measures].[Products] AS
Count(
EXISTING {[Product].[Product].[Product].Members}
)
MEMBER [Measures].[Reseller Products] AS
Count(
Filter(
EXISTING {[Product].[Product].[Product].Members},
([Measures].[Reseller Sales Amount]) >=
([Measures].[Internet Sales Amount])
),
EXCLUDEEMPTY
)
SELECT
{
([Measures].[Products]),
([Measures].[Reseller Products])
} ON COLUMNS,
{[Product].[Category].Members} ON ROWS
FROM [Step-by-Step]
;

  注意:例7-17和7-18结果并没有什么差异,然而,这是因为EXCLUDEEMPTY标志符使用当前度量来计算集中的元组。关于当前度量的概念,有后面的表达式高级介绍中会继续学习。
  3、DistinctCount函数
  MDX也提供了一个额外的计数函数,DistinctCount(http://msdn.microsoft.com/zh-cn/library/ms146033.aspx)
  Count((Distinct{Set}),ExcludeEmpty)与DistinctCount({Set})相当
  
  4、使用Generate浏览集合
  Generate(http://msdn.microsoft.com/zh-cn/library/ms145526.aspx),其实是计算并集。
  例7-19
  WITH
MEMBER [Measures].[Products] AS
Count(
EXISTING {[Product].[Product].[Product].Members}
)
MEMBER [Measures].[Products List] AS
Generate(
EXISTING {[Product].[Product].[Product].Members},
[Product].[Product].CurrentMember.Name,
" | "
)
SELECT
{
([Measures].[Products]),
([Measures].[Products List])
} ON COLUMNS,
{[Product].[Subcategory].Members} ON ROWS
FROM [Step-by-Step]
;
  执行结果:

  小结:本文是聚合函数的进阶,介绍了Min和Max函数,Count函数与DistinctCount函数,Generate函数。
  下文将继续学习层次结构(Hierarchies)。
  参考资源:
  1、MDX官方教程(http://msdn.microsoft.com/zh-cn/library/ms145506.aspx)


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

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-297080-1-1.html 上篇帖子: 【SQL Server】存储过程的设计与概念(1)存储过程的创建、维护 下篇帖子: Sql Server如何得到数据库中所有表的列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表