2
respostas

[Dúvida] JOIN de Cubos (MDX)

Não consegui encontrar uma solução para unir informações de cubos diferentes.

Exemplo: minha base OLAP possui 4 cubos

  • Automotive
  • Peaple
  • Traking
  • Personal

Desta forma preciso montar um relatório com dimensões que estão em dois cubos e hoje a única forma que consigo é utilizando o OPENQUERY (convertendo o MDX para SQL) porém com isso perco performance e a query fica muito grande. Existe uma forma de pegar a dimensão X do cubo 1 e unificar com o campo y do cubo 2?

2 respostas

Oii, Luciano! Como está?

Como sugestão, considere usar linked objects ou shared dimensions para unificar os cubos compartilhando a dimensão diferentes entre eles. Outra ideia é usar o drill-through, ele navega entre os cubos relacionados. O ETL é outra alternativa, você prepara os dados necessários em um único cubo.

A escolha vai depender muito do seu projeto, dos requisitos do relatório e dentre outros fatores, por isso consigo oferecer apenas sugestões. É preciso fazer os testes com as sugestões acima para ver qual melhor se encaixa no seu contexto.

Espero que seja um bom ponto de partida para você!

Bons estudos e até mais!

Boa tarde, obrigado pela resposta.

Então a base OLAP já está estruturada desta forma e o ETL foi construído separando em cubos. Desta forma a reestruturação dos cubos não é uma opção.

Como exemplo eu tenho a seguinte situação:

Preciso listar a quantidade de pacientes (por faixa etária) que fizeram exames de COVID19 e separar os resultados por Positivo e Negativo.

Sendo assim tenho as duas querys (uma em cada cubo pois o filtro é pela data em que a amostra foi recebida e não quando a solicitação do exame foi feita)

Query 1 - Retorna a quantidade de pacientes por faixa etária conforme a data em que a amostra foi recebida para realizar o exame:

SELECT NON EMPTY [FaixaEtaria].[FaixaEtariaANS].[FaixaEtariaANS] ON COLUMNS,
NON EMPTY
[DtTriagem].[DtTriagemMesAno].[DtTriagemMesAno] ON ROWS
FROM Amostra
WHERE 
([DtTriagem].[DtTriagemAno].&[2024]
,[Procedimento].[CodProcedimento].&[NCOV19]
,[Measures].[QtPaciente])

Resultado da query: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Query 2 - Retorna a quantidade de pacientes, separados por faixa etária, quantificando resultados positivos e negativos

WITH
MEMBER [Measures].[Positivos] AS
Aggregate
(({[Resultado].[Resultado].[Detectado], [Resultado].[Resultado].[Detected], [Resultado].[Resultado].[Positivo]})
,[Measures].[QtPaciente]
)
MEMBER [Measures].[Negativos] AS
Aggregate
(({[Resultado].[Resultado].[Not Detected], [Resultado].[Resultado].[Negativo], [Resultado].[Resultado].[NÃO DETECTADO]})
,[Measures].[QtPaciente]
)
SELECT NON EMPTY [FaixaEtaria].[FaixaEtariaANS].[FaixaEtariaANS] ON COLUMNS,
NON EMPTY 
([Procedimento].[Procedimento].[Procedimento].MEMBERS
,{[Measures].[Positivos], [Measures].[Negativos]})
 ON ROWS
FROM Resultado
WHERE 
([DtPedido].[DtPedidoAno].&[2024]
,[Procedimento].[CodProcedimento].&[NCOV19]
,[Resultado].[Parametro].[Parametro].MEMBERS
-[Resultado].[Parametro].[GENEN]
-[Resultado].[Parametro].[GENE]
-[Resultado].[Parametro].[GENEE]
-[Resultado].[Parametro].[GENES]
-[Resultado].[Parametro].[LOTE]
-[Resultado].[Parametro].[OBSERVACAO]
-[Resultado].[Parametro].[RDRPN]
-[Resultado].[Parametro].[RDRPS]
-[Resultado].[Parametro].[PONTO]
-[Resultado].[Parametro].[VAL]
-[Resultado].[Parametro].[RDRPN]
-[Resultado].[Parametro].[REGCOL]
-[Resultado].[Parametro].[METODO]
-[Resultado].[Parametro].[ING]
-[Resultado].[Parametro].[GENR]
-[Resultado].[Parametro].[RET EDITAVEL]
-[Resultado].[Parametro].[RET FIXO])

Resultado da Query Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Desta forma o que eu preciso, como resultado final é a imagem acima que lista o total de pacientes quantificados por tipo de resultado (positivo e negativo) porém olhando para a dimensao DtTriagem que está em outro cubo.