Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa Tarde pessoal, estou com uma dúvida, acredito que seja coisa simples.
Estou carregando dados do Banco de Dados
LOAD
EMPRESA&ANOMES AS ChavePrimariaGeral,
ANOMES AS fl.AnoMes,
DTAEMISSAO AS fl.DtaEmissao,
SEQPRODUTO AS fl.SeqProduto,
PRODUTO AS fl.Produto,
VLRVENDA AS fl.VlrVenda
[Faturamento_Liquido]:
SELECT
"ANOMES",
"DTAEMISSAO",
"NROEMPRESA",
"SEQPRODUTO",
"PRODUTO",
"VLRVENDA"
FROM FATURAMENTOLIQUIDO";
Depois eu estou criando uma variável para carregar o maior valor
LET vUltMes = '=MAX(ALL[fl.AnoMes])';
E preciso fazer uma seleção de dados através de RESIDENT apenas dos dados que correspondem ao valor da variável, na clásula WHERE se eu coloco um valor fixo o comando executa certinho, mas se eu coloco a variável me retorna erro
[Faturamento_Mes]:
LOAD
ChavePrimariaGeral,
fl.AnoMes AS fm.AnoMes,
fl.DtaEmissao AS fm.DtaEmissao,
fl.SeqProduto AS fm.SeqProduto,
fl.Produto AS fm.Produto,
fl.VlrVenda AS fm.VlrVenda
RESIDENT [Faturamento_Liquido]
WHERE [fl.AnoMes] = ($(vUltMes));
//
Dessa forma retorna o seguinte erro
RESIDENT [Faturamento_Liquido]
WHERE [fl.AnoMes] = (=MAX(ALL
--
Ocorreram os seguintes erros:
Error in expression:
')' expected
Como eu posso resolver essa questão?
Como deve ser escrito essa instrução.
Obrigado.
Bom dia João;
Você incluíu aspas simples na expressão para a variavel vUltMes, então o retorno é o próprio texto da expressão na variável, você deve retira-lo e ajustar a expressão, exemplo:
Faturamento_Liquido:
LOAD
EMPRESA&ANOMES AS ChavePrimariaGeral,
ANOMES AS fl.AnoMes,
DTAEMISSAO AS fl.DtaEmissao,
SEQPRODUTO AS fl.SeqProduto,
PRODUTO AS fl.Produto,
VLRVENDA AS fl.VlrVenda
;
SELECT
"ANOMES",
"DTAEMISSAO",
"NROEMPRESA",
"SEQPRODUTO",
"PRODUTO",
"VLRVENDA"
FROM FATURAMENTOLIQUIDO
;
TMP_MaxMinAnoMes:
LOAD
Max([fl.AnoMes]) AS MaxAnoMes
Resident Faturamento_Liquido;
LET vMaxAnoMes = Peek('MaxAnoMes');
Drop Table TMP_MaxMinAnoMes;
Faturamento_Mes:
LOAD
ChavePrimariaGeral,
fl.AnoMes AS fm.AnoMes,
fl.DtaEmissao AS fm.DtaEmissao,
fl.SeqProduto AS fm.SeqProduto,
fl.Produto AS fm.Produto,
fl.VlrVenda AS fm.VlrVenda
RESIDENT Faturamento_Liquido
WHERE [fl.AnoMes] = $(vMaxAnoMes)
;
Estou considerando que o retorno do campo seja do tipo YYYYMM (Ex.: 201803), sendo assim, a função Max retornará o resultado adequado.
Tenta assim:
WHERE [fl.AnoMes] = '$(vUltMes)'; // colocando entre aspas simples
ou
WHERE [fl.AnoMes] = $('vUltMes');
Bom Dia Eduardo
Testando com a primeira opção não retorna erro, mas não filtra os dados, o maior mês que tem informação na tabela é 04/2018, se eu colocar WHERE [fl.AnoMes] = 2018; da certo, seleciona os dados certinho, mas eu não posso deixar fixo dessa forma, executando com a primeira opção o resultado é
Executando conforme sugestão da segunda opção retorna erro
Bom dia João;
Você incluíu aspas simples na expressão para a variavel vUltMes, então o retorno é o próprio texto da expressão na variável, você deve retira-lo e ajustar a expressão, exemplo:
Faturamento_Liquido:
LOAD
EMPRESA&ANOMES AS ChavePrimariaGeral,
ANOMES AS fl.AnoMes,
DTAEMISSAO AS fl.DtaEmissao,
SEQPRODUTO AS fl.SeqProduto,
PRODUTO AS fl.Produto,
VLRVENDA AS fl.VlrVenda
;
SELECT
"ANOMES",
"DTAEMISSAO",
"NROEMPRESA",
"SEQPRODUTO",
"PRODUTO",
"VLRVENDA"
FROM FATURAMENTOLIQUIDO
;
TMP_MaxMinAnoMes:
LOAD
Max([fl.AnoMes]) AS MaxAnoMes
Resident Faturamento_Liquido;
LET vMaxAnoMes = Peek('MaxAnoMes');
Drop Table TMP_MaxMinAnoMes;
Faturamento_Mes:
LOAD
ChavePrimariaGeral,
fl.AnoMes AS fm.AnoMes,
fl.DtaEmissao AS fm.DtaEmissao,
fl.SeqProduto AS fm.SeqProduto,
fl.Produto AS fm.Produto,
fl.VlrVenda AS fm.VlrVenda
RESIDENT Faturamento_Liquido
WHERE [fl.AnoMes] = $(vMaxAnoMes)
;
Estou considerando que o retorno do campo seja do tipo YYYYMM (Ex.: 201803), sendo assim, a função Max retornará o resultado adequado.
Para a tabela TMP_MaxMinAnoMes acima, era possível otimizar o resultado com as funções FieldValue, FieldValueCount e AUTOGENERATE, mas poderia atrapalhar a sua resolução.
Oi Joao,
Uma pergunta, voce usou o debug para ver o que esta vindo nessa sua variavel? Porque as vezes esta vindo um valor que nao é o esperado e quando colocamos no where acaba por nao trazer nada. Poe um check nela e ve se esta tudo ok antes.
Outra coisa, concordo com o Mario se voce coloca aspas simples na atribuição de uma variavel acaba tendo o mesmo efeito do Set, ou seja, transforma em string. Por isso sempre faz um teste de retorno na variavel antes de mais nada.