Sumarizar com DbExpress
Caros colegas,
Tenho um sistema de clientes e preciso sumarizar os cheques emitidos.
Já consegui trazer o maior cheque (MAX), o menor cheque (MIN), a médias dos cheques (AVG) e a quantidade de cheques emitidos (COUNT). Criei-os como campos agregados.
Agora estou precisando sumarizar os cheques que ainda estão em aberto, isto é, que ainda não foram compensados. Na tabela existe um campo onde marco a situação do cheque.
Tentei fazer da seguinte forma, também com campos agregados:
Criei um índice no ClientDataSet: idxStatus e alterei o GrouppingLevel de 0 para 1
Adicionei um Agregate na propriedade Agregates do ClientDataSet e alterei o GrouppingLevel para 1 também
Criei um AgregateField no FieldsEditor e configurei da seguinte forma:
Active: True;
Expression: SUM(CHQ_VALOR);
GrouppingLevel: 1;
IndexName: idxStatus;
Porém não funcionou como esperado.
Está sumarizando corretamente, mas está sumarizando agrupado por todos os Status, isto é:
-Status----Valor--
----A-----1.253,25
----C-----6.358,22
A-Aberto
C-Compensado
E o que ocorre também é que se eu navegar pela tabela, irá me apresentar sempre o sumário do status corrente (aquele em que estou setado na tabela), mas eu gostaría de trazer apenas os cheques que estão em aberto. Existe alguma forma de trazer apenas esta opção? (Aberto) Pois eu preciso apresentar em um Label o total, em valores, para os cheques nesta condição.
Obrigado pela atenção.
Tenho um sistema de clientes e preciso sumarizar os cheques emitidos.
Já consegui trazer o maior cheque (MAX), o menor cheque (MIN), a médias dos cheques (AVG) e a quantidade de cheques emitidos (COUNT). Criei-os como campos agregados.
Agora estou precisando sumarizar os cheques que ainda estão em aberto, isto é, que ainda não foram compensados. Na tabela existe um campo onde marco a situação do cheque.
Tentei fazer da seguinte forma, também com campos agregados:
Criei um índice no ClientDataSet: idxStatus e alterei o GrouppingLevel de 0 para 1
Adicionei um Agregate na propriedade Agregates do ClientDataSet e alterei o GrouppingLevel para 1 também
Criei um AgregateField no FieldsEditor e configurei da seguinte forma:
Active: True;
Expression: SUM(CHQ_VALOR);
GrouppingLevel: 1;
IndexName: idxStatus;
Porém não funcionou como esperado.
Está sumarizando corretamente, mas está sumarizando agrupado por todos os Status, isto é:
-Status----Valor--
----A-----1.253,25
----C-----6.358,22
A-Aberto
C-Compensado
E o que ocorre também é que se eu navegar pela tabela, irá me apresentar sempre o sumário do status corrente (aquele em que estou setado na tabela), mas eu gostaría de trazer apenas os cheques que estão em aberto. Existe alguma forma de trazer apenas esta opção? (Aberto) Pois eu preciso apresentar em um Label o total, em valores, para os cheques nesta condição.
Obrigado pela atenção.
Rafs
Curtidas 0
Respostas
Xisto
27/07/2004
Acho que nao entendi direito, tambem tenho um aplicativo com dados de cheque de clientes, mas faco completamente diferente.
Os dados que chamo de RESUMO (maior,menor, media dos cheques) obtenho via istrucao SQL), depois com uma nova instrucao SQL puxo todos os registros (todos os cheque emitidos por um cliente por ex.) e jogo em um dbgrid para serem visualizados.
É mais ou menos isto que vc usa ?
Os dados que chamo de RESUMO (maior,menor, media dos cheques) obtenho via istrucao SQL), depois com uma nova instrucao SQL puxo todos os registros (todos os cheque emitidos por um cliente por ex.) e jogo em um dbgrid para serem visualizados.
É mais ou menos isto que vc usa ?
GOSTEI 0
Rafs
27/07/2004
É um pouco diferente.
Estou utilizando o ClientDataSet e criando campos agregados eu posso recuperar estas informações (maior, menor, média e quantidade) sem precisar realizar uma instrução SQL a parte. Isto me ajuda em ganho de performance. Porém eu não estou conseguindo trazer o valor total somente para os cheques em aberto, isto é, para quando o Status é igual a ´A´.
Não gostaría de realizar mais uma instrução SQL, para não diminuir a performance do sistema, pois tenho um cliente com quase 1.000.000 de cheques cadastrados no BD e, acredite, ele não quer apagar nenhum... rs
Sendo assim, gostaría de realizar com campos agregados, isto se possível.
Estou utilizando o ClientDataSet e criando campos agregados eu posso recuperar estas informações (maior, menor, média e quantidade) sem precisar realizar uma instrução SQL a parte. Isto me ajuda em ganho de performance. Porém eu não estou conseguindo trazer o valor total somente para os cheques em aberto, isto é, para quando o Status é igual a ´A´.
Não gostaría de realizar mais uma instrução SQL, para não diminuir a performance do sistema, pois tenho um cliente com quase 1.000.000 de cheques cadastrados no BD e, acredite, ele não quer apagar nenhum... rs
Sendo assim, gostaría de realizar com campos agregados, isto se possível.
GOSTEI 0
Rômulo Barros
27/07/2004
Sendo assim, gostaría de realizar com campos agregados, isto se possível.
Pode sim. Para isso, basta vc utilizar um filtro no clientdataset:
[b:5b1a5d31cc][color=red:5b1a5d31cc]ClientDataSet.Filter := ´Status = ´´A´´´;
ClientDataSet.Filtered := True;[/color:5b1a5d31cc][/b:5b1a5d31cc] :P :P :P
GOSTEI 0
Rafs
27/07/2004
[quote:3500f86091=´Undeclared Identifier´]
Pode sim. Para isso, basta vc utilizar um filtro no clientdataset:
[b:3500f86091][color=red:3500f86091]ClientDataSet.Filter := ´Status = ´´A´´´;
ClientDataSet.Filtered := True;[/color:3500f86091][/b:3500f86091] :P :P :P[/quote:3500f86091]
Bem lembrado... :D
Apesar de que desta forma só poderei listar os cheques que estão em aberto, mas no caso eu preciso listar todos os cheques.
Acho que farei da seguinte forma. Ao abrir o ClientDataSet, manterei o filtro ativo para recuperar o valor dos cheques em aberto e armazená-lo em variável, depois desativo o filtro e apresento os cheques no Grid.
Obrigado a todos.. :wink:
Sendo assim, gostaría de realizar com campos agregados, isto se possível.
Pode sim. Para isso, basta vc utilizar um filtro no clientdataset:
[b:3500f86091][color=red:3500f86091]ClientDataSet.Filter := ´Status = ´´A´´´;
ClientDataSet.Filtered := True;[/color:3500f86091][/b:3500f86091] :P :P :P[/quote:3500f86091]
Bem lembrado... :D
Apesar de que desta forma só poderei listar os cheques que estão em aberto, mas no caso eu preciso listar todos os cheques.
Acho que farei da seguinte forma. Ao abrir o ClientDataSet, manterei o filtro ativo para recuperar o valor dos cheques em aberto e armazená-lo em variável, depois desativo o filtro e apresento os cheques no Grid.
Obrigado a todos.. :wink:
GOSTEI 0