MDX - 过滤多个维度

时间:2009-05-14 19:05:06

标签: ssas mdx

我正在尝试形成一个MDX查询,使其只返回度量符合特定条件的两个维度的组合。我认为使用FILTER功能非常简单,即

SELECT
    NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS,
    NON EMPTY ( HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage] )ON COLUMNS
FROM [QEP Revenue]

然而,在运行查询之后,很容易看出我有一个错误,因为第一个结果的点百分比为1.5172,显然超过.95。

如果我完全删除过滤器:

SELECT
    --NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS,
    NON EMPTY ({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }) ON ROWS,
    NON EMPTY ( HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage] )ON COLUMNS
FROM [QEP Revenue]

我得到一个类似的结果集,包括0.95以上的值。我是否完全忽略了过滤器的要点,或者是否存在尝试一次过滤两个维度的问题?

2 个答案:

答案 0 :(得分:3)

我没有你的数据源,但是这个MDX适用于AS2000样本多维数据集,Foodmart(Sales cube)。

SELECT 
  NON EMPTY 
    {{[Time].[Quarter].MEMBERS}} ON COLUMNS
 ,NON EMPTY 
    Filter
    (
      CrossJoin
      (
        {[Customers].[State Province].&[CA]}
       ,[Promotions].[All Promotions].Children
      )
     ,
        (
          [Customers].[State Province].&[CA]
         ,[Time].&[1997].&[Q1]
         ,[Measures].[Unit Sales]
        )
      > 300
    ) ON ROWS
FROM [Sales]
WHERE 
  [Measures].[Unit Sales];

答案 1 :(得分:0)

我搞砸了。

正在将过滤器正确应用于“程序”和“性能指标”维度。问题是过滤器是与“日历周期”维度分开应用的。因此,允许显示1.5172的点百分比,因为在另一个月有一个点百分比满足过滤器要求。

我能够重写查询,以获得所需的结果:

SELECT 
  NON EMPTY 
    Filter
    (
      {
          [Program].[ByRegion].[Program]*
          [Performance Metric].[Metric].Children*
          [Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]
      }
     ,
      [Measures].[Point Percentage] < 0.95
    ) ON ROWS
 ,NON EMPTY 
    [Measures].[Point Percentage] ON COLUMNS
FROM [QEP Revenue];

幸运的是,此查询正用于报告服务,因此将日历周期移动到ROWS是合适的。但是,如果我想将日历周期保留在COLUMNS中,我不知道如何解决这个问题,因为不能在两个轴上使用相同的尺寸。