2

我正在尝试形成一个 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,显然超过了 0.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 的值。我是否完全错过了过滤器的要点,或者尝试一次过滤两个维度是否存在问题?

4

2 回答 2

3

我没有您的数据源,但此 MDX 可用于 AS2000 示例多维数据集 Foodmart(销售多维数据集)。

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];
于 2009-05-19T08:24:20.090 回答
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 中是合适的。但是,如果我想将日历周期保留在列中,我不知道如何解决这个问题,因为不能在两个轴上使用相同的维度。

于 2009-05-18T18:39:25.277 回答