Средняя функция MDX в расчете на

Столкнулся с проблемой, которую не могу решить. Для моего академического проекта у меня есть куб, представляющий хранилище данных авиакомпании. В этой авиакомпании пассажиры заполняют анкету из 5 вопросов, оценивая различные аспекты полета от 1 до 10.

Меня попросили написать MDX запрос, чтобы показать, как их общая оценка полета (средняя из пяти оценок) зависит от класса, в котором они были.

Это мой запрос:

 WITH 
  MEMBER [Average Grade1] AS 
    [Measures].[Grade1] / [Measures].[Flight Count] 
  MEMBER [Average Grade2] AS 
    [Measures].[Grade2] / [Measures].[Flight Count] 
  MEMBER [Average Grade3] AS 
    [Measures].[Grade3] / [Measures].[Flight Count] 
  MEMBER [Average Grade4] AS 
    [Measures].[Grade4] / [Measures].[Flight Count] 
  MEMBER [Average Grade5] AS 
    [Measures].[Grade5] / [Measures].[Flight Count] 
  MEMBER [Average] AS 
      (
            [Measures].[Average Grade1] + [Measures].[Average Grade2]
          + 
            [Measures].[Average Grade3]
        + 
          [Measures].[Average Grade4]
      + 
        [Measures].[Average Grade5]
      )
    / 5 
SELECT 
  {
    [Measures].[Average Grade1]
   ,[Measures].[Average Grade2]
   ,[Measures].[Average Grade3]
   ,[Measures].[Average Grade4]
   ,[Measures].[Average Grade5]
   ,[Measures].[Average]
  } ON COLUMNS
 ,{[Junk].[Class].Children} ON ROWS
FROM [Airline];

Это дает неправильные результаты, потому что среднее подсчитывается до фактической группировки по классам, поэтому для всех классов отображается один и тот же результат. Может ли кто-нибудь сказать мне, как получить результат, который я хочу?


person Simon    schedule 17.12.2014    source источник
comment
Не могли бы вы предоставить больше информации о данных в [Junk].[Class]? Кроме того, можете ли вы объяснить, что такое [Measures].[Grade1] (примеры значений, функция агрегирования по умолчанию)? И вы имеете в виду усреднение средних значений? Казалось бы, вместо того, чтобы суммировать агрегированное среднее значение для каждого класса, а затем делить, вы должны рассчитать среднее значение (по 5 классам) для каждого человека/рейса, а затем усреднить его?   -  person mmarie    schedule 17.12.2014


Ответы (1)


Как упоминает ммари, это обычно способ получить среднее значение:

WITH 
  MEMBER [Average Grade1] AS 
    [Measures].[Grade1] / [Measures].[Flight Count] 
  MEMBER [Average Grade2] AS 
    [Measures].[Grade2] / [Measures].[Flight Count] 
  MEMBER [Average Grade3] AS 
    [Measures].[Grade3] / [Measures].[Flight Count] 
  MEMBER [Average Grade4] AS 
    [Measures].[Grade4] / [Measures].[Flight Count] 
  MEMBER [Average Grade5] AS 
    [Measures].[Grade5] / [Measures].[Flight Count] 
  MEMBER [Average] AS 
      (
            [Measures].[Grade1] + [Measures].[Grade2]
          + 
            [Measures].[Grade3]
        + 
          [Measures].[Grade4]
      + 
        [Measures].[Grade5]
      )
    / [Measures].[Flight Count]
SELECT 
  {
    [Measures].[Average Grade1]
   ,[Measures].[Average Grade2]
   ,[Measures].[Average Grade3]
   ,[Measures].[Average Grade4]
   ,[Measures].[Average Grade5]
   ,[Measures].[Average]
  } ON COLUMNS
 ,{[Junk].[Class].Children} ON ROWS
FROM [Airline];

Если мера не связана с контекстом сценария MDX, вы получите повторение ответа. Поэтому, если используемые вами показатели не связаны с контекстом, т. е. [Junk].[Class].Children, вы будете получать повторение на основе оценки члена по умолчанию.

Попробуйте заменить [Junk].[Class].Children другим параметром, который, как вы знаете, на 100 % связан с показателями [Measures].[Grade1] и [Measures].[Flight Count].

person whytheq    schedule 17.12.2014
comment
Спасибо! Помогло ;) - person Simon; 08.04.2015