2014-11-04 2 views
1

У меня есть следующий запрос:MDX: фильтр родители с детьми

SELECT 
NON EMPTY { [Measures].[Mes] } ON COLUMNS, 
NON EMPTY { [Dim].[Lev1].Members, [Dim].[Lev2].Members } ON ROWS 
FROM [Cube] 

Где LEV2 является иерархическим потомком Lev1. Это дает мне следующий результат:

Lev1 | Lev2 | Mes 
_________________ 
yes | 1 | 1 
yes | 2 | 2 
no | 3 | 3 
no | 4 | 4 

EDIT: Может быть, эта точка зрения является более актуальным:

Dim  | Mes 
- yes | 3 
     1 | 1 
     2 | 2 
- no  | 7 
     3 | 3 
     4 | 4 

То, что я хочу, чтобы фильтровать Lev1 с LEV2 = 2 или LEV2 = 4, чтобы получить следующее результат:

Lev1 | Mes 
___________ 
yes | 2 
no | 4 

Возможно ли это?

Я использую Mondran и Olap4j.

ответ

0

Я просто обнаружить функцию VisualTotals, которая делает работу хорошо:

SELECT 
NON EMPTY {[Measures].[Mt cheques]} ON COLUMNS, 
NON EMPTY VisualTotals (hierarchize({ 
    [Dim].[Lev1].Members, 
    [Dim].[yes].[2], 
    [Dim].[no].[4] 
)}) ON ROWS 
FROM [Cube] 

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

1

Кажется, что Lev1 и Lev2 являются иерархиями атрибутов. Как они могут быть разделены (как сделать две колонки вашей строки заголовка вашего первого запроса), вы можете также разделить их между рядом и где ось:

SELECT 
NON EMPTY { [Measures].[Mes] } ON COLUMNS, 
NON EMPTY { [Dim].[Lev1].Members } ON ROWS 
FROM [Cube] 
WHERE { [Dim].[Lev2].[2], [Dim].[Lev2].[4] } 
+0

Lev1 и Lev2 являются соответственно родительскими и дочерними элементами одной и той же иерархии в Dim-измерении. Поэтому они не могут быть разделены на две разные оси. Поэтому я попытался использовать агрегат и «FakeDimension», но результат неверен ([yes | 6] и [no | 6]). Но может быть, это ошибка мондриан? – jBravo

+1

@pDupond Я не знаю Мондриана в деталях. Но в Analysis Services, если 'Lev1' и' Lev2' являются двумя уровнями одной и той же иерархии, вы не можете даже вернуть их в виде двух отдельных столбцов в заголовках строк, но только в том случае, когда один столбец с элементами обоих уровней смешан. У вас есть иерархии атрибутов из столбцов, на основе которых эти уровни доступны в вашем кубе? – FrankPl

+0

Прошу прощения за плохое качество моих объяснений. Я редактировал свой вопрос. Надеюсь, это будет более актуально. – jBravo

0

Я думаю, что это фактически то же самое, как FrankPI годов ответ. Хотя это может работать в вашем приложении:

SELECT 
NON EMPTY 
{ [Measures].[Mes] } 
ON COLUMNS, 
NON EMPTY 
EXISTS(
    { [Dim].[Lev1].Members } 
    , { [Dim].[Lev2].[2], [Dim].[Lev2].[4] } 
) 
ON ROWS 
FROM [Cube] 

Может subselect

SELECT 
NON EMPTY 
{ [Measures].[Mes] } 
ON COLUMNS, 
NON EMPTY 
EXISTS(
    { [Dim].[Lev1].Members } 
    , { [Dim].[Lev2].[2], [Dim].[Lev2].[4] } 
) 
ON ROWS 
FROM 
(
    SELECT { [Dim].[Lev2].[2], [Dim].[Lev2].[4] } ON 0 
    FROM [Cube] 
) 
+0

Я пробовал, и это дало мне следующий результат: [да | 3] [нет | 7]. В любом случае, спасибо. – jBravo

+0

@pDupond - я добавил еще одну попытку с использованием 'subselect' - не уверен, что ваш клиент будет слишком доволен этим. – whytheq

+0

К сожалению, Mondrian не поддерживает запросы на подвыборку, поэтому я не могу попробовать ваше решение. – jBravo

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