Cálculos no iReport[RESOLVIDO]

5 respostas
M

Olá pessoal, eu estou tentando fazer um cálculo um pouco complexo no iReport. Eu já fiz esse cálculo em SQL, porém não estou conseguindo criar um Field no iReport.
Meu cálculo é o seguinte. Eu tenho que encontrar a porcentagem de alunos que acertaram a primeira questão toda, na primeira tentativa. Fiz isso em SQL, segue abaixo o código:

SELECT ROUND(((SELECT COUNT(jogador.matJogador) FROM desempenho INNER JOIN jogador

ON desempenho.matJogador= jogador.matJogador

INNER JOIN questao

ON questao.codQuestao = desempenho.codQuestao

WHERE  LENGTH(questao.gabarito) = desempenho.acerto)*100)/ COUNT(matJogador),1)

FROM jogador;

Quando eu executo o código a cima, na query do relatório, ele compila, porém não sei como criar um Field que receba o resultado dessa query. Já tentei dividir o código em partes por subrelatório e depois ir passando os resultados(de cada subrelatório) como parâmetro até chegar no resultado final, porém não consegui fazer. Não sei como usar os parâmetros e as variáveis para executar esse cálculo. Se alguém poder me dar uma dica de como fazer isso, agradeceria muito.

5 Respostas

J

Na query do iReport, você pode definir os nomes a cada campo, como no exemplo que adaptei da sua query.

Em seguida, no painel “Report Inspector”, na parte de variáveis (variables), você cria uma nova variável, com o nome que você quiser, mude a classe dela de acordo com o retorno da sua query (int, BigDecimal, etc), na opção “calculation” também use de acordo com sua query (sum, count, average, etc) e em “variable expression” você coloca o campo que você definiu na query. Neste exemplo “quantidade”. Aí você coloca essa variável onde deve apresentar os dados.

Isto deve resolver para você, eu fiz um relatório aqui com uma query similar a esta, entretanto ela fazia 2 somas e 1 contagem, e funcionou desta forma que estou te falando. 8)

M

Muito obrigado cara, funcionou perfeitamente. Obrigado mesmo. Agora aproveitando o momento, gostaria de perguntar se alguém sabe como gerar duas tabelas na Band Detail, sem que elas fiquem cruzadas. Ou seja, eu estou criando um subReport com as respostas dos alunos, esse subReport gera a tabela direitinho, com as colunas nome e reposta, eu criei esse subrelatório para que assim eu podesse fazer outra query, tipo SELECT * FFROM jogador. Então pra fazer pra fazer a query do cálculo que coloquei a cima, eu criei o relatório principal. Fiz isso pra poder usar duas, ou mais, querys em um mesmo relatório. Porém quando se usa subreport, ele imprime as tabelas intercaladas. Como se fosse assim:

1ª linha Tabela principal
1ª linha Tabela subreport

2ª linha Tabela principal
2ª linha Tabela subreport

3ª linha Tabela principal
3ª linha Tabela subreport
.
.
.

Eu gostaria de imprimir Toda tabela principal e abaixo a tabela secundária, tipo assim:

1ª linha Tabela principal
2ª linha Tabela principal
3ª linha Tabela principal

1ª linha Tabela subreport
2ª linha Tabela subreport
3ª linha Tabela subreport

Alguém pode me dar uma dica de como fazer isso? Desde já agradeço.

J

Bom nunca fiz nada parecido, mas você tem várias opções para “testar”.
Você pode criar duas tabelas e colocar nelas os valores que precisa através dos filtros, ou ainda criar um “group report”. Ainda você pode usar uma “cross tab” que, na minha opinião, encaixaria melhor na sua situação, pois você tem perguntas e uma quantidade de respostas.

Estes tempos encontrei um tutorial (através do google) onde um colega da comunidade ensinava a fazer um crosstab de relatório mensal de vendas. Não tenho mais o link infelizmente.

M

Beleza, vou dar uma pesquisada aqui. Muito obrigado pela ajuda. Fica na paz.

J

Se resolveu a sua dúvida inicial do tópico, edite o primeiro post e coloque RESOLVIDO no título/assunto.

Abraços

Criado 26 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 5
Participantes 2