MDX:过滤有孩子的父母

时间:2014-11-04 09:18:16

标签: mdx mondrian

我有以下查询:

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

编辑:也许这种观点更相关:

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

我想要的是用Lev2 = 2或Lev2 = 4过滤Lev1以获得以下结果:

Lev1 | Mes
___________
yes  |  2
no   |  4

这是否可能?

我正在使用Mondran和Olap4j。

3 个答案:

答案 0 :(得分:1)

似乎Lev1Lev2是属性层次结构。由于这些可以是分开的(比如组成第一个查询的行标题的两列),您也可以在行和where轴之间拆分它们:

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

答案 1 :(得分: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]
)

答案 2 :(得分: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]

感谢您的帮助!