MDX consulta contendo 2 dimensões da mesma hierarquia
Pergunta
As estruturas relevantes do meu cubo é que eu tenho uma hierarquia com "classe" e "SubClass". Eu também tenho uma medida chamada "Valor" que é o que estou tentando obter.
Uma consulta simples pode ser parecido com:
SELECT
NON EMPTY ([Measures].[Value]) ON COLUMNS,
NON EMPTY ([Some Dimension].[Class Hierarchy].[Class]) ON ROWS
FROM [MyCube]
E eu posso, obviamente, ler a subclasse usando a hierarquia que seja devolvido a ADOMD.
Meu problema é duplo, em primeiro lugar como eu "achatar" essa hierarquia, de modo a receber tanto a classe e subclasse como membros discretos no CellSet? Isso não funciona:
SELECT
NON EMPTY ([Measures].[Value]) ON COLUMNS,
NON EMPTY (
[Some Dimension].[Class Hierarchy].[Class],
[Some Dimension].[Class Hierarchy].[Sub Class]
) ON ROWS
FROM [MyCube]
A hierarquia Hierarquia de classes é usado mais de uma vez na função Crossjoin
Segundo questão, o que eu actuually precisa fazer é filtro acima em classes particulares, novamente este não vai funcionar pela mesma razão que acima.
SELECT
NON EMPTY ([Measures].[Value]) ON COLUMNS,
NON EMPTY (
{[Some Dimension].[Class Hierarchy].[Class].&[ClassA],[Some Dimension].[Class Hierarchy].[Class].&[ClassB]},
[Some Dimension].[Class Hierarchy].[Sub Class]
) ON ROWS
FROM [MyCube]
Qualquer ajuda muito apreciada. MDX está me deixando louco!
Solução
Está faltando a propriedade MEMBROS em sua dimensão.
Para o seu primeiro exemplo tente o seguinte:
SELECT
NON EMPTY ([Measures].[Value]) ON COLUMNS,
NON EMPTY {(
[Some Dimension].[Class Hierarchy].[Class].MEMBERS,
[Some Dimension].[Class Hierarchy].[Sub Class].MEMBERS)} ON ROWS
FROM [MyCube]
Para o seu segundo exemplo tente o seguinte:
SELECT
NON EMPTY ([Measures].[Value]) ON COLUMNS,
NON EMPTY {(
[Some Dimension].[Class Hierarchy].[Class].&[ClassA],
[Some Dimension].[Class Hierarchy].[Class].&[ClassB],
[Some Dimension].[Class Hierarchy].[Sub Class].MEMBERS)} ON ROWS
FROM [MyCube]
Outras dicas
Use Subqueries em sua cláusula WHERE. MDX sempre restringir o uso de uma dimensão em um único eixo.
Sub consulta é uma maneira de contornar isso. Eu aprendi recentemente este truque após MDX me deixou louco, bem ..
Hi esta consulta funcionou para mim.
SELECT NON EMPTY { [Measures].[App Count] }
ON COLUMNS,
NON EMPTY
{(
EXISTING
(
[MART TIME DIM].[Date].[Date] .MEMBERS) *
[New Ren DIM].[New Ren CODE].[New Ren CODE].ALLMEMBERS
)}
ON ROWS FROM [SubmissionCube]
where
({
[MART BROKER DIM].[BROKER ID].&[10812]},{[MART TIME DIM].[Year].&[2015],
{[MARTTIME DIM].[Year].&[2016]}
})
Por favor, tenha cuidado com o '}' na cláusula onde, como a consulta tem.