1

我一直在尝试学习 SSAS Cubes 和 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] )))))

我已经阅读了语法,我认为我理解为什么查询会进行嵌套选择。我是否理解嵌套的 SELECT FROM 充当 SQL 中的 WHERE 子句?

如果是这样:MDX 中使用的 WHERE 子句是什么?何时/为什么要使用它?

如果有人能够给我详细说明此查询中实际发生的情况,我将不胜感激!或者,如果您能够将我引导到可以进一步了解 MDX 的资源,我将非常感激!

谢谢,

詹姆士

4

2 回答 2

5

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

FROM 子句用于查询多维数据集查询另一个 MDX 查询,即子查询。子查询通常较慢,但也更强大。例如,当您将层次结构用作切片器时,您不能在轴中使用它,而使用子查询可以,例如子查询可以更改层次结构的结构。

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

我对整个 OLAP 主题也比较陌生。我一直在使用的两个来源是:icCube MDX 参考(我不是微软的粉丝,icCube 是一个很好的、易于使用的替代品)和Fast Track to MDX。我特别喜欢 MDX 的快速通道,因为它对基本 MDX 功能和术语(如集合、元组、函数等)的解释很容易理解,特别是如果您使用的是 Microsoft BI 工具。你可能也想看看这篇文章

于 2011-01-07T13:10:08.460 回答
0

我之前发布了一个指向我的 MDX 介绍的链接,它很受欢迎,但是在这篇文章中还有许多其他好的资源。 网上最好的 mdx 参考资料

于 2011-02-07T13:15:27.777 回答