2011-01-07 102 views
1

我一直在努力学习SSAS多维数据集和MDX。到目前为止,我已经设法创建了一个多维数据集,在通过多维数据集浏览器查看时返回正确的数据/帮助了解OLAP MDX查询

查询生成器,使用了报告服务查询立方体构建查询,我看了这个生成的MDX掏出似乎没有做出实际结果差异的东西。查询看起来是这样的:

SELECT NON EMPTY { [Measures].[AverageConnectedSeconds] } ON COLUMNS,  
NON EMPTY { ([Operator].[ACCESS DEF].[ACCESS DEF].ALLMEMBERS * [Calls].[Notification Time Bands].[Notification Time Bands].ALLMEMBERS) } ON ROWS  
FROM (SELECT (-{ [Calls].[Notification Time Bands].&[0] }) ON COLUMNS  
FROM (SELECT ({ [Calls].[Incoming YN].[N] }) ON COLUMNS  
FROM (SELECT (-{ [Calls].[Entity Type].&[6] }) ON COLUMNS 
FROM (SELECT (-{ [Calls].[Reason Text].&[Background Call] }) ON COLUMNS  
FROM (SELECT ({ STRTOMEMBER(@OperatorId) }) ON COLUMNS 
FROM [PNC5data]))))) 

我的语法读了,我THINK我明白为什么查询正在进行嵌套选择。 我是否理解嵌套的SELECT FROM在SQL中充当WHERE子句?

如果是这样的:在MDX是用来做什么的WHERE子句和时/我为什么要使用它?

如果有人能够给我什么在此查询我真的很感激它是实际发生故障!或者,如果您能够将我引导至资源,我可以进一步了解MDX,我会非常感激!

感谢,

詹姆斯

回答

5

了解WHERE子句非常简单。你会在很多来源看到人们抱怨它的误导性名称。使用更好的名称是切片机。通过使用where子句,您可以查询多维数据集的切片而不是整个多维数据集(显然,当您查询切片而不是整个多维数据集时,会获得一些性能提升)。

FROM子句用于查询一个立方体查询另一个MDX查询即子查询。子查询通常比较慢,但功能也更强大。例如当你使用层次结构作为切片器时,你不能在一个轴上使用它,而你可以使用子查询。子查询可以改变层次结构。

在上面的语句中,你看到嵌套子查询。如果你知道一些MDX语法,很容易打破和解释每个子查询,甚至将一些子查询移到切片器。

我是比较新的全OLAP题目太大。我一直在使用的两个来源是:icCube MDX reference(我不是微软的粉丝,icCube是一个很好,易用的替代品)和Fast Track to MDX。我特别喜欢对MDX进行快速跟踪,因为它很容易遵循基本MDX功能和术语(如集合,元组,功能等)的说明,特别是如果您使用的是Microsoft BI工具。你也可以看看this post

+0

绝对非常重要的一点是,SQL中的WHERE不同于MDX中的WHERE。 – 2011-02-07 13:16:03