JasperReports একটি শক্তিশালী রিপোর্টিং টুল যা multiple grouping এবং nested grouping এর মাধ্যমে ডেটা শৃঙ্খলবদ্ধ এবং বেছে বেছে প্রদর্শন করার ক্ষমতা রাখে। গ্রুপিং ব্যবহার করে আপনি ডেটাকে hierarchical বা multi-level ফরম্যাটে প্রদর্শন করতে পারেন, যা বিশ্লেষণ এবং রিপোর্টের উপস্থাপন আরও কার্যকরী করে তোলে। এই টপিকের মাধ্যমে আমরা Multiple Grouping এবং Nested Grouping কনফিগারেশন কিভাবে করা যায় তা দেখব।
1. Multiple Grouping in JasperReports
Multiple Grouping হল এমন একটি কৌশল যেখানে আপনি একাধিক গ্রুপ তৈরি করে বিভিন্ন শ্রেণীভুক্ত ডেটা উপস্থাপন করেন। এর মাধ্যমে আপনি একাধিক স্তরের গ্রুপিং (যেমন Product Category, Region, Date) করতে পারেন।
Multiple Grouping Example:
ধরা যাক, আমাদের একটি Sales Report রয়েছে যেখানে Product Category, Region, এবং Sales Amount শো করতে হবে।
JRXML for Multiple Grouping:
<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/jasperreports.xsd"
name="MultipleGroupingReport" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<!-- Page Header -->
<pageHeader>
<band height="40">
<textField>
<reportElement x="0" y="0" width="515" height="40"/>
<textFieldExpression><![CDATA["Sales Report"]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<!-- Column Header -->
<columnHeader>
<band height="40">
<textField>
<reportElement x="0" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Product Category"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Region"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Sales Amount"]]></textFieldExpression>
</textField>
</band>
</columnHeader>
<!-- Grouping by Product Category and Region -->
<group name="ProductCategoryGroup">
<groupExpression><![CDATA[$F{productCategory}]]></groupExpression>
<groupHeader>
<band height="30">
<textField>
<reportElement x="0" y="0" width="515" height="30"/>
<textFieldExpression><![CDATA[$F{productCategory}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
<group name="RegionGroup">
<groupExpression><![CDATA[$F{region}]]></groupExpression>
<groupHeader>
<band height="30">
<textField>
<reportElement x="0" y="0" width="515" height="30"/>
<textFieldExpression><![CDATA[$F{region}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
<!-- Detail Section for Sales Amount -->
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{productCategory}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{region}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{salesAmount}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Explanation:
- Product Category Group: এই গ্রুপটি productCategory ফিল্ডের উপর ভিত্তি করে ডেটা গ্রুপিং করবে।
- Region Group: এখানে region ফিল্ডের ভিত্তিতে আরও একটি গ্রুপ তৈরি করা হচ্ছে।
- Detail: এই অংশে প্রতিটি প্রোডাক্ট ক্যাটেগরি এবং রিজিয়নের জন্য salesAmount প্রদর্শিত হবে।
এতে, প্রথমে Product Category অনুযায়ী গ্রুপিং হবে, তারপর প্রতিটি Region অনুযায়ী ডেটা গ্রুপিং হবে।
2. Nested Grouping in JasperReports
Nested Grouping হল একটি উন্নত গ্রুপিং কৌশল যেখানে একটি গ্রুপের মধ্যে আরেকটি গ্রুপ থাকে। এটি multi-level grouping হিসেবে পরিচিত এবং আপনাকে ডেটাকে স্তরের মধ্যে ভাগ করতে সাহায্য করে। উদাহরণস্বরূপ, আপনি প্রথমে Region দ্বারা গ্রুপ করতে পারেন এবং পরে সেই রিজিয়নের ভিতরে Product Category এর ভিত্তিতে আরও গ্রুপ করতে পারেন।
Nested Grouping Example:
ধরা যাক, আমাদের একটি Sales Report রয়েছে, যেখানে Region দ্বারা প্রথম গ্রুপিং এবং Product Category দ্বারা Nested গ্রুপিং করা হবে।
JRXML for Nested Grouping:
<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/jasperreports.xsd"
name="NestedGroupingReport" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<!-- Page Header -->
<pageHeader>
<band height="40">
<textField>
<reportElement x="0" y="0" width="515" height="40"/>
<textFieldExpression><![CDATA["Sales Report"]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<!-- Column Header -->
<columnHeader>
<band height="40">
<textField>
<reportElement x="0" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Region"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Product Category"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Sales Amount"]]></textFieldExpression>
</textField>
</band>
</columnHeader>
<!-- Grouping by Region -->
<group name="RegionGroup">
<groupExpression><![CDATA[$F{region}]]></groupExpression>
<groupHeader>
<band height="30">
<textField>
<reportElement x="0" y="0" width="515" height="30"/>
<textFieldExpression><![CDATA[$F{region}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
<!-- Nested Grouping by Product Category within Region -->
<group name="ProductCategoryGroup">
<groupExpression><![CDATA[$F{productCategory}]]></groupExpression>
<groupHeader>
<band height="30">
<textField>
<reportElement x="0" y="0" width="515" height="30"/>
<textFieldExpression><![CDATA[$F{productCategory}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
</group>
<!-- Detail Section -->
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{region}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{productCategory}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{salesAmount}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Explanation:
- RegionGroup: প্রথমে ডেটা Region অনুযায়ী গ্রুপ হবে।
- ProductCategoryGroup: এরপর, প্রতিটি Region-এর ভিতরে Product Category অনুযায়ী ডেটা গ্রুপ করা হবে।
- Detail: এখানে প্রতি Region এবং Product Category এর জন্য Sales Amount প্রদর্শিত হবে।
এটি একটি nested grouping উদাহরণ যেখানে একটি গ্রুপের মধ্যে আরেকটি গ্রুপ থাকে।
3. Advanced Grouping Techniques
JasperReports-এ grouping আরও কাস্টমাইজ করার জন্য নিচের কিছু advanced টেকনিক ব্যবহার করা যায়:
Group Footer: গ্রুপের শেষে summary, total বা অন্য কোনো তথ্য প্রদর্শন করতে groupFooter ব্যবহার করা হয়।
<groupFooter> <band height="40"> <textField> <reportElement x="0" y="0" width="515" height="30"/> <textFieldExpression><![CDATA["Total: " + $V{totalSales}]]></textFieldExpression> </textField> </band> </groupFooter>Group Header/ Footer with Calculations: প্রতিটি গ্রুপের জন্য পৃথক calculations যেমন Sum, Average, Count করা যায়। উদাহরণস্বরূপ, totalSales এর যোগফল গণনা করা।
<variable name="totalSales" class="java.lang.Double" calculation="Sum"> <variableExpression><![CDATA[$F{salesAmount}]]></variableExpression> </variable>
- Multiple Grouping: একাধিক স্তরের গ্রুপিং JasperReports-এ Row Group এবং Column Group ব্যবহার করে করা যায়, যা ডেটার উপস্থাপনা আরও কার্যকরী করে তোলে।
- Nested Grouping: এটি একাধিক স্তরের ডেটা হায়ারার্কি তৈরি করতে সাহায্য করে, যেখানে একটি গ্রুপের মধ্যে অন্য একটি গ্রুপ থাকে।
- Advanced Grouping Techniques: JasperReports-এ groupFooter এবং calculation functions ব্যবহার করে ডেটা আরও কাস্টমাইজ করা যেতে পারে।
JasperReports-এ grouping এর মাধ্যমে ডেটা প্রক্রিয়া করা এবং রিপোর্টের কাঠামো তৈরি করা বেশ সহজ, যা ব্যবহারকারীর চাহিদা অনুযায়ী ডেটার বিস্তারিত বিশ্লেষণ করতে সাহায্য করে।
Read more