como gerar um jpgraph de multiplas linhas no mysql
Pessoal,
Estou tendo problemas para plotar na tela um gráfico de multiplas linhas gerado pela biblioteca jpgraph com base de dados mysql.
Abaixo seque o código:
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_line.php');
include('conexao.php');
$sql_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from tabela
group by canal, dt_primeiro_contato";
$consulta_chart_1 = $sql_chart_1;
$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());
if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}
// Setup the graph
$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");
$theme_class_chart_1=new UniversalTheme;
$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);
$graph_chart_1->img->SetAntiAliasing();
$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);
$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);
$graph_chart_1->xgrid->SetColor('#E3E3E3');
// Create the first line
while($row_chart_1 = mysql_fetch_array($res_chart_1)) {
$num_rows_chart_1 = mysql_num_rows($res_chart_1);
for ($i = 0; $i <= $num_rows_chart_1; $i++) {
$p1_chart_1[$i] = new LinePlot(0,$tx_conv_real_chart_1[$i]);
$graph_chart_1->Add($p1_chart_1[$i]);
$p1_chart_1[$i]->SetLegend($canal_chart_1[$i]);
$p1_chart_1[$i]->value->Show();
}
}
$graph_chart_1->legend->SetFrameWeight(1);
// Output line
$graph_chart_1->Stroke();
Estou tendo problemas para plotar na tela um gráfico de multiplas linhas gerado pela biblioteca jpgraph com base de dados mysql.
Abaixo seque o código:
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_line.php');
include('conexao.php');
$sql_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from tabela
group by canal, dt_primeiro_contato";
$consulta_chart_1 = $sql_chart_1;
$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());
if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}
// Setup the graph
$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");
$theme_class_chart_1=new UniversalTheme;
$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);
$graph_chart_1->img->SetAntiAliasing();
$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);
$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);
$graph_chart_1->xgrid->SetColor('#E3E3E3');
// Create the first line
while($row_chart_1 = mysql_fetch_array($res_chart_1)) {
$num_rows_chart_1 = mysql_num_rows($res_chart_1);
for ($i = 0; $i <= $num_rows_chart_1; $i++) {
$p1_chart_1[$i] = new LinePlot(0,$tx_conv_real_chart_1[$i]);
$graph_chart_1->Add($p1_chart_1[$i]);
$p1_chart_1[$i]->SetLegend($canal_chart_1[$i]);
$p1_chart_1[$i]->value->Show();
}
}
$graph_chart_1->legend->SetFrameWeight(1);
// Output line
$graph_chart_1->Stroke();
comentários (0)
suspender
Lista de Respostas:
12/02/2011 12:02am
(~13 anos atrás)
(~13 anos atrás)
Mateus, é complicado avaliar seu código assim. Ninguém sabe qual é, e como é o seu BD. E você não falou exatamente qual é o problema. Imagino que a pergunta deveria ser postada nos fóruns de perguntas.
Mas para ajudar, sugiro que faça as consultas no BD e mostre o resultado com "echo" e não plote o gráfico. Se tudo que está exibindo está corrento, use as funções para plotar. Faça aos poucos.
Mas para ajudar, sugiro que faça as consultas no BD e mostre o resultado com "echo" e não plote o gráfico. Se tudo que está exibindo está corrento, use as funções para plotar. Faça aos poucos.
14/02/2011 4:44pm
(~13 anos atrás)
(~13 anos atrás)
Rubens, obrigado pela help.
Segue abaixo algumas informações sobre o código:
Consulta SQL:
$consulta_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from
(
select
d.desc_canal,
sum(case when a.ind_gc = '0' then a.qtd_registros else 0 end) as qt_envio_mail,
sum(case when a.ind_gc = '1' then a.qtd_registros else 0 end) as qt_envio_gc,
sum(case when a.ind_gc = '0' and a.grupo = 'Não Trabalhado' then 0 else a.qtd_registros end) as qt_util,
sum(case when a.ind_gc = '0' and a.grupo in('Agendamento','Venda','Não Venda') then a.qtd_registros else 0 end) as qt_contatado,
sum(case when a.ind_gc = '0' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_mail,
sum(case when a.ind_gc = '1' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_gc,
date_format(b.dt_primeiro_contato, '%Y%m') as dt_primeiro_contato
from
db_dbma_web.tb_res_leads a,
db_dbma_web.tb_mailing b,
db_dbma_web.tb_jobs c,
db_dbma_web.depara_canal d
where
a.cod_mailing = b.cod_mailing and
b.cod_job = c.cod_job and
c.cod_canal = d.cod_canal
and A.regiao = 3 group by
8,1
) as tabres
group by
3,1
order by 3,1";
Resultado da Consulta:
canal | tx_conv_real | dt_primeiro_contato
ATD | -97.76 | 201007
Televendas | -9.87 | 201102
ATD | -47.76 | 201008
Televendas | -4.87 | 201103
ATD | -07.76 | 201009
Televendas | -0.87 | 201104
ATD | 47.76 | 201010
Televendas | 4.87 | 201105
Meu problema:
No lugar de plotar uma linha para o canal ATD e outra linha para o canal Televendas esta sendo plotada apenas uma linha para todas as informações da consulta.
Referencias do gráfico:
Eixo x: dt_primeiro_contato
Eixo y: tx_conv_real
Legenda: canal
O Codigo:
$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());
if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}
// Setup the graph
$data_chart_1 = array (
$canal_chart_1,
$tx_conv_real_chart_1,
$dt_primeiro_contato_chart_1
);
$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");
$theme_class_chart_1=new UniversalTheme;
$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);
$graph_chart_1->img->SetAntiAliasing();
$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);
$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xgrid->SetColor('#E3E3E3');
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);
// Create the first line
for($i = 0; $i < sizeof($data_chart_1[0][$i]); ++$i) {
$p1_chart_[$i] = new LinePlot($data_chart_1[1]);
$graph_chart_1->Add($p1_chart_[$i]);
$p1_chart_[$i]->SetLegend($data_chart_1[0][$i]);
$p1_chart_[$i]->value->Show();
}
$graph_chart_1->legend->SetFrameWeight(1);
// Output line
$filename_chart_1 = "images/temp/resultado_campanha1".$_GET['id'].".png";
unlink($filename_chart_1);
$graph_chart_1->Stroke("images/temp/resultado_campanha1".$_GET['id'].".png");
Segue abaixo algumas informações sobre o código:
Consulta SQL:
$consulta_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from
(
select
d.desc_canal,
sum(case when a.ind_gc = '0' then a.qtd_registros else 0 end) as qt_envio_mail,
sum(case when a.ind_gc = '1' then a.qtd_registros else 0 end) as qt_envio_gc,
sum(case when a.ind_gc = '0' and a.grupo = 'Não Trabalhado' then 0 else a.qtd_registros end) as qt_util,
sum(case when a.ind_gc = '0' and a.grupo in('Agendamento','Venda','Não Venda') then a.qtd_registros else 0 end) as qt_contatado,
sum(case when a.ind_gc = '0' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_mail,
sum(case when a.ind_gc = '1' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_gc,
date_format(b.dt_primeiro_contato, '%Y%m') as dt_primeiro_contato
from
db_dbma_web.tb_res_leads a,
db_dbma_web.tb_mailing b,
db_dbma_web.tb_jobs c,
db_dbma_web.depara_canal d
where
a.cod_mailing = b.cod_mailing and
b.cod_job = c.cod_job and
c.cod_canal = d.cod_canal
and A.regiao = 3 group by
8,1
) as tabres
group by
3,1
order by 3,1";
Resultado da Consulta:
canal | tx_conv_real | dt_primeiro_contato
ATD | -97.76 | 201007
Televendas | -9.87 | 201102
ATD | -47.76 | 201008
Televendas | -4.87 | 201103
ATD | -07.76 | 201009
Televendas | -0.87 | 201104
ATD | 47.76 | 201010
Televendas | 4.87 | 201105
Meu problema:
No lugar de plotar uma linha para o canal ATD e outra linha para o canal Televendas esta sendo plotada apenas uma linha para todas as informações da consulta.
Referencias do gráfico:
Eixo x: dt_primeiro_contato
Eixo y: tx_conv_real
Legenda: canal
O Codigo:
$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());
if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}
// Setup the graph
$data_chart_1 = array (
$canal_chart_1,
$tx_conv_real_chart_1,
$dt_primeiro_contato_chart_1
);
$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");
$theme_class_chart_1=new UniversalTheme;
$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);
$graph_chart_1->img->SetAntiAliasing();
$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);
$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xgrid->SetColor('#E3E3E3');
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);
// Create the first line
for($i = 0; $i < sizeof($data_chart_1[0][$i]); ++$i) {
$p1_chart_[$i] = new LinePlot($data_chart_1[1]);
$graph_chart_1->Add($p1_chart_[$i]);
$p1_chart_[$i]->SetLegend($data_chart_1[0][$i]);
$p1_chart_[$i]->value->Show();
}
$graph_chart_1->legend->SetFrameWeight(1);
// Output line
$filename_chart_1 = "images/temp/resultado_campanha1".$_GET['id'].".png";
unlink($filename_chart_1);
$graph_chart_1->Stroke("images/temp/resultado_campanha1".$_GET['id'].".png");
14/02/2011 7:25pm
(~13 anos atrás)
(~13 anos atrás)
Gostaria de ver um exemplo deste gráfico funcionando com a base de dados mysql.
http://jpgraph.net/features/src/show-example.php?target=new_line1.php
http://jpgraph.net/features/src/show-example.php?target=new_line1.php