更新:我们错过了元组评估的情况,已经在
icCube 4.2中修复了该错误。请注意,在where子句和轴上使用相同的层次结构是棘手的。任何集合都将被过滤掉:“ {[2010],[2011]} on 0 .. where [2010]将返回[2010],但元组将在不过滤的情况下进行评估。同一维度的不同层次将应用autoexists过滤器。
由于这有点棘手,我们决定扩展SETS,允许在查询中声明一个使用全局上下文评估的集合 - 而不考虑where子句和子查询:
WITH
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)。同时,您必须避免在切片器和用于切片器的筛选函数中使用相同的层次结构,例如:
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几个月前引入的新功能:
分类。
它们允许创建一个层次结构作为其他层次结构的成员。您可以将这些国家定义为[80000+],然后基于这个新的分类进行计算。