ป้ายกำกับ: Pdf

Joget: สร้างรายงาน pdf excelJoget: สร้างรายงาน pdf excel

การสร้างระบบงานที่สมบูรณ์ใน 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

  1. Design Template: ออกแบบ Layout รายงาน (JRXML) โดยใช้ Jaspersoft Studio
  2. Configure Data Source: เมื่อนำเข้าสู่ Joget ให้ระบุว่าแหล่งข้อมูลหลักคือ PostgreSQL และใช้ Query ที่เราออกแบบไว้ในขั้นตอนที่ 2 เพื่อให้ได้ชุดข้อมูลที่มีโครงสร้างสมบูรณ์ที่สุด
  3. Parameter Mapping: กำหนดค่า Parameter ต่างๆ (เช่น ID ผู้ใช้งาน, ช่วงวันที่) โดยสามารถส่งค่าเหล่านี้ผ่าน URL หรือจาก Workflow ได้อย่างแม่นยำ

🔗 การเรียกดูรายงานด้วย API Call

การเรียกใช้ Report จะทำผ่าน Endpoint เฉพาะของ Joget ซึ่งต้องระบุพารามิเตอร์สำคัญให้ครบถ้วน เพื่อให้ระบบทราบว่าจะดึงข้อมูลชุดใดและในรูปแบบไฟล์อะไร:

  • action=report: ระบุว่าเป็นการเรียกดูรายงาน
  • menuId: คือ Custom ID ของ Report ที่เราสร้างไว้ใน Joget User View
  • type: กำหนด Format (pdf หรือ xls)
  • Query String Parameters: ส่วนสำคัญที่สุดคือการส่งค่า Parameter เข้าไป เช่น &member_id=xxxxx ซึ่งค่าเหล่านี้ควรถูกใช้เพื่อกรองข้อมูลให้ PostgreSQL ดึงมาเฉพาะชุดที่ต้องการเท่านั้น เพื่อประสิทธิภาพสูงสุดในการทำงาน

การออกแบบ Query ในระดับ PostgreSQL ให้เหมาะสมกับ Parameters ที่จะรับเข้ามา จะช่วยลดภาระของระบบและทำให้รายงานโหลดได้รวดเร็ว แม้ว่าจะมีข้อมูลจำนวนมหาศาลก็ตาม

✅ สรุปแนวทางการสร้าง Report ระดับ Senior Architect

การสร้างรายงานที่ยอดเยี่ยมใน Joget ไม่ใช่แค่การลากวาง แต่คือการคิดแบบ System Specialist ที่เข้าใจทั้ง 3 ส่วน คือ:

  1. PostgreSQL Layer: ออกแบบ Query ให้มีประสิทธิภาพสูงสุด ใช้ CTEs, Window Functions หรือ JSONB เพื่อจัดโครงสร้างข้อมูลให้พร้อมใช้งาน
  2. Joget Layer: กำหนด User View และ Report Definition อย่างถูกต้อง รวมถึงการจัดการ Parameter Flow
  3. Client/API Layer: สร้าง URL Call ที่สมบูรณ์แบบและส่งค่า Parameters เข้าไปอย่างแม่นยำ

ด้วยการผสานพลังของ PostgreSQL ในการเตรียมข้อมูลเข้ากับความสามารถของ Joget ทำให้เราสามารถสร้างระบบรายงานที่ทั้งทรงพลัง รวดเร็ว และมีความซับซ้อนในการวิเคราะห์ได้ตามต้องการ