Thep Excel

AVERAGEX – หาค่าเฉลี่ยจากนิพจน์ที่คำนวณในแต่ละแถว

AVERAGEX เป็น Iterator Function ที่วนลูปตารางทีละแถว คำนวณ Expression แล้วนำผลลัพธ์มาหาค่าเฉลี่ย เหมาะสำหรับกรณีที่ต้องการเฉลี่ยค่าที่คำนวณได้ เช่น ราคา×จำนวน หรือค่าเฉลี่ยของ Measure ในแต่ละกลุ่ม

=AVERAGEX(<table>, <expression>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
5/10

Usefulness
8/10

Syntax & Arguments

=AVERAGEX(<table>, <expression>)

Argument Type Required Default Description
table Table Yes ตารางที่ต้องการวนลูป อาจเป็นตารางจริงหรือ Table Expression (เช่น VALUES, FILTER, CALCULATETABLE)
expression Scalar Yes นิพจน์ที่ต้องการประเมินค่าในแต่ละแถว แล้วนำผลลัพธ์มาหาค่าเฉลี่ย (สามารถเป็น Column Reference, Measure หรือ Calculated Expression)

How it works

หาเฉลี่ยต่อกลุ่ม (Average of group totals)

สร้างตารางกลุ่มด้วย VALUES แล้วให้ AVERAGEX เฉลี่ยค่าของแต่ละกลุ่ม

หาเฉลี่ยจากการคำนวณหลายคอลัมน์

เช่น เฉลี่ยราคาแบบคำนวณจาก Amount/Quantity ต่อแถว

Examples

ตัวอย่างพื้นฐาน – เฉลี่ยยอดขายรวม (Freight + Tax)
Average Order Cost = AVERAGEX( Sales, Sales[Freight] + Sales[TaxAmount] )
คำนวณค่าขนส่ง + ภาษีในแต่ละรายการขาย แล้วหาค่าเฉลี่ย นี่คือกรณีที่ไม่สามารถใช้ AVERAGE ได้เพราะต้องบวก 2 คอลัมน์ก่อน
DAX Formula:

Average Order Cost = 
AVERAGEX(
    Sales,
    Sales[Freight] + Sales[TaxAmount]
)

Result:

125.50

ตัวอย่างกลาง – เฉลี่ยจำนวน×ราคา (Unit Economics)
Average Line Total = AVERAGEX( Sales, Sales[Quantity] * Sales[UnitPrice] )
หาค่าเฉลี่ยของมูลค่ารายการ (Quantity × UnitPrice) ต่อแถว ซึ่งจะให้ผลลัพธ์ต่างจาก AVERAGE(Sales[Quantity]) * AVERAGE(Sales[UnitPrice])
DAX Formula:

Average Line Total = 
AVERAGEX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

Result:

1,250.75

ตัวอย่างขั้นสูง – เฉลี่ย Measure ต่อกลุ่ม
Average Sales per Category = VAR CategoryTable = VALUES(Products[Category]) RETURN AVERAGEX( CategoryTable, [Total Sales] )
สร้างตารางหมวดหมู่ที่ไม่ซ้ำด้วย VALUES แล้วหาค่าเฉลี่ยของ [Total Sales] ในแต่ละหมวดหมู่ เหมาะสำหรับการวิเคราะห์ว่าหมวดหมู่เฉลี่ยทำยอดขายได้เท่าไหร่
DAX Formula:

Average Sales per Category = 
VAR CategoryTable = VALUES(Products[Category])
RETURN
    AVERAGEX(
        CategoryTable,
        [Total Sales]
    )

Result:

50,000

ตัวอย่างขั้นสูง – กรองก่อนหาค่าเฉลี่ย
Average High Value Sales = VAR HighValueSales = FILTER( Sales, Sales[Amount] > 1000 ) RETURN AVERAGEX( HighValueSales, Sales[Amount] )
ใช้ FILTER กรองเฉพาะรายการที่มียอดขายมากกว่า 1,000 ก่อน แล้วหาค่าเฉลี่ย เหมาะสำหรับการวิเคราะห์เฉพาะกลุ่มที่ต้องการ
DAX Formula:

Average High Value Sales = 
VAR HighValueSales = 
    FILTER(
        Sales,
        Sales[Amount] > 1000
    )
RETURN
    AVERAGEX(
        HighValueSales,
        Sales[Amount]
    )

Result:

2,500

Edge Case – จัดการค่า Blank
Average Discount Pct = AVERAGEX( Sales, IF( NOT(ISBLANK(Sales[DiscountPct])), Sales[DiscountPct], 0 ) )
แปลงค่า Blank เป็น 0 เพื่อนับในการเฉลี่ย ถ้าไม่ทำ DAX จะข้ามแถวที่ Blank ซึ่งอาจทำให้ผลลัพธ์คลาดเคลื่อน
DAX Formula:

Average Discount Pct = 
AVERAGEX(
    Sales,
    IF(
        NOT(ISBLANK(Sales[DiscountPct])),
        Sales[DiscountPct],
        0
    )
)

Result:

0.08

FAQs

AVERAGEX ต่างจาก AVERAGE อย่างไร?

AVERAGE ทำงานกับคอลัมน์เดียวโดยตรง (เช่น AVERAGE(Sales[Amount])) ส่วน AVERAGEX วนลูปตารางทีละแถวและประเมินค่า Expression ก่อน (เช่น Sales[Quantity] * Sales[UnitPrice]) จึงยืดหยุ่นกว่าแต่ช้ากว่า

เมื่อไหร่ควรใช้ AVERAGEX?

ใช้เมื่อ: 1) ต้องการเฉลี่ยนิพจน์ที่คำนวณได้ (เช่น ราคา×จำนวน) 2) ต้องการเฉลี่ย Measure ต่อกลุ่ม 3) ต้องการความยืดหยุ่นในการประเมินค่าทีละแถว หากเป็นคอลัมน์เดียวให้ใช้ AVERAGE เพียงพอ

AVERAGEX จัดการค่า Blank อย่างไร?

ค่า Blank ที่ return จาก Expression จะถูกข้ามไป (ไม่นับในตัวหาร) แต่ค่า 0 จะนับ ตัวอย่าง: ถ้ามี 10 แถว แต่ 2 แถว return Blank จะหารด้วย 8 เท่านั้น

AVERAGEX ช้ากว่า AVERAGE มากไหม?

ใช่ เพราะเป็น Iterator ที่ประมวลผลทีละแถว ถ้าตารางมีหลายล้านแถวจะช้ามาก ควรใช้ FILTER/VALUES ลดขนาดตารางก่อน และพิจารณาว่าจำเป็นต้องใช้จริงหรือไม่

Resources & Related

Additional Notes

AVERAGEX เป็นฟังก์ชันแบบ Iterator ที่จะวนลูปตารางทีละแถว ประเมินค่า Expression ที่เราระบุ แล้วนำผลลัพธ์ทั้งหมดมาหาค่าเฉลี่ย ซึ่งต่างจาก AVERAGE ที่ทำงานกับคอลัมน์เดียวโดยตรง

ใช้ AVERAGEX เมื่อคุณต้องการ:
– หาค่าเฉลี่ยของนิพจน์ที่คำนวณได้ เช่น Sales[Quantity] * Sales[UnitPrice]
– หาค่าเฉลี่ยของ Measure ในแต่ละกลุ่ม เช่น ค่าเฉลี่ยยอดขายต่อหมวดหมู่สินค้า
– ต้องการความยืดหยุ่นในการประเมินค่าทีละแถวก่อนหาค่าเฉลี่ย

ที่ต้องระวังคือ Expression ที่ return ค่า Blank จะถูกข้ามไป (ไม่นับใน average) แต่ค่า 0 จะถูกนับ ซึ่งส่งผลต่อตัวหารของค่าเฉลี่ย

ส่วนตัวผมคิดว่า AVERAGEX เป็นฟังก์ชันที่ทรงพลังมาก แต่ต้องใช้อย่างระมัดระวังเพราะเป็น Iterator ที่ประมวลผลทีละแถว ถ้าตารางใหญ่มากอาจช้า ดังนั้นควรใช้เฉพาะเมื่อจำเป็นจริงๆ และพิจารณาใช้ FILTER หรือ VALUES เพื่อลดขนาดตารางที่ต้องวนลูป 😎

Leave a Reply

Your email address will not be published. Required fields are marked *