Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
andre_tonini
Creator II
Creator II

Fluxo de Caixa - Saldo Acumulado

Boa tarde,    


          Pessoal, estou precisando de uma ajuda em um fluxo de caixa onde os saldos são compostos pelo Saldo Anterior + Entradas - Saídas = Saldo Final, porém se eu filtrar uma determinada data o saldo anterior busca sempre o saldo que fixei no script e não busca o saldo anterior a data que filtrei. Existe uma forma de deixar acumulado esse valor para que o saldo anterior não busque o valor original dele lá do script?

LOAD * INLINE [

  BCC_CODIGO, SALDO_INICIAL

  11, 1620,00

];


Segue abaixo script.

Extrato Marcando 3 dias-OK.jpgExtrato Marcando 1 dia-Errado.png

LOAD * INLINE [

  BCC_CODIGO, SALDO_INICIAL

  11, 1620,00

];

//--- Bancos Movimentos ---//

// ---- PEDIDO DE VENDA ---- //

LOAD *,   

    YEAR(BCI_DATA) AS ANO,

    MONTH(BCI_DATA) AS MES,

    DAY(BCI_DATA) AS DIA,   

    DATE(BCI_DATA) AS DATA,   

    WEEK(BCI_DATA) AS SEMANA,   

    WEEKDAY(BCI_DATA) AS DIA_SEMANA;

SQL SELECT

  BCI_CON_CODIGO AS BCC_CODIGO,

    BCI_COMPLEMENTO,

  BCI_VALOR,

  BCI_REGISTRO,

  BCI_DC,

  // ENTRADA

    CASE

           WHEN BCI_DC = '1'

           THEN (BCI_VALOR)

           ELSE

              0

           END

           AS VALOR_ENTRADA,

  // SAIDA

    CASE

           WHEN BCI_DC = '-1'

           THEN (BCI_VALOR)

           ELSE

              0

           END

           AS VALOR_SAIDA,

           BCI_DATA

FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';

//--- Bancos / Contas ---//

SQL SELECT

  BCC_NUMERO,

  BCC_CODIGO

FROM BANCOS_CONTAS;

LOAD * INLINE [

BCC_CODIGO,BCC_NUMERO,Nome_Conta

11,11000,Banco Brasil 11000-0

];

Labels (1)
1 Solution

Accepted Solutions
felipe_dutra
Partner - Creator
Partner - Creator

André,

teste se estas expressões te atendem:

//SD. INICIAL

If(BCC_CODIGO <> Above(BCC_CODIGO),

      SALDO_INICIAL + If(DATA = Min({1}TOTAL <BCC_CODIGO> DATA), 0, Sum({$<DATA={"<$(=Max(DATA))"}>}TOTAL <BCC_CODIGO> VALOR_ENTRADA - VALOR_SAIDA)),

      Rangesum(Above([SD. INICIAL]), Above(Sum(VALOR_ENTRADA - VALOR_SAIDA)))

)

//SALDO DIA

Sum(VALOR_ENTRADA - VALOR_SAIDA) + [SD. INICIAL]

Abs,

Felipe

View solution in original post

10 Replies
aderlanrm
Partner - Specialist
Partner - Specialist

Olá André, tudo bem?

Você precisa fazer a "ligação" entre essas informações.

Observe que no seu script você tem apenas o saldo, você precisa dizer quando foi esse saldo, logo, ao escolher a data aparecerá o valor correspondente.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
andre_tonini
Creator II
Creator II
Author

Oi Aderlan, td ótimo e vc?

        Certo, realmente não fiz a ligação entre a data e saldo inicial LOAD * INLINE, porém se Eu definir a data desse saldo inicial a expressão que tenho como SD. INICIAL não funciona.

If(IsNull(Above(Sum(VALOR_ENTRADA - VALOR_SAIDA))),

      SALDO_INICIAL,

        Above([SALDO DIA]))

        Anexo postei o .qvw se puder me dar uma nova dica lhe agradeço muito.

      Um abraço

      André Tonini

felipe_dutra
Partner - Creator
Partner - Creator

André,

teste se estas expressões te atendem:

//SD. INICIAL

If(BCC_CODIGO <> Above(BCC_CODIGO),

      SALDO_INICIAL + If(DATA = Min({1}TOTAL <BCC_CODIGO> DATA), 0, Sum({$<DATA={"<$(=Max(DATA))"}>}TOTAL <BCC_CODIGO> VALOR_ENTRADA - VALOR_SAIDA)),

      Rangesum(Above([SD. INICIAL]), Above(Sum(VALOR_ENTRADA - VALOR_SAIDA)))

)

//SALDO DIA

Sum(VALOR_ENTRADA - VALOR_SAIDA) + [SD. INICIAL]

Abs,

Felipe

aderlanrm
Partner - Specialist
Partner - Specialist

Olá André,

Talvez a dica do Felipe funcione, mas na minha opinião, você precisa acertar o modelo antes de tentar qualquer expressão.

No arquivo que você anexou, a ligação está sendo feita somente pelo codigo, você precisa "dizer" em que dia aquele saldo inicial, então, ao escolher o dia diferente daquele o valor na coluna "saldo inicial" será diferente, talvez zero.

Então, a partir dai, entra os cálculos, seja no script (recomendado) ou no objeto.

Exemplo:

LOAD CO,

    DA,

    (NumSum(SI, peek('SI'))+EN)-SA as SI,

    EN,

    SA;

LOAD * INLINE [

CO,DA,SI,EN,SA

11,1/6/14,1600,0,0

11,2/6/14,,10,0

11,3/6/14,,0,20];

CO DA SI EN SA
111/6/14160000
112/6/141610100
113/6/141590020

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
andre_tonini
Creator II
Creator II
Author

Bom dia Aderlan, td bem?

Acabei precisando deixar de lado esse assunto do Extrato, por alguns dias, mas agora essa semana pretendo solucionar.
Realmente estou "apanhando" para conseguir filtrar determinada data em que apresente o saldo inicial (que é o saldo final do último dia) + entrada - saída = saldo final do dia.

Acredito que seja a forma como estou tratando a minha expressão o problema.
1) No mês de fevereiro defini um saldo inicial correspondente ao dia desse saldo.
1 Filtro Mês Fevereiro.jpg

2) Agora se eu tentar utilizar o calendário acima, para saber o saldo do dia 25/02/2014 por exemplo ele aparece como saldo inicial zero.

25022014.jpg

3) Se eu tentar filtrar o mês de março/2014 no calendário acima não está buscando o saldo final como saldo, para 03/2014.
SALDO_MES.jpg

Caso possa me ajudar desde já agradeço, pois com certeza é alguma falha que estou cometendo e não sei atualmente como resolver!

Anexo segue .qvw caso seja útil.

Abraço,

André Tonini

aderlanrm
Partner - Specialist
Partner - Specialist

Fala André, tudo bem, graças a Deus.

Então, o teu modelo de dados está com problema, tem muita chave sintética, isso pode lhe atrapalhar, convém eliminar essas chaves em primeiro lugar, isso resultará em uma tabela onde você poderá trabalhar os dados com o comando resident, com o exemplo que passei a cima.

Observe que quando usa os comandos no objeto, faz com que os cálculos fique responsivo aos filtros, nesse caso, é interessante que os cálculos sejam feitos no script, para quando usar os filtros, o resultado seja o mesmo.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
pablolabbe
Luminary Alumni
Luminary Alumni

Olá André,

  Sua demanda é o caso clássico em que se calcula o saldo inicial no script e não no layout. Sugiro você dar uma olhada neste outro post  Razão Contábil que vai te dar uma idéia de como calcular o saldo em script.

Abraço,

Pablo Labbe

andre_tonini
Creator II
Creator II
Author

Olá Pablo, tudo bem?
Segui sua orientação, porém não sei se entendi - como segue abaixo o script, mas ao carregar ocorre um erro de que coloca que existe nome de campos iguais, mas não identifiquei no LOAD * INLINE campos com mesma descrição!

erro_carga.png

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';

SET DayNames='seg;ter;qua;qui;sex;sáb;dom';

ODBC CONNECT TO Microsys;

//--- Bancos Movimentos ---//

LOAD *,   

    YEAR(BCI_DATA) AS ANO,

    MONTH(BCI_DATA) AS MES,

    DAY(BCI_DATA) AS DIA,   

    DATE(BCI_DATA) AS DATA,   

    WEEK(BCI_DATA) AS SEMANA,   

    WEEKDAY(BCI_DATA) AS DIA_SEMANA;

SQL SELECT

  BCI_CON_CODIGO AS BCC_CODIGO,

    BCI_COMPLEMENTO,

  BCI_VALOR,

  BCI_REGISTRO,

  BCI_DC,

  // ENTRADA

    CASE

           WHEN BCI_DC = '1'

           THEN (BCI_VALOR)

           ELSE

              0

           END

           AS VALOR_ENTRADA,

  // SAIDA

    CASE

           WHEN BCI_DC = '-1'

           THEN (BCI_VALOR)

           ELSE

              0

           END

           AS VALOR_SAIDA,

           BCI_DATA

FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';

//--- Bancos / Contas ---//

SQL SELECT

  BCC_NUMERO,

  BCC_CODIGO

FROM BANCOS_CONTAS;

// ---- Saldo Inicial ---- //

LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];

LOAD * INLINE [

BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

];

pablolabbe
Luminary Alumni
Luminary Alumni

André,

O problema está aqui

// ---- Saldo Inicial ---- //

3º  LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];

1º LOAD * INLINE [

BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

];

No 2º load você criou um novo campo e está usando o * trazendo todos os campos do load anterior inclusive o campo original que tem o mesmo nome.

Sugiro fazer o seguinte ajuste para resolver o problema de execução do script:

3º  LOAD *, [SALDO_INICIAL_AJUSTADO]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL_AJUSTADO];

1º LOAD * INLINE [

BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

];

Abraço,

Pablo Labbe