Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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

导读:本文介绍MDX查询的基础内容,已经了解的读者可以直接略过。

本文将包括以下内容:

■1、使用MDX查询编辑器构建并执行MDX查询。

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

 

1、SQL查询与MDX查询示例比较

在MdxStepByStep数据库中(后缀名为.SQL)查询

[ruby] view plain copy print ?
  1. USE MdxStepByStep  
  2. SELECT  
  3. m.EnglishProductName, o.TotalSalesAmount  
  4. FROM dbo.DimProduct m  
  5. INNER JOIN ( -- TOP 10 PRODUCTS OF 2003  
  6. SELECT TOP 10  
  7. a.ProductKey, SUM(a.SalesAmount) AS TotalSalesAmount  
  8. FROM (  
  9. SELECT  
  10. x.productkey, x.salesamount  
  11. FROM dbo.FactInternetSales x  
  12. INNER JOIN dbo.DimDate y  
  13. ON x.OrderDateKey=y.DateKey  
  14. WHERE y.CalendarYear=2003  
  15. UNION ALL  
  16. SELECT  
  17. x.productkey, x.salesamount  
  18. FROM dbo.FactResellerSales x  
  19. INNER JOIN dbo.DimDate y  
  20. ON x.OrderDateKey=y.DateKey  
  21. WHERE y.CalendarYear=2003  
  22. ) a  
  23. GROUP BY a.ProductKey  
  24. ORDER BY TotalSalesAmount DESC  
  25. ) n  
  26. ON m.ProductKey=n.ProductKey  
  27. LEFT OUTER JOIN ( --PRODUCT SALES IN 2004  
  28. SELECT  
  29. a.ProductKey, SUM(a.SalesAmount) AS TotalSalesAmount  
  30. FROM (  
  31. SELECT  
  32. x.productkey, x.salesamount  
  33. FROM dbo.FactInternetSales x  
  34. INNER JOIN dbo.DimDate y  
  35. ON x.OrderDateKey=y.DateKey  
  36. WHERE y.CalendarYear=2004  
  37. UNION ALL  
  38. SELECT  
  39. x.productkey, x.salesamount  
  40. FROM dbo.FactResellerSales x  
  41. INNER JOIN dbo.DimDate y  
  42. ON x.OrderDateKey=y.DateKey  
  43. WHERE y.CalendarYear=2004  
  44. ) a  
  45. GROUP BY a.ProductKey  
  46. ) o  
  47. ON m.ProductKey=o.productkey  
  48. ORDER BY n.TotalSalesAmount DESC  
  49. /*  
  50. EnglishProductName TotalSalesAmount  
  51. Mountain-200 Black, 38 1327957.4077  
  52. Mountain-200 Black, 42 1139429.4872  
  53. Mountain-200 Silver, 38 1136622.4928  
  54. Mountain-200 Black, 46 1011074.3685  
  55. Mountain-200 Black, 38 NULL  
  56. Mountain-200 Silver, 42 1011486.1762  
  57. Touring-1000 Blue, 60 835290.1559  
  58. Road-350-W Yellow, 48 897217.9635  
  59. Mountain-200 Silver, 46 1029170.7639  
  60. Road-350-W Yellow, 40 840970.6467  
  61. */   
USE MdxStepByStepSELECTm.EnglishProductName, o.TotalSalesAmountFROM dbo.DimProduct mINNER JOIN ( -- TOP 10 PRODUCTS OF 2003SELECT TOP 10a.ProductKey, SUM(a.SalesAmount) AS TotalSalesAmountFROM (SELECTx.productkey, x.salesamountFROM dbo.FactInternetSales xINNER JOIN dbo.DimDate yON x.OrderDateKey=y.DateKeyWHERE y.CalendarYear=2003UNION ALLSELECTx.productkey, x.salesamountFROM dbo.FactResellerSales xINNER JOIN dbo.DimDate yON x.OrderDateKey=y.DateKeyWHERE y.CalendarYear=2003) aGROUP BY a.ProductKeyORDER BY TotalSalesAmount DESC) nON m.ProductKey=n.ProductKeyLEFT OUTER JOIN ( --PRODUCT SALES IN 2004SELECTa.ProductKey, SUM(a.SalesAmount) AS TotalSalesAmountFROM (SELECTx.productkey, x.salesamountFROM dbo.FactInternetSales xINNER JOIN dbo.DimDate yON x.OrderDateKey=y.DateKeyWHERE y.CalendarYear=2004UNION ALLSELECTx.productkey, x.salesamountFROM dbo.FactResellerSales xINNER JOIN dbo.DimDate yON x.OrderDateKey=y.DateKeyWHERE y.CalendarYear=2004) aGROUP BY a.ProductKey) oON m.ProductKey=o.productkeyORDER BY n.TotalSalesAmount DESC/*EnglishProductName TotalSalesAmountMountain-200 Black, 38 1327957.4077Mountain-200 Black, 42 1139429.4872Mountain-200 Silver, 38 1136622.4928Mountain-200 Black, 46 1011074.3685Mountain-200 Black, 38 NULLMountain-200 Silver, 42 1011486.1762Touring-1000 Blue, 60 835290.1559Road-350-W Yellow, 48 897217.9635Mountain-200 Silver, 46 1029170.7639Road-350-W Yellow, 40 840970.6467*/

而在维度数据库中对应的MDX查询(后缀名为.MDX)如下:

[ruby] view plain copy print ?
  1. WITH  
  2. MEMBER [Measures].[Total Sales Amount] AS  
  3. ([Measures].[Internet Sales Amount]) + ([Measures].[Reseller Sales Amount])  
  4. SET [Top 10 Products of 2003] AS  
  5. TOPCOUNT(  
  6. {[Product].[Product].[Product].Members},  
  7. 10,  
  8. ([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003])  
  9. )  
  10. SELECT  
  11. {([Measures].[Total Sales Amount])} ON COLUMNS,  
  12. {[Top 10 Products of 2003]} ON ROWS  
  13. FROM [Step-by-Step]  
  14. WHERE ([Date].[Calendar Year].[CY 2004])  
  15. ;  
  16. /*  
  17. Total Sales Amount  
  18. Mountain-200 Black, 38 $1,327,957.41  
  19. Mountain-200 Black, 42 $1,139,429.49  
  20. Mountain-200 Silver, 38 $1,136,622.49  
  21. Mountain-200 Black, 46 $1,011,074.37  
  22. Mountain-200 Black, 38 (null)  
  23. Mountain-200 Silver, 42 $1,011,486.18  
  24. Touring-1000 Blue, 60 $835,290.16  
  25. Road-350-W Yellow, 48 $897,217.96  
  26. Mountain-200 Silver, 46 $1,029,170.76  
  27. Road-350-W Yellow, 40 $840,970.65  
  28. */   
WITHMEMBER [Measures].[Total Sales Amount] AS([Measures].[Internet Sales Amount]) + ([Measures].[Reseller Sales Amount])SET [Top 10 Products of 2003] ASTOPCOUNT({[Product].[Product].[Product].Members},10,([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003]))SELECT{([Measures].[Total Sales Amount])} ON COLUMNS,{[Top 10 Products of 2003]} ON ROWSFROM [Step-by-Step]WHERE ([Date].[Calendar Year].[CY 2004]);/*Total Sales AmountMountain-200 Black, 38 $1,327,957.41Mountain-200 Black, 42 $1,139,429.49Mountain-200 Silver, 38 $1,136,622.49Mountain-200 Black, 46 $1,011,074.37Mountain-200 Black, 38 (null)Mountain-200 Silver, 42 $1,011,486.18Touring-1000 Blue, 60 $835,290.16Road-350-W Yellow, 48 $897,217.96Mountain-200 Silver, 46 $1,029,170.76Road-350-W Yellow, 40 $840,970.65*/

从上面的这个例子我们领略了SQL与MDX语法的大致区别。

2、用MDX查询编辑器实现一个最简单的MDX的编写。

在SSMS界面登录Analysis Services,选择MDX Step By Step数据库:

对于MDX新手来说,最令人鼓舞的莫过于大部分MDX查询都可以借助拖拽来实现。

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第1张图片

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第2张图片

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第3张图片

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第4张图片

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第5张图片

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第6张图片

大家可以参考以下的MDX脚本完成本文开始提供的MDX查询。

[ruby] view plain copy print ?
  1. WITH  
  2. MEMBER [Measures].[Total Sales Amount] AS  
  3. [Measures].[Internet Sales Amount]  
  4. SELECT  
  5. FROM [Step-by-Step]  
  6. WHERE [Date].[Calendar Year].&[2004]  
  7. ;  
  8. WITH  
  9. MEMBER [Measures].[Total Sales Amount] AS  
  10. [Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]  
  11. SELECT  
  12. FROM [Step-by-Step]  
  13. WHERE [Date].[Calendar Year].&[2004]  
  14. ;  
  15. WITH  
  16. MEMBER [Measures].[Total Sales Amount] AS  
  17. [Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]  
  18. SET [Top 10 Products of 2003] AS  
  19. TOPCOUNT( [Product].[Product],10)  
  20. SELECT  
  21. FROM [Step-by-Step]  
  22. WHERE [Date].[Calendar Year].&[2004]  
  23. ;  
  24. WITH  
  25. MEMBER [Measures].[Total Sales Amount] AS  
  26. [Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]  
  27. SET [Top 10 Products of 2003] AS  
  28. TOPCOUNT( [Product].[Product].[Product].Members, 10,  
  29. ([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003]))  
  30. SELECT  
  31. FROM [Step-by-Step]  
  32. WHERE [Date].[Calendar Year].&[2004]  
  33. ;  
  34. WITH  
  35. MEMBER [Measures].[Total Sales Amount] AS  
  36. [Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]  
  37. SET [Top 10 Products of 2003] AS  
  38. TOPCOUNT( [Product].[Product].[Product].Members, 10,  
  39. ([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003]))  
  40. SELECT  
  41. {([Measures].[Total Sales Amount])} ON COLUMNS,  
  42. {[Top 10 Products of 2003]} ON ROWS  
  43. FROM [Step-by-Step]  
  44. WHERE [Date].[Calendar Year].&[2004]  
  45. ;  
WITHMEMBER [Measures].[Total Sales Amount] AS[Measures].[Internet Sales Amount]SELECTFROM [Step-by-Step]WHERE [Date].[Calendar Year].&[2004];WITHMEMBER [Measures].[Total Sales Amount] AS[Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]SELECTFROM [Step-by-Step]WHERE [Date].[Calendar Year].&[2004];WITHMEMBER [Measures].[Total Sales Amount] AS[Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]SET [Top 10 Products of 2003] ASTOPCOUNT( [Product].[Product],10)SELECTFROM [Step-by-Step]WHERE [Date].[Calendar Year].&[2004];WITHMEMBER [Measures].[Total Sales Amount] AS[Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]SET [Top 10 Products of 2003] ASTOPCOUNT( [Product].[Product].[Product].Members, 10,([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003]))SELECTFROM [Step-by-Step]WHERE [Date].[Calendar Year].&[2004];WITHMEMBER [Measures].[Total Sales Amount] AS[Measures].[Internet Sales Amount]+[Measures].[Reseller Sales Amount]SET [Top 10 Products of 2003] ASTOPCOUNT( [Product].[Product].[Product].Members, 10,([Measures].[Total Sales Amount], [Date].[Calendar Year].[CY 2003]))SELECT{([Measures].[Total Sales Amount])} ON COLUMNS,{[Top 10 Products of 2003]} ON ROWSFROM [Step-by-Step]WHERE [Date].[Calendar Year].&[2004];

参考资源:

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

邀月注:鉴于读者提出意见,本系列尽量简明,方便读者阅读。

邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
助人等于自助! 
[email protected] 

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课_第7张图片

你可能感兴趣的:(Microsoft SQL Server 2008 MDX Step by Step 学习笔记一 MDX查询第一课)