2014-12-17 3 views
1

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

меня попросили написать 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]; 

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

+1

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

ответ

1

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

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]

+1

Спасибо! Это помогло;) – Simon