2014-04-08 2 views
1

Я хотел бы объединить два запроса MDX из разных размеров по столбцам. Пример:MDX Union Across Different Dimensions

Number of Sales/Product Type vs. Gender and State: 

     | CA | OR | WA | Male | Female 
------------------------------------------------ 
food | 125 | 343 | 130 | 570 | 459 
------------------------------------------------ 
drink | 123 | 465 | 135 | 678 | 343 

Государства и Пол являются их собственными соответствующими размерами, и я хотел бы сделать некоторые агрегации (например, счета продаж.) По различным видам продукции (продукты питания, напитки). Ниже приводится некоторое представление о том, как это может работать, хотя запросы не могут быть объединены, поскольку они имеют разные иерархии. Как я могу прибегнуть к помощи мужчин и женщин, например, в качестве столбцов в этом результате?

SELECT 

    NON EMPTY 

    { [Store].[Store State].Members, [Gender].[Gender].Members } ON COLUMNS, 

    { [Product].[Product Family].Members } ON ROWS 

    FROM [Sales] 

WHERE { [Measures].[Sales Count] } 

Пример ошибки:
MondrianEvaluationException: Expressions must have the same hierarchy

Есть ли способ сделать это эффективно в MDX ,? Если да, могу ли я указать конкретные агрегаты для каждой колунды (например, данные совокупного состояния по общему объему продаж, полные данные по прибыли).

Спасибо за вашу помощь

ответ

0

В MDX, все оси должны иметь одинаковую размерность. Лучшим подходом было бы запустить два запроса и показать их рядом друг с другом в клиентском инструменте.

Однако, вы могли бы сделать что-то подобное тому, что @Vhteghem_Ph предложил:

SELECT 

    NON EMPTY 

    [Store].[Store State].Members * { [Gender].[Gender].[(All Gender)] } 
    + 
    { [Store].[Store State].[(All Store State)] } * [Gender].[Gender].Members 
    ON COLUMNS, 

    { [Product].[Product Family].Members } ON ROWS 

    FROM [Sales] 

WHERE { [Measures].[Sales Count] } 

Обратите внимание, что +, используемый здесь, который имеет два набора в качестве параметров, это краткая форма Union(set1, set2). И снова, Союз требует, чтобы оба набора имели одинаковую размерность, в этом случае первым измерением множества является иерархия Store States, а вторая - иерархия Gender.

+0

Благодарим вас за четкий ответ. Я увеличил свой запрос и получил несколько разумные результаты. Итак, похоже, CrossJoin() ing - единственный способ получить множества из разных измерений в форму, где они могут быть Union() ed? Я полагаю, что если бы я хотел добавить еще один столбец из отдельного измерения, мне пришлось бы пересечь все три набора в каждом члене союза? – Shrim

+0

@Shrim Да, это правильно. – FrankPl

0

Я не знаю, если следующий будет работать с Мондриана:

SELECT 
    {[Measures].[Internet Sales Amount]} ON 0 
,NON EMPTY 
    { 
     (
     [Customer].[Gender].[Gender].MEMBERS 
     ,[Customer].[Marital Status].[(All)] 
    ) 
    ,(
     [Customer].[Gender].[(All)] 
     ,[Customer].[Marital Status].[Marital Status].MEMBERS 
    ) 
    } ON 1 
FROM [Adventure Works]; 

Филипп