Thursday, 2 April 2020

Drill with in the report in jasper reports

This is an extended tutorial of my post back in 2015, today, I needed to implement the same and struggled to get the old example working, so, thought of documenting it again with server export available for the community. 

https://jasper-bi-suite.blogspot.com/2015/01/tip-intercharts-drill-down-technique-in.html
Tip : Intra charts/components linking technique in Jasper reports : HTML5 charts inter linking with in report in Jasper Studio 6.x

Problem Statement : 
How to drill down with in the report ? How to get dynamic data displayed in a table component when performed click action on particular slices from Pie Chart ?

Pie : Number of cars by Occupation
Table : Details of customer by occupation





Solution :  
1) Create a parameter say : $P{paramOccupation} for main report and give default value
         In this example default value is given as "Manual"
2) Create a data set and create the same parameter and filter the query with this parameter.
3) Design Pie graph and table component.
4) For the Pie graph category create Bucket Property
        paramOccupation = $F{paramOccupation}
4) For the pie graph Hyperlink give _report = path of the same report from J.Server.
    and add parameter as shown in below image.
  i.e.,
(NOTE : Assuming the report is published already to the server)

_report="/Praveen/Drill_with_in_reports"                  
  paramOccupation=Level1.paramOccupation   (This is the Bucket property created for category)


5) Make sure the table component "Dateset" is added with Parameter
       i.e., In table component properties --> Parameters -->
         Add paramOccupation=${paramOccupation}

6) Re publish the report to Jasper Server and hide the paramOccupation parameter
         
Download the server zip file for live example :  Click Me
Import this zip to your jasper server and run "Drill with in report" report from "Praveen" folder


JRXML: 
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 7.2.0.final using JasperReports Library version 6.6.0  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Drill with in reports" pageWidth="1000" pageHeight="842" columnWidth="960" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4b0b908c-5907-4119-9d85-00671c2494af">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="foodmart"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="ireport.jasperserver.url" value="http://localhost:8080/jasperserver-pro/"/>
<property name="ireport.jasperserver.user" value="superuser"/>
<property name="ireport.jasperserver.reportUnit" value="/Praveen/Drill_with_in_reports"/>
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
<property name="ireport.jasperserver.report.resource" value="/Praveen/Drill_with_in_reports_files/main_jrxml"/>
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="Dataset1-table" uuid="24749c25-55a5-49c2-be2d-f5dc1ec06acb">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="foodmart"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<parameter name="paramOccupation" class="java.lang.String"/>
<queryString>
<![CDATA[select * from customer where occupation= $P{paramOccupation} limit 10]]>
</queryString>
<field name="customer_id" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="customer_id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="account_num" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.label" value="account_num"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="lname" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="lname"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="fname" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="fname"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="mi" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="mi"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="address1" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="address1"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="address2" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="address2"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="address3" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="address3"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="address4" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="address4"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="city" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="city"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="state_province" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="state_province"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="postal_code" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="postal_code"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="country" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="country"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="customer_region_id" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="customer_region_id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="phone1" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="phone1"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="phone2" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="phone2"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="birthdate" class="java.sql.Date">
<property name="com.jaspersoft.studio.field.label" value="birthdate"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="marital_status" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="marital_status"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="yearly_income" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="yearly_income"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="gender" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="gender"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="total_children" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="total_children"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="num_children_at_home" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="num_children_at_home"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="education" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="education"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="date_accnt_opened" class="java.sql.Date">
<property name="com.jaspersoft.studio.field.label" value="date_accnt_opened"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="member_card" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="member_card"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="occupation" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="occupation"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="houseowner" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="houseowner"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="num_cars_owned" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="num_cars_owned"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="fullname" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="fullname"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
</subDataset>
<parameter name="paramOccupation" class="java.lang.String">
<defaultValueExpression><![CDATA["Manual"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select occupation, sum(num_cars_owned) cars  from customer
group by occupation
 order by occupation]]>
</queryString>
<field name="occupation" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="occupation"/>
<property name="com.jaspersoft.studio.field.tree.path" value="customer"/>
</field>
<field name="cars" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.label" value="cars"/>
</field>
<background>
<band splitType="Stretch"/>
</background>
<summary>
<band height="420" splitType="Stretch">
<componentElement>
<reportElement x="0" y="80" width="400" height="340" uuid="07f8444d-5b85-4950-aefc-4e4b3f62c16c"/>
<hc:chart xmlns:hc="http://jaspersoft.com/highcharts" xsi:schemaLocation="http://jaspersoft.com/highcharts http://jaspersoft.com/schema/highcharts.xsd" type="Pie">
<hc:chartSetting name="default">
<hc:chartProperty name="title.text" value=""/>
<hc:chartProperty name="credits.enabled" value="false"/>
<hc:chartProperty name="credits.href" value=""/>
<hc:chartProperty name="credits.text" value=""/>
<hc:chartProperty name="yAxis.title.text" value=""/>
<hc:chartProperty name="chart.zoomType" value="xy"/>
<hc:chartProperty name="plotOptions.pie.showInLegend" value="true"/>
</hc:chartSetting>
<multiAxisData>
<multiAxisDataset/>
<dataAxis axis="Rows">
<axisLevel name="Level1">
<labelExpression><![CDATA["Level Label expression"]]></labelExpression>
<axisLevelBucket class="java.lang.Comparable">
<bucketExpression><![CDATA[$F{occupation}]]></bucketExpression>
<labelExpression><![CDATA[]]></labelExpression>
<bucketProperty name="paramOccupation"><![CDATA[$F{occupation}]]></bucketProperty>
</axisLevelBucket>
</axisLevel>
</dataAxis>
<dataAxis axis="Columns"/>
<multiAxisMeasure name="Measure1" class="java.lang.Number" calculation="Nothing">
<labelExpression><![CDATA["Cars"]]></labelExpression>
<valueExpression><![CDATA[$F{cars}]]></valueExpression>
</multiAxisMeasure>
</multiAxisData>
<hc:series name="Measure1">
<hc:contributor name="SeriesItemHyperlink">
<hc:contributorProperty name="hyperlinkTarget" valueType="Constant" value="Self"/>
<hc:contributorProperty name="hyperlinkType" valueType="Constant" value="ReportExecution"/>
<hc:contributorProperty name="_report" valueType="Expression">
<hc:valueExpression><![CDATA["/Praveen/Drill_with_in_reports"]]></hc:valueExpression>
</hc:contributorProperty>
<hc:contributorProperty name="paramOccupation" valueType="Bucket" value="Level1.paramOccupation"/>
</hc:contributor>
</hc:series>
</hc:chart>
</componentElement>
<componentElement>
<reportElement x="420" y="60" width="540" height="60" uuid="100a6fe4-7159-4de7-a8af-ec3abb357d30">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
</reportElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="Dataset1-table" uuid="10d6d999-3da9-4530-b062-fe2fc3cd4330">
<datasetParameter name="paramOccupation">
<datasetParameterExpression><![CDATA[$P{paramOccupation}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
<jr:column width="110" uuid="6eabdd56-6307-4a16-b24d-0bd7f9d8af20">
<jr:columnHeader style="Table_CH" height="30">
<staticText>
<reportElement x="0" y="0" width="110" height="30" uuid="8a77e308-071d-4305-b50d-0a4c2469db0c"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[account_num]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="110" height="30" uuid="894b8b9c-47e8-4943-9ce9-1d5d9da3895d"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{account_num}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="130" uuid="bd701c03-37dd-4ac7-9d88-bbd6ad9e6ef3">
<jr:columnHeader style="Table_CH" height="30">
<staticText>
<reportElement x="0" y="0" width="130" height="30" uuid="e0a9941b-2b4e-473c-98bf-c1dc4039b841"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[occupation]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="130" height="30" uuid="8d464964-5455-4479-9ff3-30badb9dbc13"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{occupation}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="140" uuid="ec42ddc4-b560-400f-ae5c-2661a02e2607">
<jr:columnHeader style="Table_CH" height="30">
<staticText>
<reportElement x="0" y="0" width="140" height="30" uuid="81af8ec1-0046-4c1e-87dd-fdc7693678b9"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[country]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="140" height="30" uuid="bb5ab017-42ca-49cd-847a-94c55853cc52"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{country}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="160" uuid="313a65a4-3caa-494e-a6fb-502eb5030755">
<jr:columnHeader style="Table_CH" height="30">
<staticText>
<reportElement x="0" y="0" width="160" height="30" uuid="ceb0dd75-ca3f-4351-a343-93e4d33515f0"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[total_children]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="160" height="30" uuid="ef9155f3-1e33-405f-9b7f-861d02b5fd95"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{total_children}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
<textField>
<reportElement x="30" y="20" width="130" height="30" uuid="859c4814-f726-45ab-b928-07af80779061"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="10" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{paramOccupation}]]></textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>

No comments:

Post a Comment