In our previous example, we had used FusionCharts to plot a chart using data stored in database. We'll now extend that example itself to create a drill-down chart which can show more information.
If you recall from previous example, we were showing the sum of factory output in a pie chart as under:
In this example, we'll extend this example, so that when a user clicks on a pie slice for a factory, he can drill down to see date wise production for that factory.
To set up the pie chart to enable links for drill-down involves just minor tweaking of our previous BasicDBExample.jsp. We basically need to add the link attribute for each <set> element. We create a new page Default.jsp from the previous page in DBExample folder with the following code changes:
<%@ include file="../Includes/DBConn.jsp"%>
<%
/*We've imported FusionChartsHelper, which contains function
to help us encode the URL.*/
%>
<%@ page import="com.infosoftglobal.fusioncharts.FusionChartsHelper"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.Date"%>
<HTML>
<HEAD>
<TITLE>FusionCharts Free - Database and Drill-Down Example</TITLE>
<%
%>
<SCRIPT LANGUAGE="Javascript" SRC="../../FusionCharts/FusionCharts.js"></SCRIPT>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
.text{
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</HEAD>
<BODY>
<CENTER>
<h2><a href="http://www.fusioncharts.com" target="_blank">FusionCharts Free</a> Database and Drill-Down Example</h2>
<h4>Click on any pie slice to see detailed data.</h4>
<%
Statement st1=null,st2=null;
ResultSet rs1=null,rs2=null;
String strQuery="";
String strXML="";
strXML = "<graph caption='Factory Output report' subCaption='By Quantity' decimalPrecision='0' showNames='1' numberSuffix=' Units'
pieSliceDepth='30' formatNumberScale='0'>";
strQuery = "select * from Factory_Master";
st1=oConn.createStatement();
rs1=st1.executeQuery(strQuery);
String factoryId=null;
String factoryName=null;
String totalOutput="";
String strDataURL="";
while(rs1.next()) {
factoryId=rs1.getString("FactoryId");
factoryName=rs1.getString("FactoryName");
strQuery = "select sum(Quantity) as TotOutput from Factory_Output where FactoryId=" + factoryId;
st2=oConn.createStatement();
rs2 = st2.executeQuery(strQuery);
if(rs2.next()){
totalOutput=rs2.getString("TotOutput");
}
FusionChartsHelper chartsHelper = new FusionChartsHelper();
strDataURL = chartsHelper.encodeDataURL("Detailed.jsp?FactoryId="+factoryId,"false",response);
strXML += "<set name='" + factoryName + "' value='" +totalOutput+ "' link='"+strDataURL+"' />";
rs2=null;
st2=null;
}
strXML += "</graph>";
try {
if(null!=rs1){
rs1.close();
rs1=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the resultset");
}
try {
if(null!=st1) {
st1.close();
st1=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the statement");
}
try {
if(null!=oConn) {
oConn.close();
oConn=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the connection");
}
%>
<jsp:include page="../Includes/FusionChartsRenderer.jsp" flush="true">
<jsp:param name="chartSWF" value="../../FusionCharts/FCF_Pie3D.swf" />
<jsp:param name="strURL" value="" />
<jsp:param name="strXML" value="<%=strXML %>" />
<jsp:param name="chartId" value="FactorySum" />
<jsp:param name="chartWidth" value="650" />
<jsp:param name="chartHeight" value="450" />
<jsp:param name="debugMode" value="false" />
<jsp:param name="registerWithJS" value="false" />
</jsp:include>
<BR>
<BR>
<a href='../NoChart.html' target="_blank">Unable to see the chart above?</a><BR>
<H5><a href='../default.htm'>« Back to list of examples</a></h5>
</CENTER>
</BODY>
</HTML>
As you can see in the code above, we're doing the following:
- Include FusionCharts.js JavaScript class to enable easy embedding of FusionCharts.
- We then include DBConn.jsp, which gives the connection to our database.
- Thereafter, we generate the XML data document by iterating through the resultset. We store the XML data in strXML variable. To each <set> element, we add the link attribute, which points to Detailed.jsp - the page that contains the chart to show details. We pass the factory id of the respective factory by appending it to the link.
- Finally, we render the chart by including FusionChartsRenderer and passing strXML as parameter to it.
Let's now shift our attention to Detailed.jsp page.
The page Detailed.jsp contains the following code:
<%@ include file="../Includes/DBConn.jsp"%>
<%@ page import="com.infosoftglobal.fusioncharts.FusionChartsHelper"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.text.SimpleDateFormat"%>
<HTML>
<HEAD>
<TITLE>FusionCharts Free - Database and Drill-Down Example</TITLE>
<%
%>
<SCRIPT LANGUAGE="Javascript" SRC="../../FusionCharts/FusionCharts.js"></SCRIPT>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
.text{
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</HEAD>
<BODY>
<CENTER>
<h2><a href="http://www.fusioncharts.com" target="_blank">FusionCharts Free</a> Database and Drill-Down Example</h2>
<h4>Detailed report for the factory</h4>
<%
String factoryId=null;
factoryId = request.getParameter("FactoryId");
String chartCode="";
if(null!=factoryId){
FusionChartsHelper colorHelper= new FusionChartsHelper();
ResultSet rs=null;
String strQuery;
Statement st=null;
java.sql.Date date=null;
java.util.Date uDate=null;
String uDateStr="";
String quantity="";
String strXML="";
strXML = "<graph caption='Factory " +factoryId +" Output ' subcaption='(In Units)' xAxisName='Date' showValues='1'
decimalPrecision='0'>";
strQuery = "select * from Factory_Output where FactoryId=" +factoryId;
st=oConn.createStatement();
rs = st.executeQuery(strQuery);
while(rs.next()){
date=rs.getDate("DatePro");
quantity=rs.getString("Quantity");
if(date!=null) {
uDate=new java.util.Date(date.getTime());
// Format the date so that the displayed date is easy to read
SimpleDateFormat sdf=new SimpleDateFormat("d/M");
uDateStr=sdf.format(uDate);
}
strXML += "<set name='" +uDateStr+"' value='" +quantity+"' color='" + colorHelper.getFCColor() + "'/>";
}
strXML +="</graph>";
try {
if(null!=rs){
rs.close();
rs=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the resultset");
}
try {
if(null!=st) {
st.close();
st=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the statement");
}
try {
if(null!=oConn) {
oConn.close();
oConn=null;
}
}catch(java.sql.SQLException e){
System.out.println("Could not close the connection");
}
%>
<jsp:include page="../Includes/FusionChartsRenderer.jsp" flush="true">
<jsp:param name="chartSWF" value="../../FusionCharts/FCF_Column2D.swf" />
<jsp:param name="strURL" value="" />
<jsp:param name="strXML" value="<%=strXML%>" />
<jsp:param name="chartId" value="FactoryDetailed" />
<jsp:param name="chartWidth" value="600" />
<jsp:param name="chartHeight" value="300" />
<jsp:param name="debugMode" value="false" />
<jsp:param name="registerWithJS" value="false" />
</jsp:include>
<% }
%>
<BR>
<a href='Default.jsp?animate=0'>Back to Summary</a> <BR>
<BR>
<a href='../NoChart.html' target="_blank">Unable to see the chart above?</a><BR>
<H5><a href='../default.htm'>« Back to list of examples</a></h5>
</CENTER>
</BODY>
</HTML>
In this page, we're:
- Including FusionCharts.js JavaScript class, to enable easy embedding of FusionCharts.
- Requesting the factory id for which we've to show detailed data. This data was sent to us as querystring, as a part of pie chart link.
- We get the requisite data for this factory from database and then convert it into XML using string concatenation.
- Finally, we render a Column 2D chart to show detailed data, by including FusionChartsRenderer.jsp.
When you now run the app, you'll see the detailed page as under:
|