我正在使用icCube的Sales多维数据集来学习MDX。我想写一个MDX查询,以显示2009年销售收入超过80,000美元的国家的销售收入。我尝试了以下操作,但它返回了一个只有一列([Amount])的空表:
WITH
SET [myset] AS Filter([Country].members, ([Measures].[Amount], [2010])>80000)
select [Country].members on 0, [Amount] on 1
from (select [myset] on 0, [Amount] on 1 from [sales])
where [2009]
答案 0 :(得分:2)
只需使用
WITH
SET [myset] AS Filter([Country].members, ([Measures].[Amount], [2010])>80000)
select [myset] on 0, [Amount] on 1
from [sales]
where [2009]
在MDX中,此类查询不需要子选择或WHERE
。你甚至可以省略集合myset
,写作
select Filter([Country].members, ([Measures].[Amount], [2010])>80000) on 0,
[Amount] on 1
from [sales]
where [2009]
我在Adventure作品上尝试了类似的查询,它显示了所有客户,澳大利亚,加拿大和美国,但没有显示法国,德国和英国:
SELECT Filter([Customer].[Country].Members,
([Measures].[Internet Sales Amount], [Date].[Calendar Year].&[2006]) > 600000
)
ON 0,
{[Measures].[Internet Sales Amount]}
ON 1
FROM [Adventure Works]
WHERE [Date].[Calendar Year].&[2008]
答案 1 :(得分:1)
更新:元组评估是我们错过的一个案例,该错误已在icCube 4.2中修复。注意在where子句和轴上使用相同的层次结构是很棘手的。任何集都被过滤掉:“{[2010],[2011]}在0 ..其中[2010]将返回[2010],但是在没有过滤的情况下评估元组。相同维度的不同层次结构将应用自动存在过滤器。< / p>
由于这有点棘手,我们决定扩展SETS以允许在使用全局上下文计算的查询中声明一个集合 - 而不考虑where子句和子查询:
WITH
-- always the same regardless of the where clause and subquery
STATIC SET [Global] Filter([Country].members, ([Measures].[Amount], [2010])>80000)
..
简单而有效的解决方案就是按照Frank的建议,直接在轴上添加过滤后的国家/地区。
SELECT
// this will return the countries with sales amount bigger than 80'000 for [2010]
// e.g. { [USA], [UK] } ... [2010] is is just used for filterting
Filter([Country].members, ([Measures].[Amount], [2010])>80000) on 0,
// When evaluated we're going to use [2009] as it's the slicer default value
[Amount] on 1
FROM [sales]
WHERE [2009]
关于你的查询它应该有用,我同意,这是icCube中的一个错误,我们将尽快修复(PTS)。与此同时,您必须避免在切片器和切片器中使用的Filter函数中使用相同的层次结构,例如:
WITH
MEMBER [Amount 2009] AS ([Amount],[2009])
SELECT
Filter([Country].members, ([Measures].[Amount], [2010])>80000) on 0,
[Amount 2009] on 1
FROM [sales]
或者您可以更改为在icCube中运行的版本(效率低于Frank的效率):
SELECT [Country].members on 0, [Amount] on 1
FROM (select Filter([Country].members, ([Measures].[Amount], [2010])>80000) on 0 from [sales])
WHERE [2009]
如果您正在玩基于不同评论的分组,您可以使用几个月前推出的icCube新功能:Categories
它们允许创建层次结构作为其他层次结构的成员。您可以将这些国家定义为[80000+],然后根据此新的分类进行计算。