ga4 custom dimension ตั้งค่ายังไง ไม่ให้ track พลาด

คู่มือ ga4 custom dimension สำหรับทีม B2B — scope ไหนใช้ตอนไหน ตั้งค่าใน GTM ให้ข้อมูลเข้าจริง และแก้ปัญหาค่าไม่โชว์ ครบทุกจุดที่พลาดบ่อย

ga4 custom dimension ตั้งค่ายังไง ไม่ให้ track พลาด

ga4 custom dimension คืออะไร ตั้งค่ายังไงให้ข้อมูลเข้าจริง

Last updated: 2026-08-13

คุณส่ง event เข้า GA4 มาหลายสัปดาห์ พารามิเตอร์ก็ยิงถูก แต่พอเปิด report มาดู คอลัมน์ที่อยากได้กลับว่างเปล่า หรือขึ้นเป็น (not set) ทั้งแถว — ปัญหานี้เกือบทั้งหมดไม่ได้อยู่ที่ tag หรือ trigger แต่อยู่ที่คุณยังไม่ได้ลงทะเบียน ga4 custom dimension ให้ตรงกับพารามิเตอร์ที่ส่งเข้าไป

GA4 ไม่ได้เก็บทุกพารามิเตอร์ให้อัตโนมัติเหมือน Universal Analytics รุ่นเก่า ค่าที่คุณส่งมากับ event จะไหลเข้า BigQuery ได้ก็จริง แต่ถ้าอยากเห็นมันใน Explore หรือ standard report คุณต้องบอก GA4 ก่อนว่า “พารามิเตอร์ตัวนี้ ฉันอยากให้เป็นมิติที่ query ได้” บทความนี้จะพาไล่ตั้งแต่ scope ทั้งสามแบบ วิธีตั้งค่าใน GTM ให้ค่าเข้าจริง ไปจนถึงตารางแก้ปัญหาที่ค่าไม่โชว์ — เจาะเฉพาะจุดที่ทีม B2B พลาดกันบ่อยที่สุด

Key Takeaways: ga4 custom dimension คือการลงทะเบียนพารามิเตอร์ (event-scoped) หรือ user property (user-scoped) ให้ query ได้ใน report มี 3 scope: Event, User, Item — เลือกผิด scope ข้อมูลจะกระจายผิดที่ ตัวเลขสำคัญ: standard property ลงได้ 50 event-scoped + 25 user-scoped, ค่าไม่ backfill ย้อนหลัง ต้องตั้งก่อนเก็บ และคาร์ดินาลิตี้สูงเกิน 500 ค่า/วันจะโดนยุบเป็น (other) เข้าใจสามจุดนี้ ปัญหา (not set) หายไปกว่าครึ่ง

ga4 custom dimension — Professional workspace with trading charts and market data on screens, ideal for finance and inve

ga4 custom dimension คืออะไร ทำไม event parameter อย่างเดียวไม่พอ

ga4 custom dimension คือ “สะพาน” ที่ทำให้พารามิเตอร์ดิบที่คุณส่งมากับ event กลายเป็นมิติ (dimension) ที่เอาไปตัด report ได้ พูดให้ตรงกว่านั้น — เวลาคุณยิง event generate_lead พร้อมพารามิเตอร์ lead_type: "demo_request" ตัว GA4 รับค่านั้นเข้าระบบก็จริง แต่จะไม่มีที่ให้คุณเลือกมันเป็นคอลัมน์เลย จนกว่าคุณจะไปลงทะเบียน lead_type เป็น custom dimension

จุดที่คนเข้าใจผิดบ่อยคือคิดว่า “ส่งพารามิเตอร์แล้ว = เห็นใน report” ซึ่งไม่จริง สองอย่างนี้แยกกันชัดเจน:

  • การส่งค่า เกิดที่ฝั่งเก็บข้อมูล (tag/GTM ส่ง event parameter หรือ user property เข้ามา)
  • การลงทะเบียน เกิดที่ฝั่ง GA4 Admin — คุณบอกระบบว่าพารามิเตอร์ชื่อนี้ ให้ทำ index ไว้ให้ query

ถ้าทำแค่ข้อแรก ข้อมูลจะเข้า BigQuery export ได้ (ถ้าเชื่อม BigQuery ไว้) แต่ใน UI ของ GA4 เอง คุณจะหามันไม่เจอ นี่คือเหตุผลที่หลายทีมงงว่า “ข้อมูลมีอยู่ใน BigQuery แต่ทำไม report ว่าง”

อีกเรื่องที่ต้องรู้ตั้งแต่ต้น: custom dimension ไม่ backfill ย้อนหลัง วันที่คุณกดสร้าง มันจะเริ่มเก็บให้ query ได้ตั้งแต่วันนั้นเป็นต้นไป ข้อมูลก่อนหน้าที่ส่งพารามิเตอร์มาแล้วแต่ยังไม่ลงทะเบียน จะเห็นเป็น (not set) ตลอด — ดังนั้นถ้าวางแผน tracking ใหม่ ให้ลงทะเบียน dimension ก่อน แล้วค่อยเปิด traffic เข้า อ่านภาพรวมการวาง data layer และ event ให้ครบก่อนได้ที่ MarTech Analytics & Tracking Guide

Scope 3 แบบ — เลือกผิดตัวเดียว report ก็เพี้ยนทั้ง funnel

หัวใจของ custom dimension อยู่ที่ scope ไม่ใช่ที่ชื่อ เพราะ scope เป็นตัวกำหนดว่า “ค่านี้ผูกกับอะไร” ถ้าเลือกผิด ตัวเลขจะไปโผล่ผิดที่แบบที่ debug ยากมาก GA4 มี 3 scope และแต่ละอันมีโควตาแยกกัน

Event scope — ค่าผูกกับ event ครั้งเดียวนั้น เหมาะกับข้อมูลที่เปลี่ยนได้ทุก interaction เช่น lead_type, form_id, pricing_tier_viewed ค่าจะ valid เฉพาะ event ที่แนบมันมาด้วย standard property ลงได้ 50 ตัว

User scope — ค่าผูกกับตัว user และ “ค้างอยู่” ข้าม session จนกว่าจะเปลี่ยน เหมาะกับคุณสมบัติของคน เช่น account_type (trial/paid), company_size, crm_stage ต้องส่งเข้ามาเป็น user property ไม่ใช่ event parameter ธรรมดา standard property ลงได้ 25 ตัว

Item scope — ใช้กับ e-commerce เท่านั้น ผูกกับสินค้าใน array items เช่น item_brand, item_category งาน B2B ที่ไม่ได้ขายของออนไลน์มักไม่ได้แตะ scope นี้

ตัวอย่างที่พลาดกันบ่อย: จับ crm_stage เป็น event scope

สมมติคุณอยากดูว่า lead ที่อยู่ stage “SQL” มา convert จากช่องทางไหน ถ้าตั้ง crm_stage เป็น event scope มันจะบันทึกค่าเฉพาะตอน event นั้นยิง แล้วพอ user กลับมา session หน้าโดยไม่ได้ยิง event ที่แนบ crm_stage ค่าจะกลายเป็น (not set) ทันที ผลคือ funnel report ของคุณจะเต็มไปด้วยช่องว่าง

ค่าที่เป็น “สถานะของคน” แบบนี้ต้องเป็น user scope ส่งผ่าน user property เพื่อให้มันติดตัว user ไปทุก session จนกว่าจะอัปเดต แนวคิดเดียวกันนี้สำคัญมากตอนต่อ Conversion API — ดูวิธีวางทั้งระบบใน คู่มือ GA4 + GTM + Conversion API

ตั้งค่าจริงใน GTM + GA4 Admin ทีละขั้น

ลำดับที่ถูกต้องมีแค่สองฝั่ง ทำสลับกันไม่ได้:

ฝั่งส่งค่า (GTM): ในแท็ก GA4 Event เปิดส่วน Event Parameters เพิ่มแถว เช่น Parameter Name = lead_type แล้ว Value = {{DLV - lead_type}} (ดึงจาก Data Layer Variable) ถ้าเป็น user property ให้ไปที่ส่วน User Properties แทน เพราะ GA4 แยกสองช่องนี้ชัดเจน ใส่ผิดช่อง = ลงทะเบียนผิด scope ทีหลัง ถ้ายังไม่แม่นเรื่อง variable/trigger ทบทวนได้ที่ GTM Advanced Guide

ฝั่งลงทะเบียน (GA4): ไปที่ GA4 > Admin > Custom definitions > Create custom dimension ตั้ง Dimension name (ชื่อที่จะโชว์ใน report), เลือก Scope, แล้ว Event parameter / User property ให้ สะกดตรงเป๊ะ กับที่ส่งมาจาก GTM ตรงนี้ case-sensitive — lead_type กับ Lead_Type คือคนละตัว

หลังตั้งเสร็จ อย่าเพิ่งเชื่อ ใช้ DebugView (Admin > DebugView) เปิดคู่กับ GTM Preview mode ยิง event ทดสอบแล้วดูว่าพารามิเตอร์เข้ามาพร้อมค่าที่ถูกต้องไหม DebugView โชว์ผลเกือบ real-time ต่างจาก standard report ที่ต้องรอ 24-48 ชั่วโมงกว่าจะประมวลผลครบ — อย่าตกใจถ้า report ยังว่างในวันแรก

ตารางแก้ปัญหา: ค่าไม่โชว์ หรือขึ้น (not set) / (other)

เกือบทุกเคสที่ custom dimension “ไม่ทำงาน” ตกอยู่ในตารางนี้ ดูอาการที่เห็นจริงบน report แล้วไล่หาสาเหตุ ตัวเลข threshold ด้านล่างเป็น spec ของ GA4 ที่ยืนยันได้จาก เอกสาร Custom dimensions ของ Google

อาการที่เห็นใน report สาเหตุน่าจะเป็น สิ่งที่ทำ
ทั้งคอลัมน์เป็น (not set) ก่อนวันที่ X แต่หลังจากนั้นมีค่า สร้าง dimension ทีหลังจากเก็บ data — GA4 ไม่ backfill รับสภาพข้อมูลเก่า, โฟกัสช่วงหลังลงทะเบียน; งานใหม่ให้สร้าง dimension ก่อนเปิด traffic
ค่าว่างทั้งหมด แม้ event ยิงถูก ชื่อ parameter ใน Admin ไม่ตรงกับที่ GTM ส่ง (case/typo) เทียบสะกดใน DebugView vs Admin ให้ตรงเป๊ะ รวมตัวพิมพ์เล็ก-ใหญ่
user property ขึ้น (not set) เป็นช่วง ๆ ตั้งเป็น event scope ทั้งที่เป็นคุณสมบัติของคน เปลี่ยนไปส่งเป็น user property + ลงทะเบียนเป็น user scope
ค่าเยอะ ๆ ถูกยุบเป็น (other) คาร์ดินาลิตี้สูง เกิน ~500 ค่าไม่ซ้ำ/วัน ลดความละเอียดของค่า (bucket), เลี่ยงใส่ ID/timestamp เป็น dimension, ใช้ BigQuery ถ้าต้องการ raw
สร้าง dimension ไม่ได้ ปุ่มเทา เต็มโควตา 50 (event) หรือ 25 (user) แล้ว archive dimension ที่ไม่ใช้ออกก่อน แล้วสร้างใหม่

จุดที่เจ็บที่สุดในตารางนี้คือแถว (other) เพราะมันไม่ error ไม่เตือน แค่เงียบ ๆ ยุบค่าที่หลากหลายเกินไปทิ้ง ถ้าคุณเผลอเอา session_id หรือ URL แบบมี query string ยาว ๆ มาเป็น custom dimension คุณจะเจอ (other) กินข้อมูลไปกว่าครึ่ง — ค่าที่เหมาะเป็น dimension ควรมีจำนวนค่าที่เป็นไปได้จำกัด เช่น “แผนก 5 อัน” ไม่ใช่ “ID ที่ไม่ซ้ำกันเป็นแสน”

FAQ

custom dimension กับ custom metric ต่างกันยังไง?
Dimension คือ “มิติ” ที่ใช้ตัด/group ข้อมูล (เป็นข้อความ เช่น lead_type) ส่วน metric คือ “ตัวเลข” ที่เอาไป sum/average ได้ (เช่น deal_value) ถ้าค่าที่คุณส่งเป็นตัวเลขที่อยากบวกกัน ให้ลงทะเบียนเป็น custom metric แทน dimension

ลงทะเบียนแล้วต้องรอนานแค่ไหนถึงเห็นใน report?
DebugView เห็นเกือบทันที แต่ standard report และ Explore ปกติรอ 24-48 ชั่วโมงเพราะ GA4 ต้องประมวลผล ถ้าเกินสองวันแล้วยังว่าง ให้กลับไปเช็คเรื่องสะกดชื่อ parameter

standard property ลง custom dimension ได้กี่ตัว?
Event-scoped 50 ตัว, user-scoped 25 ตัว, item-scoped 10 ตัว (property แบบ GA4 360 ได้มากกว่านี้) ถ้าเต็มต้อง archive ตัวที่ไม่ใช้ก่อน ค่าที่ archive แล้วไม่หายจากข้อมูลเก่า แค่หยุด query ตัวใหม่

ทำไมค่าขึ้น (other) ทั้งที่ตั้งถูกหมด?
เป็นเรื่องคาร์ดินาลิตี้ ไม่ใช่ตั้งค่าผิด GA4 จะยุบค่าเป็น (other) เมื่อจำนวนค่าไม่ซ้ำในหนึ่ง dimension สูงเกินเกณฑ์ต่อวัน ทางแก้คือ bucket ค่าให้หยาบลง หรือดึง raw จาก BigQuery แทน

custom dimension ใช้เป็น audience หรือ conversion ได้ไหม?
User-scoped dimension ใช้สร้าง audience ได้ดี เพราะค่าติดตัว user ส่วน event parameter ใช้เป็นเงื่อนไขใน audience/key event ได้เช่นกัน เอาไปต่อยอดใน Looker Studio ก็ได้ ดูเทมเพลตที่ Looker Studio Dashboard B2B

สรุป

ga4 custom dimension ไม่ใช่ของยาก แต่พลาดง่ายเพราะสามจุดที่คนมองข้าม สรุปสิ่งที่ต้องจำ:

  • scope มาก่อนชื่อ — ค่าที่เป็นคุณสมบัติของคน (crm_stage, account_type) ต้องเป็น user scope ส่งเป็น user property ถ้าเอาไปเป็น event scope funnel จะเต็มไปด้วย (not set)
  • ลงทะเบียนก่อนเก็บ — GA4 ไม่ backfill ตั้ง dimension ให้เสร็จก่อนเปิด traffic แล้วสะกดชื่อ parameter ใน Admin ให้ตรงเป๊ะกับ GTM
  • ระวังคาร์ดินาลิตี้ — อย่าเอา ID หรือค่าที่ไม่ซ้ำจำนวนมหาศาลมาเป็น dimension เพราะจะโดนยุบเป็น (other) เงียบ ๆ

ถ้าอยากวางระบบ tracking ทั้งเส้น ตั้งแต่ data layer ไปจนถึง server-side ให้แม่นตั้งแต่แรก เริ่มจาก MarTech Analytics & Tracking Guide แล้วค่อยเจาะลึกการต่อ Conversion API ต่อได้เลย — ยิ่งวาง scope และ data layer ให้ถูกตั้งแต่ต้น ยิ่งประหยัดเวลา debug ในภายหลัง