【发布时间】:2016-06-03 02:29:23
【问题描述】:
我有一个关于 MDX 元组的问题,我想了解一些让我感到困惑的事情。
我读过的大多数文献都谈到元组是一组坐标,基本上指向一个包含度量值的单元格。据我了解,元组被定义为每个维度仅包含一个不同的成员。通常,在编写查询时,我们不会为每个维度指定每个成员,而是让 SSAS 引擎使用默认成员并相应地聚合度量数据。
直出冒险作品样本OLAP数据库(立方体)《冒险作品》
我理解的一个超级简单的查询代表一个元组:
SELECT
([Date].[Calendar Quarter of Year].&[CY Q3],[Measures].[Sales Amount]) --Tuple
ON COLUMNS
FROM [Adventure Works]
SS Management studio 返回此结果
这里没有问题,&[CY Q3] 成员指定的元组指向包含显示的度量值的单元格。显然已经返回了一个元组。
虽然我经常使用这种东西:
select
non empty ([Date].[Calendar].[Calendar Quarter],[Measures].[Sales Amount]) --Tuple??
ON COLUMNS
FROM [Adventure Works]
它返回所述度量的所有年份的所有季度总计(不是一个很好的例子,但它只是一个例子):
我将此结果视为一个集合,因为从同一维度(日期)返回了多个不同的成员。事实上,默认情况下所有成员都被返回,如果是这样,它怎么可能是一个元组?
所以我的问题是这样的。上面查询中“元组”周围的括号向我表明我正在选择一个元组,查询引擎处理并返回一个结果,这对我来说看起来像一个集合,不是因为返回了多个单元格值,而是因为已经使用了不止一个日期维度的成员。
查询表明正在选择一个元组,并且查询引擎似乎接受它作为一个,但是结果集包括来自同一维度的多个成员和相应的单元格值,向我表明将返回多个元组--> 设置。
此外,当我将查询引擎视为集合并在其上使用集合函数时,查询引擎不会引发错误:
select
nonempty({([Date].[Calendar].[Calendar Quarter],[Measures].[Sales Amount])}) --Set
ON COLUMNS
FROM [Adventure Works]
我的问题是这样的,假设我是正确的,并且结果确实代表了一个集合(由每个不同的成员实例表示的一组元组),为什么查询引擎允许您指定括号来指示元组的选择返回不是元组的东西?
这对我来说更有意义:
SELECT
nonemptycrossjoin(
{[Date].[Calendar].[Calendar Quarter]}, --Set 1
{[Measures].[Sales Amount]} --Set 2
)
ON COLUMNS
FROM [Adventure Works]
至少这段代码反映了返回的结果集 想法? 还是仅仅是分析服务语义?
谢谢
【问题讨论】: