Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Não consigo obter o mesmo valor para os maiores clientes

Por favor, o que estou fazendo de errado?!?

Na primeira consulta desta aula o instrutor nos ensina a obter os 10 maiores clientes do ano de 2014. Ótimo, mas o meu retorno é bem diferente. Por que?!?

Digitei:

Select
{ TopCount( [Cliente].[Cliente].Members, 10, [Measures].[Faturamento] ) } On Rows,
{ [Tempo.Calendario].[2014] } on Columns
From [dmpresidencia]

e obtenho:

Cliente                                                    2014
Rainha Supermercados Brasília                        516.242,56
Rainha Supermercados Campinas                    871.389,00
Supermercados Bom e Barato Rio de Janeiro        786.219,98
Rainha Supermercados Salvador                    268.957,85
Rainha Supermercados Campo Grande                369.121,50
Tem de Tudo Supermercados Belo Horizonte        485.900,11
Supermercados Bom e Barato Goiais                336.683,49
Tem de Tudo Supermercados Goiais                302.593,82
Supermercados Bom e Barato Curitiba                223.811,50
Super Mania Rio de Janeiro                            436.723,75

Veja que a ordem dos clientes é a mesma ordem apresentada como resposta na aula, mas o valor?!? De onde vem esse valor?!? Muito estranho!

Para conhecimento, ao executar o comando abaixo no Heidi

SELECT c.Desc_Cliente, SUM(f.faturamento) soma 
FROM dm_dim_cliente c, dm_fato_presidencia f, dm_dim_tempo t
WHERE c.Id_Cliente = f.id_cliente
AND f.Id_Tempo = t.Id_Tempo
AND t.Numero_Ano = 2014
GROUP BY c.Desc_Cliente
ORDER BY soma DESC;

obtenho os valores apresentados como resposta na aula. Mas por que pelo MDX não funciona???

Já reiniciei o Pentaho Server, publicando novamente o schema e nada.

Grata.

5 respostas

Por favor, alguém tem alguma ideia?

Grata!

Descobri, mas infelizmente acho que trata-se de um bug do Pentaho. Vou tentar reportar a eles depois. Vamos lá...

Analisando o SQL gerado observei que o Pentaho montou a cláusula de forma errada. Veja:

select `dm_dim_tempo`.`Numero_Ano` as `c0`, `dm_dim_cliente`.`Cod_Regiao` as `c1`, `dm_dim_cliente`.`Cod_Estado` as `c2`, `dm_dim_cliente`.`Cod_Cidade` as `c3`, `dm_dim_cliente`.`Cod_Cliente` as `c4`, sum(`dm_fato_presidencia`.`Imposto`) as `m0` 
from `dm_dim_tempo` as `dm_dim_tempo`, `dm_fato_presidencia` as `dm_fato_presidencia`, `dm_dim_cliente` as `dm_dim_cliente` 
where `dm_fato_presidencia`.`Id_Tempo` = `dm_dim_tempo`.`Id_Tempo` 
and `dm_dim_tempo`.`Numero_Ano` = '2014' 
and `dm_fato_presidencia`.`Id_Cliente` = `dm_dim_cliente`.`Id_Cliente` 
and `dm_dim_cliente`.`Cod_Cliente` in ('12805717724', '2379494746', '30780411749', '33726329749', '3760238300', '66631300720', '81034342720', '887713777', '90005511704', '9824868712') 
group by `dm_dim_tempo`.`Numero_Ano`, `dm_dim_cliente`.`Cod_Regiao`, `dm_dim_cliente`.`Cod_Estado`, `dm_dim_cliente`.`Cod_Cidade`, `dm_dim_cliente`.`Cod_Cliente`;

Procure na cláusula SQL acima a coluna m0, pois ela vai conter o somatório buscado. Mas... veja que a cláusula soma o conteúdo da measures Imposto e não da measures Faturamento, conforme solicitado.

Grata!

Oii Ana, tudo bem?

Me desculpa por não ter dado retorno, eu estava analisando e tentando encontrar o erro.

Vendo o que você trouxe aqui, realmente trata-se de um bug do Pentaho.

Novamente peço desculpas. Qualquer dúvida estou por aqui :)

Não se preocupe. Está tudo em Paz.

Muito obrigada pela atenção!

solução!

Para conhecimento, funciona se eu utilizar o MDX da forma abaixo:

WITH
SET [~COLUMNS] AS
    {[Tempo.Calendario].[2014]}
SET [~ROWS] AS
    TopCount({[Cliente].[Cliente].Members}, 10, [Measures].[Faturamento])
SELECT
NON EMPTY CrossJoin([~COLUMNS], {[Measures].[Faturamento]}) ON COLUMNS,
NON EMPTY [~ROWS] ON ROWS
FROM [dmpresidencia]

Sim... apenas para falar melhor, o bug está no Saiku.

Grata!