FinOps Foundation ระบุไว้ใน FinOps Framework: Unit Economics Capability ว่า Unit Economics เป็นหนึ่งใน Capability ขั้น Run ซึ่งเป็นระดับสุดท้ายของ Maturity Model ทีมจะมาถึงจุดนี้ได้ต้องผ่านขั้น Inform (รู้ว่าใช้เท่าไร), Optimize (ลดได้เท่าไร) แล้วจึงเข้าสู่ขั้น Operate ที่ใช้ Unit Cost เป็น North Star Metric
ทำไมเรื่องนี้ระเบิดในปี 2026? คำตอบสั้นๆ คือ AI Workload ทีม ML ที่รัน Inference บน GPU ทำให้บิลพุ่งทะลุเพดาน ผู้บริหารเริ่มถามว่า "เราคืนทุนจาก Feature AI ใหม่นี้ได้เมื่อไร" คำตอบจะให้ได้ต่อเมื่อรู้ Cost per Inference Call และเชื่อมกับ Revenue per Customer ตรงนี้แหละครับที่การวัด Unit Cost เปลี่ยนสถานะจาก Nice-to-have มาเป็นข้อมูลที่ต้องส่งให้ Board ทุกไตรมาส
วิธีเลือก Unit Metric ที่เหมาะกับธุรกิจของคุณ
กับดักที่ผมเห็นบ่อยที่สุดคือ ทีมพยายามวัด Unit Cost ทั้ง 20 ตัวพร้อมกันตั้งแต่วันแรก สุดท้ายเลิกล้มเพราะข้อมูลไม่ครบ คำแนะนำของผมคือเริ่มจาก 1-3 ตัวที่สอดคล้องกับ Business Model จริงๆ
SaaS Multi-Tenant
ตัวที่ต้องวัดอันดับแรกคือ Cost per Tenant และ Cost per Monthly Active User (MAU) ถ้าโมเดลคิดเงินตาม Seat ให้เพิ่ม Cost per Paid Seat
ตัวอย่างจริงที่ผมเจอ บริษัท B2B SaaS แห่งหนึ่ง พอเริ่มวัด ก็พบว่า Top 10 Tenant กิน 67% ของต้นทุนคลาวด์ แต่จ่ายแค่ 28% ของ MRR เพราะอยู่ใน Free Trial ที่ไม่ Cap การใช้งาน หลังจาก Cap Free Tier และเปลี่ยน Pricing Plan ลดต้นทุนต่อ Tenant ลงได้ 38% (ใช้เวลาประมาณ 6 เดือน ไม่ใช่ Magic Bullet)
E-commerce
วัด Cost per Order, Cost per Cart Session, และ Cost per Search Query ตัวสุดท้ายสำคัญมากเพราะ Search Service มักใช้ Elasticsearch หรือ OpenSearch ที่กินทรัพยากรหนัก แยกออกมาแล้วจะเห็น ROI ชัดเจน
AI/ML Product
วัด Cost per Inference, Cost per Training Run, และ Cost per Token สำหรับ LLM ตัวเลข Cost per Token ในปี 2026 เป็นมาตรฐานใหม่ที่ทุกคนใช้เทียบ Self-hosted Model กับ API ของ OpenAI หรือ Anthropic ถ้ายังไม่ได้วัด ถือว่าคุณ Blind ในเกมนี้ครับ
วิธีคำนวณต้นทุนคลาวด์ต่อลูกค้า (Cost per Customer)
การคำนวณ Cost per Customer ในระบบ Multi-Tenant แบ่งเป็น 3 ประเภทตามรูปแบบการ Allocation
-- ตัวอย่าง SQL บน Athena / AWS Cost and Usage Report (CUR 2.0)
SELECT
resource_tags['tenant_id'] AS tenant_id,
DATE_TRUNC('month', line_item_usage_start_date) AS billing_month,
SUM(line_item_unblended_cost) AS direct_cost_usd
FROM cur2_database.cur2_table
WHERE line_item_usage_start_date >= DATE '2026-05-01'
AND resource_tags['tenant_id'] IS NOT NULL
GROUP BY 1, 2
ORDER BY direct_cost_usd DESC;
# ตัวอย่าง dbt Model สำหรับ Cost per Tenant แบบ Multi-cloud
# models/marts/finops/fct_cost_per_tenant.sql
{{ config(materialized='incremental', unique_key=['tenant_id', 'billing_date']) }}
WITH focus_unified AS (
SELECT * FROM {{ ref('stg_aws_focus') }}
UNION ALL
SELECT * FROM {{ ref('stg_azure_focus') }}
UNION ALL
SELECT * FROM {{ ref('stg_gcp_focus') }}
),
direct AS (
SELECT
tags['tenant_id'] AS tenant_id,
DATE(billing_period_start) AS billing_date,
SUM(effective_cost) AS direct_cost_usd
FROM focus_unified
WHERE tags['tenant_id'] IS NOT NULL
GROUP BY 1, 2
),
shared AS (
SELECT
DATE(billing_period_start) AS billing_date,
SUM(effective_cost) AS shared_cost_usd
FROM focus_unified
WHERE tags['tenant_id'] IS NULL
AND service_category IN ('Networking', 'Storage')
GROUP BY 1
),
usage AS (
SELECT tenant_id, billing_date, api_calls
FROM {{ ref('fct_tenant_usage') }}
)
SELECT
d.tenant_id,
d.billing_date,
d.direct_cost_usd,
s.shared_cost_usd * (u.api_calls / SUM(u.api_calls) OVER (PARTITION BY d.billing_date)) AS allocated_shared,
d.direct_cost_usd + (s.shared_cost_usd * (u.api_calls / SUM(u.api_calls) OVER (PARTITION BY d.billing_date))) AS total_cost_per_tenant_usd
FROM direct d
JOIN shared s USING (billing_date)
JOIN usage u USING (tenant_id, billing_date)
{% if is_incremental() %}
WHERE d.billing_date > (SELECT MAX(billing_date) FROM {{ this }})
{% endif %}
เช่น เปลี่ยนวิธีนับ "Active User" จาก Login รายเดือนเป็น API Call กราฟ Unit Cost จะดูเหมือนลดลงทันที 60% โดยไม่ได้ลดต้นทุนจริง วิธีกัน คือ Lock นิยามไว้เป็นเอกสาร และเปลี่ยนเฉพาะตอนเริ่ม Fiscal Year เท่านั้น
2. ไม่รวม Cost ของ Egress และ Data Transfer
ค่า Data Transfer มักโผล่บน CUR แบบไม่มี Tag เพราะเป็น Network-level Cost ทีมที่ไม่ Allocate ส่วนนี้จะคำนวณ Unit Cost ต่ำกว่าจริง 15-25% สำหรับ Workload ที่ Heavy เรื่อง Data (ผมเจอ Case หนึ่งที่ลืมตัวนี้แล้วรายงานผิดไปทั้งไตรมาส)
3. ใช้ Cost รายเดือนเดียวตัดสินใจ
เดือนกุมภาพันธ์มี 28 วัน เดือนมกราคมมี 31 วัน Unit Cost รายวันต่างกัน 10% โดยไม่ต้องทำอะไรเลย ใช้ Cost per Customer per Day หรือ Normalize เป็นรายเดือน 30 วันเสมอ