การสร้างระบบงานที่สมบูรณ์ใน Joget ไม่ได้จบแค่การจัดการ Workflow เท่านั้น แต่ยังรวมถึงความสามารถในการดึงข้อมูลและนำเสนอรายงาน (Reporting) ในรูปแบบ PDF หรือ Excel ด้วย การทำ Report ที่มีประสิทธิภาพสูงนั้น หัวใจสำคัญอยู่ที่การเตรียมข้อมูล (Data Source) ซึ่งหากเราใช้ PostgreSQL เป็นฐานข้อมูลหลัก เราจะสามารถใช้ฟังก์ชันขั้นสูงของ Postgres เพื่อสร้างชุดข้อมูลที่ซับซ้อนก่อนส่งให้ Joget ประมวลผลรายงานได้
💡 หลักการทำงาน: การเชื่อมโยง Report Engine กับ PostgreSQL
โดยทั่วไปแล้ว Joget จะใช้เครื่องมือภายนอก เช่น JasperReports ในการออกแบบรูปแบบ (Template) ของรายงาน แต่ข้อมูลที่ป้อนเข้าไปใน Template นั้น ต้องมาจาก Query ที่มีประสิทธิภาพสูง ซึ่งเป็นหน้าที่ของ PostgreSQL เราจะเน้นไปที่การเขียน SQL ขั้นสูงเพื่อดึงข้อมูลให้พร้อมที่สุดก่อนส่งไปยัง Report Engine
⚙️ การเตรียมข้อมูลด้วย Advanced PostgreSQL Queries
แทนที่จะใช้แค่ SELECT * FROM table, ในงานรายงานจริงเรามักต้องมีการรวมกลุ่ม (Aggregation), การคำนวณค่าสะสม (Running Totals) หรือการจัดการกับข้อมูลที่สัมพันธ์กันหลายระดับ ซึ่งเป็นจุดที่ฟีเจอร์ของ PostgreSQL จะเปล่งประกาย
ตัวอย่างเช่น หากต้องการดึงยอดขายรวมรายเดือน พร้อมระบุรายละเอียดสินค้าในรูปแบบ JSON เพื่อให้ Report Engine นำไปใช้ได้ง่าย เราสามารถใช้ Common Table Expressions (CTE) และฟังก์ชัน jsonb_agg:
SQL
SQL
WITH monthly_sales AS (
SELECT
DATE_TRUNC('month', sale_date) AS sales_month,
SUM(amount) AS total_revenue
FROM sales_data
GROUP BY 1
)
SELECT
ms.sales_month,
ms.total_revenue,
jsonb_agg(jsonb_build_object('product', p.name, 'quantity', s.qty)) AS product_details
FROM monthly_sales ms
JOIN sales_data sd ON DATE_TRUNC('month', sd.sale_date) = ms.sales_month
JOIN products p ON sd.product_id = p.id
GROUP BY 1, 2;
WITH monthly_sales AS (...) ในตัวอย่างนี้คือการใช้ CTE เพื่อคำนวณยอดรวมรายเดือนก่อน จากนั้นจึงนำผลลัพธ์ไป Join กับตารางอื่น และรวบรวมรายละเอียดสินค้าทั้งหมดให้อยู่ในรูปแบบ JSONB ซึ่งเป็นโครงสร้างข้อมูลที่ Report Engine สามารถอ่านและประมวลผลต่อได้ง่ายมาก
🚀 การตั้งค่า Report ใน Joget
- Design Template: ออกแบบ Layout รายงาน (JRXML) โดยใช้ Jaspersoft Studio
- Configure Data Source: เมื่อนำเข้าสู่ Joget ให้ระบุว่าแหล่งข้อมูลหลักคือ PostgreSQL และใช้ Query ที่เราออกแบบไว้ในขั้นตอนที่ 2 เพื่อให้ได้ชุดข้อมูลที่มีโครงสร้างสมบูรณ์ที่สุด
- Parameter Mapping: กำหนดค่า Parameter ต่างๆ (เช่น ID ผู้ใช้งาน, ช่วงวันที่) โดยสามารถส่งค่าเหล่านี้ผ่าน URL หรือจาก Workflow ได้อย่างแม่นยำ
🔗 การเรียกดูรายงานด้วย API Call
การเรียกใช้ Report จะทำผ่าน Endpoint เฉพาะของ Joget ซึ่งต้องระบุพารามิเตอร์สำคัญให้ครบถ้วน เพื่อให้ระบบทราบว่าจะดึงข้อมูลชุดใดและในรูปแบบไฟล์อะไร:
action=report: ระบุว่าเป็นการเรียกดูรายงานmenuId: คือ Custom ID ของ Report ที่เราสร้างไว้ใน Joget User Viewtype: กำหนด Format (pdf หรือ xls)- Query String Parameters: ส่วนสำคัญที่สุดคือการส่งค่า Parameter เข้าไป เช่น
&member_id=xxxxxซึ่งค่าเหล่านี้ควรถูกใช้เพื่อกรองข้อมูลให้ PostgreSQL ดึงมาเฉพาะชุดที่ต้องการเท่านั้น เพื่อประสิทธิภาพสูงสุดในการทำงาน
การออกแบบ Query ในระดับ PostgreSQL ให้เหมาะสมกับ Parameters ที่จะรับเข้ามา จะช่วยลดภาระของระบบและทำให้รายงานโหลดได้รวดเร็ว แม้ว่าจะมีข้อมูลจำนวนมหาศาลก็ตาม
✅ สรุปแนวทางการสร้าง Report ระดับ Senior Architect
การสร้างรายงานที่ยอดเยี่ยมใน Joget ไม่ใช่แค่การลากวาง แต่คือการคิดแบบ System Specialist ที่เข้าใจทั้ง 3 ส่วน คือ:
- PostgreSQL Layer: ออกแบบ Query ให้มีประสิทธิภาพสูงสุด ใช้ CTEs, Window Functions หรือ JSONB เพื่อจัดโครงสร้างข้อมูลให้พร้อมใช้งาน
- Joget Layer: กำหนด User View และ Report Definition อย่างถูกต้อง รวมถึงการจัดการ Parameter Flow
- Client/API Layer: สร้าง URL Call ที่สมบูรณ์แบบและส่งค่า Parameters เข้าไปอย่างแม่นยำ
ด้วยการผสานพลังของ PostgreSQL ในการเตรียมข้อมูลเข้ากับความสามารถของ Joget ทำให้เราสามารถสร้างระบบรายงานที่ทั้งทรงพลัง รวดเร็ว และมีความซับซ้อนในการวิเคราะห์ได้ตามต้องการ