Problema Relatorio IReport

10 respostas
AlanLojudice

Bom dia pessoal,

Estou com um problema aqui pra gerar meu relatorio, mostrando a media de um campo hora. É assim eu tenho um relatorio que mostra as Areas, um tempo medio de atendimento de uma area e o total de atendimento de cada area tambem.
Gostaria de no final do relatorio, mostrar a media gerar do tempo medio de atendimento. Mas não consigo, o problema é que na query tive que transformar o campo pra string pra formatar corretamente.

Alguem sabe uma maneira de calcular essa media no Ireport?

obrigado

10 Respostas

maniacs

Transformar campo em string para poder formatar corretamente ? :?
Mostra ai como você formatou…

AlanLojudice

Segue um metodo que faz a Query do relatorio. Eu chamo uma funcao pra formatar.

public static String getQueryTotalAtendimento(Date periodoInicial, Date periodoFinal, String area){ //" Where dat.Data Between '" + periodoInicial + " 00:00:00' And '" + periodoFinal + " 23:59:59' " + Format formatoInical = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); Format formatoFinal = new SimpleDateFormat("yyyy-MM-dd 23:59:59"); return " Select count(ada.descricao) as total, " + " ada.descricao " + " From estado est " + " Join estadoocorrencia eoc On est.oidobj = eoc.oid_estadoocorrencia " + " Join listacaracterizacaoareadeatuacaoraiz lca on eoc.oid_estadoocorrencia = lca.oid_estadoocorrencia " + " Join caracterizacaoareadeatuacaoraiz caa on caa.oid_caracterizacaoareadeatuacaoraiz = lca.oid_caracterizacaoareadeatuacaoraiz " + " Join listavaloresareadeatuacao lva on lva.oid_caracterizacaoareadeatuacaoraiz = caa.oid_caracterizacaoareadeatuacaoraiz " + " And lva.oid_listavaloresareadeatuacao = 0 " + " Join valorareadeatuacao vaa on vaa.oid_valorareadeatuacao = lva.oid_valoresareadeatuacao " + " Join areadeatuacao ada on ada.oid_areadeatuacao = vaa.areadeatuacao " + " Join listacjareasdeatuacao lja on lja.oid_areadeatuacao = ada.oid_areadeatuacao " + " Join conjuntoareadeatuacao cja on cja.oid_cjareadeatuacao = lja.oid_cjareadeatuacao " + " And cja.tipo = Atendimento " + " Join ematendimento eat on eat.oid_ematendimento = eoc.oid_estadoocorrencia " + " Join ematendimentotelefonico ett on ett.oid_ematendimentotelefonico = eat.oid_ematendimento " + " Join relatorio rel On rel.oidobj = est.relatorio " + " Join periodo per On per.oid_ = rel.id_periodo_atendimento " + " Join datahora dat On per.id_termino_datahora = dat.oid_ " + " Where dat.Data Between '" + formatoInical.format(periodoInicial)+ "' And '" + formatoFinal.format(periodoFinal)+ "' " + " And ada.descricao = '" + area + "' "+ "Group By ada.descricao"; }

AlanLojudice

mandei o cara errado...rs

public static String getQueryTempoAtendimento(Date periodoInicial, Date periodoFinal){
	
	Format formatoInical = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
	Format formatoFinal = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
	
	return 	"    Select ada.descricao As Area, " + 
			"          TO_CHAR(Avg(dat.data - dai.data), 'DD: HH:MI:SS') As Media, " + 
			"          Count(*) As TotalCosiderado " + 
			"     From objeto obj " + 
			"     Join ocorrencia oco                           On obj.oidobj = oco.oid_ocor " + 
			"     Join listaestados lie                         On obj.oidobj = lie.oid_objeto " + 
			"     Join estado est                               On est.oidobj = lie.id_estado " + 
			"     Join estadoocorrencia eoc                     On est.oidobj = eoc.oid_estadoocorrencia " + 
			"     Join listacaracterizacaoareadeatuacaoraiz lca On eoc.oid_estadoocorrencia = lca.oid_estadoocorrencia " + 
			"     Join caracterizacaoareadeatuacaoraiz caa      On caa.oid_caracterizacaoareadeatuacaoraiz = lca.oid_caracterizacaoareadeatuacaoraiz " + 
			"     Join listavaloresareadeatuacao lva            On lva.oid_caracterizacaoareadeatuacaoraiz = caa.oid_caracterizacaoareadeatuacaoraiz " + 
			"                                                  And lva.oid_listavaloresareadeatuacao = 0 " + 
			"     Join valorareadeatuacao vaa                   On vaa.oid_valorareadeatuacao = lva.oid_valoresareadeatuacao " + 
			"     Join areadeatuacao ada                        On ada.oid_areadeatuacao = vaa.areadeatuacao " + 
			"     Join listacjareasdeatuacao lja                On lja.oid_areadeatuacao = ada.oid_areadeatuacao " + 
			"     Join conjuntoareadeatuacao cja                On cja.oid_cjareadeatuacao = lja.oid_cjareadeatuacao " + 
			"                                                  And cja.tipo = 

La no toChar que transformo pra string corrento, antes vinha 0 years, 0 mouths e bla bla blaAtendimento

La no toChar que transformo pra string corrento, antes vinha 0 years, 0 mouths e bla bla bla " + 
			"     Join relatorio rel                            On rel.oidobj = est.relatorio " + 
			"     Join periodo per                              On per.oid_ = rel.id_periodo_atendimento " + 
			"     Join datahora dai                             On per.id_inicio_datahora = dai.oid_ " + 
			"     Join datahora dat                             On per.id_termino_datahora = dat.oid_ " + 
			"     Join atuacaoocorrencia ato                    On oco.atuacaodeencerramento_id = ato.oidobj " + 
			"     Join datahora dat1                            On ato.horadaatuacao = dat1.oid_ " + 
			"    Where oco.atuacaodeencerramento_id Is Not Null " + 
			"   AND dat.Data Between '" + formatoInical.format(periodoInicial)+ "' And '" + formatoFinal.format(periodoFinal)+ "' " +
			" Group By ada.descricao ";
    }

La no toChar que transformo pra string corrento, antes vinha 0 years, 0 mouths e bla bla bla

maniacs

hmmm eu faço o seguinte…
ou eu trago a diferença dataInicial dataFinal e somo no final
ou trago separado dataFinal e dataInicial e calculo com o iReport
ou transformar essa string em Date para poder calcular…

AlanLojudice

Acho que transformar pra data é melhor,

Mas ai vc transforma no ireport?

maniacs

isso… usa as variaveis para poder calcular faz ela somar a casa linha…

AlanLojudice

Mas como que faço pra converter no IReport para Date?
Vou em propriedades – editor de expressoes e altero la pra date? Nao consegi fazer isso…

maniacs

me mostre como retorna a string de um dia…

AlanLojudice

o relatorio é mais ou menos assim

Área Média (min) Efetivos
Trânsito 01: 12:48:54 3
SETEC 00: 12:02:20 2
Segurança 00: 12:09:32 188
Total AQUI MEDIA TOTAL 193

O campo media é dd: hh:mm:ss

maniacs

axo que é mais facil pra ti calcular pelo java… segue exemplo

(new Long(($F{DT_INICIAL}.getTime() - $F{DT_FINAL}.getTime()) / 86400000L ))
retorna um long com diferenca de dias de cada um...
Criado 27 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 10
Participantes 2