Search code examples
mdx

MDX - multiple filters on different dimension with OR condition


I have a problem with MDX querying.

I have one measure WEIGHT and two dimensions DESTINATION and SOURCE with the same attributes: NAME and TYPE.

I want to return:

SUM of WEIGHT 
where 
   DESTINATION.TYPE="A" 
   **OR** 
   SOURCE.TYPE="B" 
   **AND** 
      (DESTINATION.TYPE **<>** SOURCE.TYPE) 

If try this:

SELECT NON EMPTY { 
   [Measures].[Weight] 
} 
ON COLUMNS, 
NON EMPTY { 
   ([Source].[Name].[Name].ALLMEMBERS * [Destination].[Name].[Name].ALLMEMBERS ) 
} 
ON ROWS 
FROM 
( SELECT ( { [Source].[Type].&[A] } ) ON COLUMNS FROM ( SELECT ( { [Destination].[Type].&[B] } )
     ON COLUMNS FROM [CUBE])) WHERE ( [Destination].[Type].&[B], [Source].[Type].&[A] ) 

But it doesn't work.

In SQL it look like

Select source.name, destination.name, sum(weight) from cube
where
(source.type = "A" or destination.type = "b")
and 
(source.type <> destination.type)
group by source.name, destination.name, source.type, destination.type

Solution

  • Your From section is a bit messy. Try the following:

    SELECT 
    NON EMPTY { [Measures].[Weight] } ON COLUMNS, 
    NON EMPTY { [Source].[Name].[Name].ALLMEMBERS * [Destination].[Name].[Name].ALLMEMBERS } ON ROWS 
    FROM [CUBE]
    WHERE ( {[Destination].[Type].&[B]} * {[Source].[Type].[All]} + {[Destination].[Type].[All]} * {[Source].[Type].&[A]} )