ในฐานะนักวิเคราะห์ข้อมูลเชิงระบบ การทำความเข้าใจการเติบโตและการเปลี่ยนแปลงสัดส่วนของปัจจัยต่างๆ เมื่อเวลาผ่านไป (Time Series Analysis) คือหัวใจสำคัญของการเล่าเรื่องข้อมูล (Data Storytelling) องค์ประกอบภาพที่ทรงพลังที่สุดในการนำเสนอแนวคิดนี้คือ **Area Chart** หรือแผนภูมิพื้นที่
Area Chart ไม่ได้เป็นเพียงการลากเส้นกราฟ แต่เป็นการเติมพื้นที่สีทึบใต้เส้นกราฟ เพื่อเน้นย้ำถึง “ปริมาณสะสม” (Cumulative Volume) และการเปลี่ยนแปลงสัดส่วนของส่วนประกอบย่อย (Component Contribution) เมื่อเวลาผ่านไป การใช้งานที่ถูกต้องจะช่วยให้ผู้บริหารเห็นภาพรวมของการเติบโตที่ขับเคลื่อนโดยส่วนประกอบใด
Area Chart: ความท้าทายทางสถาปัตยกรรมข้อมูล
ในมุมมองของ System Architect การคำนวณข้อมูลสะสม (Running Total) และการหาอัตราส่วนการเปลี่ยนแปลงของหลายปัจจัยพร้อมกันตามช่วงเวลา เป็นโจทย์ที่ซับซ้อนกว่าการใช้ฟังก์ชัน `SUM()` ธรรมดา เนื่องจากเราต้องการการคำนวณแบบต่อเนื่อง (Sequential Calculation) ที่ต้องอ้างอิงค่าก่อนหน้าเสมอ
นี่คือจุดที่ PostgreSQL เข้ามามีบทบาทสำคัญ ด้วยคุณสมบัติขั้นสูงอย่าง **Window Functions** (เช่น `SUM() OVER (…)`) และ **Common Table Expressions (CTE)** ทำให้เราสามารถจัดการชุดข้อมูลเชิงเวลาที่ซับซ้อนเหล่านี้ได้อย่างมีประสิทธิภาพและเป็นระเบียบที่สุด
การคำนวณข้อมูลสะสมด้วย PostgreSQL Window Functions
ในการสร้าง Area Chart ที่แสดงการสะสมของหลายมิติ เราต้องใช้ Window Functions เพื่อคำนวณผลรวมที่สะสมมาจนถึงแถวปัจจุบัน (Running Total) และคำนวณสัดส่วนเทียบกับผลรวมทั้งหมดในแต่ละช่วงเวลา
ตัวอย่างการคำนวณ (SQL Implementation)
สมมติว่าเรามีตาราง `sales_data` ที่เก็บยอดขายรายเดือนของสินค้าหลายชนิด เราต้องการคำนวณยอดขายสะสมรวม และสัดส่วนของสินค้าแต่ละชนิดเมื่อเทียบกับยอดรวมสะสม:
SQL
WITH raw_data AS (
-- จำลองข้อมูลยอดขายรายเดือน
SELECT '2023-01-01'::date AS report_date, 'Apple' AS product, 100 AS sales_amount UNION ALL
SELECT '2023-01-01'::date, 'Banana', 50 UNION ALL
SELECT '2023-02-01'::date, 'Apple', 120 UNION ALL
SELECT '2023-02-01'::date, 'Banana', 80 UNION ALL
SELECT '2023-03-01'::date, 'Apple', 150 UNION ALL
SELECT '2023-03-01'::date, 'Banana', 100
)
SELECT
report_date,
product,
sales_amount,
-- 1. คำนวณยอดขายสะสมของสินค้าแต่ละชนิด (Running Total per Product)
SUM(sales_amount) OVER (PARTITION BY product ORDER BY report_date) AS cumulative_sales_product,
-- 2. คำนวณยอดขายรวมสะสมทั้งหมด (Overall Cumulative Total)
SUM(sales_amount) OVER (ORDER BY report_date) AS overall_cumulative_total,
-- 3. คำนวณสัดส่วนของสินค้าชนิดนี้ต่อยอดรวมสะสมทั้งหมด
(SUM(sales_amount) OVER (PARTITION BY product ORDER BY report_date) * 1.0 / SUM(sales_amount) OVER (ORDER BY report_date)) AS proportion_to_overall
FROM raw_data
ORDER BY report_date, product;
บทสรุป: การผสานพลังระหว่าง Data Science และ Database
การสร้าง Area Chart ที่สมบูรณ์แบบจึงไม่ใช่แค่เรื่องของการเลือกกราฟ แต่คือการออกแบบกระบวนการคำนวณข้อมูลที่แม่นยำและมีประสิทธิภาพสูงสุด การใช้ PostgreSQL ร่วมกับ Window Functions ทำให้เราสามารถเปลี่ยนชุดข้อมูลดิบ (Raw Data) ให้กลายเป็นข้อมูลเชิงลึก (Insight) ที่พร้อมสำหรับการนำเสนอในรูปแบบการสะสมและสัดส่วนได้อย่างไร้รอยต่อ
การเข้าใจการทำงานของ `OVER (PARTITION BY … ORDER BY …)` คือกุญแจสำคัญที่ Senior Architect ทุกคนต้องรู้ เพื่อให้สามารถออกแบบระบบ Back-end ที่รองรับการวิเคราะห์ข้อมูลเชิงเวลาที่ซับซ้อนได้อย่างมั่นคงและเชื่อถือได้