如何在MDX中对同一维度进行分组和过滤

时间:2012-10-01 21:07:02

标签: mdx olap mondrian msas

我想创建一个条形图,每个月都有一个条形图和一些尺寸。

但我也希望过滤一些可能在一个月内没有完全重叠的日子。

当发生这种情况时,我希望那些月份的总计数只能在我日期范围内的日期内累计,而不是整月的总和。

这可能与MDX有关吗?如果请求应该如何?

3 个答案:

答案 0 :(得分:1)

您可以使用subselect。您可以找到有关此page和此page的更多信息:

  

当在axis子句中指定成员时,那个成员用   它的后代和后代包含在子立方体空间中   子选择;所有未提及的兄弟姐妹成员,在轴或   slicer子句,它们的后代从子空间中过滤掉。   这样,外部选择的空间一直限于   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状态。

答案 1 :(得分:1)

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

如果某些人想要季度和时段的“营业时间”,而其他人更喜欢几个月,这通常会发生。或者如果你有一个四月到四月的财政年度。

答案 2 :(得分: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