2012-10-01 34 views
1

我想创建一个条形图,每个月都有一个条和一些度量。如何在MDX中对同一维度进行分组和过滤

但我也想过滤一天的范围内,可能不完全重叠的一些月份。

当发生这种情况时,我希望那些月份的聚合计数只有在我的日期范围内的日子里才能得到整个月的聚合。

这对MDX是否可行,请求应该如何?

+0

MDX子查询/子查询目前不支持mondrian http://jira.pentaho.com/browse/MONDRIAN-980 – skyde

回答

1

使用原始尺寸的虚拟尺寸创建第二个时间尺寸。在WHERE中使用一个维度,在SELECT中使用另一个维度。

无论如何,如果有些人想要季度和期间的“营业时间”,而其他人更喜欢月份,则通常会发生这种情况。或者如果你有一个四月至四月的财政年度。

+0

谢谢,这不看起来很干净,但它在ROLAP引擎上运行良好 – skyde

1

您可以使用子选择。你可以找到这个page和更多信息这page

当轴条款然后用 它的祖先和后代该成员被列入 子选择子立方体空间中指定一名成员;所有未提到的兄弟成员,在轴或 切片器子句中,以及它们的后代都从子空间中过滤掉。 这样,外部选择的空间就被限制在axis子句或slicer子句中的 现有成员中,其前 子孙和子孙如前所述。

下面是一个例子:

SELECT { [Customer].[Customer Geography].[Country].&[Australia] 
     , [Customer].[Customer Geography].[Country].&[United States] 
     } ON 1 
    , {[Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount]} ON 0 
    FROM (SELECT {[Customer].[Customer Geography].[Country].&[Australia] 
       , [Customer].[State-Province].&[WA]&[US]} ON 0 
      FROM [Adventure Works] 
     ) 

结果将包含Autralia一行和另一个用于United States。通过子选择,我将United Stated的值限制为Washington状态。

+0

不幸的是我使用Mondrian,它不支持子查询:( – skyde

0

的一种方式,我发现与蒙德里安做到这一点是因为遵循

WITH MEMBER [Measures].[Units Shipped2] AS 
SUM 
(
{ 
    exists([Store].[Store Country].currentmember.children,{[Store].[USA].[WA],[Store].[USA].[OR]}) 
},[Measures].[Units Shipped] 
) 
MEMBER [Measures].[Warehouse Sales2] AS 
SUM 
(
{ 
    exists([Store].[Store Country].currentmember.children,{[Store].[USA].[WA],[Store].[USA].[OR]}) 
},[Measures].[Warehouse Sales] 
) 
SELECT 
{[Measures].[Units Shipped2],[Measures].[Warehouse Sales2]} ON 0, 
NON EMPTY [Store].[Store Country].Members on 1 
FROM [Warehouse] 

我不知道,如果筛选将在SQL中做过类似的下方,提供良好的性能和在本地运行

select Country, sum(unit_shipped) 
where state in ('WA','OR') 
group by Country 
相关问题