Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
dairan73
Contributor III
Contributor III

Divergência de valores

Boa tarde,

Estou com um problema que não estou conseguindo identificar o porque acontece.

Tenho o código abaixo:

[Estornos]:

LOAD [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro]   

FROM

(qvd)

Where [Cod. Tipo Movimentação Bancária] = 'ES';

Tabela:

LOAD

  *

FROM

(qvd)

Where

  Not Exists ([ChaveEstornoFiltro],[Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária])

Drop Table Estornos;

A ideia deste código é pegar todos os estornos e depois excluir da Tabela quem tem essa Chave (que possui estorno).

Ao rodar apenas esta parte do código, tudo funciona.

E depois tenho um código que pega e cria registros até o saldo ser zerado ou até hoje. (Através deste tópico: Re: Criar registros diários)

O problema está que se uso este "Not Exists" o resultado é esse:

2017-03-28 - 001.png

A coluna "teste" é o cálculo ValorLiquidoTitulo - TotalValorMovimentacao, mas como 470,67 - 470,67 resulta em 5,6843418860808e-014 ??


Mas se eu remover a parte do Not Exists da Tabela, tudo funciona normal: (Os valores de movimentação são diferentes pois sem o Not Exists ele está considerando estornos também)

2017-03-28 - 002.png


Alguém tem alguma ideia do que pode ser isto?

Labels (1)
1 Solution

Accepted Solutions
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo;

Consegui resolver, segue:

Substitua na parte //Agrupamento;;

De:

  Sum(ValorMovimentacao) As 'TotalValorMovimentacao', 

Por:

  Round(Sum(ValorMovimentacao),'0,01') As 'TotalValorMovimentacao',

O erro ocorre somente quando existe casas decimais no campo 'ValorMovimentacao';

Estranho que fiz vários testes, formatando com Num()..., no frond-end ficava normal com Num() no script, mas mesmo assim, na parte //Preenchendo_Intervalos_Datas estava apresentando erro na condição If() no While, não retornando -1(True/Verdadeiro) para os valores iguais para TotalValorMovimentacao=ValorLiquidoTitulo;


Enfim... Não existe mais de duas casas decimais, porém forcei um arredondamento "imaginário" e funcionou.

Pois TotalValorMovimentacao(470,67) > ValorLiquidoTitulo(470,67) estava retornando verdadeiro.

Primeira vez que vejo esta situação estranha.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti

View solution in original post

45 Replies
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, tente;

Expressão para o campo teste:

Column(1)-Column(2)

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
dairan73
Contributor III
Contributor III
Author

Mario,

O problema está no script mesmo, porque lembra que você me ajudou a criar no outro tópico? Então o campo SaldoDevedor fica mostrando 5,6843418860808e-014 e criando registros até hoje e não parando quando o saldo é 0, pois segundo ele 470,67 - 470,67 não é 0 haha

fabionakashigue
Partner - Creator
Partner - Creator

Douglas tem como postar um exemplo?

Não entendi muito bem pq você está fazendo esta estrutura do not exists.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, estranho sua expressão da coluna "teste" ter apresentado este resultado;

Haja vista que as colunas dos cálculos apresentados na tabela estão ok;

Favor, não deixe de testar a expressão que te falei, me retorna com o resultado;

A função Collumn() utiliza o que é apresentado na tabela no seu caso, os números interno da função é a ordem das expressão;

Se as colunas ValorLiquidoTitulo e TotalValorMovimentacao não está como expressões, transforma-os;


Esta com problemas com o script que havia te passado? Ou ficou após ter incluido o seu script com Not Exists()?


Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
fabionakashigue
Partner - Creator
Partner - Creator

Mario,

Acredito que o problema dele não seja nada relacionado ao exists. E sim a casas decimais, no caso funciona sem o exists pq ele busca a tabela completa com tabela de estornos, pois o valor no segundo caso o campo totalvalormovimentacao vai para 1412. Poderiamos fazer um teste com floor no script.

dairan73
Contributor III
Contributor III
Author

Faço o Not Exists porque quando tem um título estornado, na tabela ficam 2 registros iguais só que apenas um tem o Tipo Movimentação = 'ES', mas preciso apagar os 2.

Exemplo:

Chave          Valor          Receb/Pag     Tipo

ChaveA1     200             Recebimento     NOR

ChaveA1     200             Pagamento        ES

ChaveA2     400             Recebimento     MOT

ChaveA3     100             Recebimento     NOR


Neste caso, preciso excluir os 2 registros que tenham a "ChaveA1".

dairan73
Contributor III
Contributor III
Author

É que o problema não ficou apenas na tabela, depois do Not Exists ele "bagunçou" o script:

2017-03-28 - 003.png

Quando ele deveria zerar o saldo, começou a colocar aquele valor 5,6843418860808e-014.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Por padrão, vejo que quando formatado os campos numéricos, se necessário, o sistema arredonda os campos decimais no tipo round(); *Pelo menos no Qlik Sense, creio que o mesmo para Qlikview.

Mas a questão é que no resultado do campo "teste" temos 5,68... Ou seja, uma diferença considerável para ser por conta de arredondamento das casas decimais.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Após inclusão do seu script... Foi gerado uma chave sintética?

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti