---
title: AVERAGEX – หาค่าเฉลี่ยจากนิพจน์ที่คำนวณในแต่ละแถว
url: https://www.thepexcel.com/functions/dax/aggregation/averagex-dax/
type: function-explainer
program: DAX
syntax: "AVERAGEX(<table>, <expression>)"
date: 2025-12-13
updated: 2025-12-20
scores:
  popularity: 7
  difficulty: 5
  usefulness: 8
---

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

> AVERAGEX เป็น Iterator Function ที่วนลูปตารางทีละแถว คำนวณ Expression แล้วนำผลลัพธ์มาหาค่าเฉลี่ย เหม

## คำอธิบาย

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

## Syntax

```excel
AVERAGEX(&lt;table&gt;, &lt;expression&gt;)
```

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ avg-of-groups

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

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

_เหมาะกับ:_ avg-calculated

## ตัวอย่าง

### 1. ตัวอย่างพื้นฐาน - เฉลี่ยยอดขายรวม (Freight + Tax)

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

**ผลลัพธ์:** `125.50`

คำนวณค่าขนส่ง + ภาษีในแต่ละรายการขาย แล้วหาค่าเฉลี่ย นี่คือกรณีที่ไม่สามารถใช้ AVERAGE ได้เพราะต้องบวก 2 คอลัมน์ก่อน

### 2. ตัวอย่างกลาง - เฉลี่ยจำนวน×ราคา (Unit Economics)

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

**ผลลัพธ์:** `1,250.75`

หาค่าเฉลี่ยของมูลค่ารายการ (Quantity × UnitPrice) ต่อแถว ซึ่งจะให้ผลลัพธ์ต่างจาก AVERAGE(Sales[Quantity]) * AVERAGE(Sales[UnitPrice])

### 3. ตัวอย่างขั้นสูง - เฉลี่ย Measure ต่อกลุ่ม

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

**ผลลัพธ์:** `50,000`

สร้างตารางหมวดหมู่ที่ไม่ซ้ำด้วย VALUES แล้วหาค่าเฉลี่ยของ [Total Sales] ในแต่ละหมวดหมู่ เหมาะสำหรับการวิเคราะห์ว่าหมวดหมู่เฉลี่ยทำยอดขายได้เท่าไหร่

### 4. ตัวอย่างขั้นสูง - กรองก่อนหาค่าเฉลี่ย

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

**ผลลัพธ์:** `2,500`

ใช้ FILTER กรองเฉพาะรายการที่มียอดขายมากกว่า 1,000 ก่อน แล้วหาค่าเฉลี่ย เหมาะสำหรับการวิเคราะห์เฉพาะกลุ่มที่ต้องการ

### 5. Edge Case - จัดการค่า Blank

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

**ผลลัพธ์:** `0.08`

แปลงค่า Blank เป็น 0 เพื่อนับในการเฉลี่ย ถ้าไม่ทำ DAX จะข้ามแถวที่ Blank ซึ่งอาจทำให้ผลลัพธ์คลาดเคลื่อน

## หมายเหตุเพิ่มเติม

- ใช้ VAR เก็บตาราง/ค่ากลางไว้ก่อน AVERAGEX เพื่อให้อ่านง่ายและ debug ง่าย

- ใช้ VALUES() เพื่อสร้างตารางที่ไม่ซ้ำก่อนหาค่าเฉลี่ย Measure ต่อกลุ่ม

- พิจารณาใช้ FILTER กรองตารางให้เล็กลงก่อน AVERAGEX เพื่อเพิ่มประสิทธิภาพ

- ระวังความแตกต่างระหว่างค่า Blank (ข้ามไป) กับค่า 0 (นับ) ในการคำนวณ

- ถ้าเป็นการเฉลี่ยคอลัมน์เดียวให้ใช้ AVERAGE แทน AVERAGEX จะเร็วกว่ามาก

## คำถามที่พบบ่อย

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

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

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

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

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

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

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

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

## ฟังก์ชันที่เกี่ยวข้อง

- [AVERAGE – คำนวณค่าเฉลี่ยเลขคณิตจากคอลัมน์ตัวเลข](https://www.thepexcel.com/functions/dax/aggregation/average-dax/)
- [AVERAGEA – ค่าเฉลี่ยแบบนับค่าตรรกะและข้อความ](https://www.thepexcel.com/functions/dax/aggregation/averagea-dax/)
- [SUMX – Iterator Function สำหรับคำนวณผลรวมแบบ Row-by-Row ใน DAX](https://www.thepexcel.com/functions/dax/aggregation/sumx-dax/)
- [MINX – หาค่าน้อยที่สุดจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/minx-dax/)
- [MAXX – หาค่ามากที่สุดจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/maxx-dax/)
- [VALUES – ดึงค่าที่ไม่ซ้ำจากคอลัมน์ (รวม Blank จากข้อผิดพลาดความสัมพันธ์)](https://www.thepexcel.com/functions/dax/table-manipulation/values-dax/)
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)

## แหล่งข้อมูลเพิ่มเติม

- [DAX Guide: AVERAGEX](https://dax.guide/averagex/) _(guide)_
- [Microsoft Learn: AVERAGEX function](https://learn.microsoft.com/en-us/dax/averagex-function-dax) _(official)_
- [SQLBI: Understanding Iterator Functions](https://www.sqlbi.com/articles/understanding-iterator-functions-in-dax/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/aggregation/averagex-dax/](https://www.thepexcel.com/functions/dax/aggregation/averagex-dax/)_
