MDX - фильтр нескольких измерений - PullRequest
2 голосов
/ 14 мая 2009

Я пытаюсь сформировать запрос 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]

Я получаю аналогичный набор результатов, включая значения выше .95. Я полностью упускаю точку фильтра или есть проблема с попыткой отфильтровать два измерения одновременно?

Ответы [ 2 ]

3 голосов
/ 19 мая 2009

У меня нет вашего источника данных, но этот 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];
0 голосов
/ 18 мая 2009

Я получил это взломано.

Фильтр был правильно применен к измерениям Program и Performance Metric. Проблема заключалась в том, что фильтр был применен отдельно от измерения календарного периода. Таким образом, отображаемое процентное значение точки 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];

К счастью, этот запрос используется в службах отчетов, поэтому целесообразно переместить Календарный период в строки. Однако, если бы я хотел сохранить календарный период в столбцах COLUMNS, я бы не знал, как решить эту проблему, поскольку одно и то же измерение нельзя использовать в обеих осях.

...