2015-12-11 6 views
1

Я хотел бы показать результат этих двух запросов в одной таблице.Объединить 2 запроса MDX

SELECT 
{[Measures].[Udzial Wieznia w Aktywnosci Count]} ON COLUMNS, 
{[Aktywnosc].[Id Wiezienia].Members} ON ROWS 
FROM [Wiezienia HD2] 
WHERE [Udzial Wieznia w Aktywnosci].[Id Ucieczki].[2] : [Udzial Wieznia w Aktywnosci].[Id Ucieczki].[101] 

и

SELECT 
{[Measures].[Udzial Wieznia w Aktywnosci Count]} ON COLUMNS, 
{[Aktywnosc].[Id Wiezienia].Members} ON ROWS 
FROM [Wiezienia HD2] 

Сначала один показывает, сколько побегов из тюрьмы были в каждой тюрьме, а второй один показывает, как много людей в каждой тюрьме.

+0

Или Аарон, или мой собственный ответ, поможет вам решить вашу проблему? – whytheq

ответ

0

Это предложение Аарон Запад перенесенное в AdvWrks:

SELECT 
    { 
    [Measures].[Internet Sales Amount] 
    ,Aggregate 
    (
     [Date].[Calendar].[Calendar Year].&[2006] 
     : [![enter image description here][1]][1] 
     [Date].[Calendar].[Calendar Year].&[2007] 
    ,[Measures].[Internet Sales Amount] 
    ) 
    } ON 0 
,[Product].[Category].[Category] ON 1 
FROM [Adventure Works]; 

Как указывалось Грегло Galloway ошибок него:

Query (2, 3) Функция ожидает выражения набора кортежей для аргумента 2 . Использовалось строковое или числовое выражение.

Если мы перемещаем расчет на WITH заявление:

WITH 
    MEMBER [Measures].[SalesIn2006/2007] AS 
    Aggregate 
    (
     [Date].[Calendar].[Calendar Year].&[2006] 
     : 
     [Date].[Calendar].[Calendar Year].&[2007] 
    ,[Measures].[Internet Sales Amount] 
    ) 
SELECT 
    { 
    [Measures].[Internet Sales Amount] 
    ,[Measures].[SalesIn2006/2007] 
    } ON 0 
,[Product].[Category].[Category] ON 1 
FROM [Adventure Works]; 

Теперь мы получаем результат:

enter image description here

Так против куба это будет, вероятно, немного похож это:

WITH 
    MEMBER [Measures].[Count freeAtLast] AS 
    Aggregate 
    (
     [Udzial Wieznia w Aktywnosci].[Id Ucieczki].[2] 
     : 
     [Udzial Wieznia w Aktywnosci].[Id Ucieczki].[101] 
    ,[Measures].[Udzial Wieznia w Aktywnosci Count] 
    ) 
SELECT 
    { 
    [Measures].[Udzial Wieznia w Aktywnosci Count] 
    ,[Measures].[Count freeAtLast] 
    } ON 0 
,[Aktywnosc].[Id Wiezienia].MEMBERS ON 1 
FROM [Wiezienia HD2]; 
0
WITH MEMBER [Measures].x AS 
    AGGREGATE([Udzial Wieznia w Aktywnosci].[Id Ucieczki].[2] 
      : [Udzial Wieznia w Aktywnosci].[Id Ucieczki].[101] 
      , [Measures].[Udzial Wieznia w Aktywnosci Count]) 

SELECT { [Measures].[Udzial Wieznia w Aktywnosci Count] 
, Measures.x 
    } ON COLUMNS 
, [Aktywnosc].[Id Wiezienia].Members ON ROWS 
FROM [Wiezienia HD2] 

Если AGGREGATE не работает, попробуйте SUM. Кстати, будьте осторожны, чтобы OrderBy был установлен в KeyColumn (который должен быть числовым типом данных) для этого атрибута, который от 2 до 101, или ваш диапазон не будет работать правильно.

Редактировать: Возможно, мой неправильный первый ответ поставил Aggregate inline, потому что я думал о том, что выражение набора кортежей может немного походить на SUM, если у вас есть один член иерархии для кортежа. Например, если вы создали атрибут измерения для диапазона от 2 до 101, вы можете использовать выражение как это:

([Udzial Wieznia w Aktywnosci].[new attribute name].[2_to_101] 
    , [Measures].[Udzial Wieznia w Aktywnosci Count]) 

Но тогда вам нужно будет убедиться, что размерность кортежей одинаковы во всех членах на ось, например:

SELECT { ([Udzial Wieznia w Aktywnosci].[new attribute name].[2_to_101] 
    , [Measures].[Udzial Wieznia w Aktywnosci Count]) 
    ([Udzial Wieznia w Aktywnosci].[new attribute name].[All] 
     , [Measures].[Udzial Wieznia w Aktywnosci Count]) 
    } ON COLUMNS 
, [Aktywnosc].[Id Wiezienia].Members ON ROWS 
FROM [Wiezienia HD2] 
+1

Агрегат должен быть завернут в расчетную меру. Я предложил изменить ваш ответ. – GregGalloway

+0

Согласен с Грегом - это будет ошибка. Даже если это не ошибка, второй столбец не будет назван. – whytheq

Смежные вопросы