---
title: MEDIANX – ฟังก์ชัน Iterator หามัธยฐาน
url: https://www.thepexcel.com/functions/dax/statistical/medianx-dax/
type: function-explainer
program: DAX
syntax: "MEDIANX(<Table>, <Expression>)"
date: 2025-12-15
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

# MEDIANX – ฟังก์ชัน Iterator หามัธยฐาน

> MEDIANX คำนวณค่ามัธยฐาน (50th Percentile) ของนิพจน์ที่ประเมินในแต่ละแถว ต่างจาก MEDIAN ที่ทำงานบนคอล

## คำอธิบาย

MEDIANX คำนวณค่ามัธยฐาน (50th Percentile) ของนิพจน์ที่ประเมินในแต่ละแถว ต่างจาก MEDIAN ที่ทำงานบนคอลัมน์เดียว MEDIANX คือ iterator function ที่ให้คุณสร้างนิพจล์ซับซ้อนก่อนหาค่ากลาง

## Syntax

```excel
MEDIANX(&lt;Table&gt;, &lt;Expression&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Table | Yes | table | ไม่มี | ตารางข้อมูลที่จะประเมินนิพจน์สำหรับแต่ละแถว หรือ expression ที่ส่งคืนตาราง |
| Expression | Yes | expression | ไม่มี | นิพจน์ (expression) ที่ประเมินแต่ละแถว สามารถเป็นการอ้างอิงคอลัมน์เดียว คำนวณ เช่น Sales[Qty]*Sales[Price] หรือ RELATED columns |

## ตัวอย่าง

### 1. หามัธยฐานของราคารวม (Quantity × Price)

```excel
Median Sales Line Amount =
VAR Threshold =
  MEDIANX(
    Sales,
    Sales[Quantity] * Sales[Price]
  )
RETURN
  Threshold
```

**ผลลัพธ์:** `ค่ากลางของยอดขาย = 4,250`

MEDIANX ประเมินนิพจน์ Quantity * Price สำหรับแต่ละแถว 50% ของแถวมีค่าต่ำกว่า 4,250 และ 50% สูงกว่า ใช้ VAR เพื่อเก็บค่า median ไว้ใช้งาน

### 2. หามัธยฐานของการขายกรอง (ด้วย FILTER)

```excel
Median Sales USA =
  MEDIANX(
    FILTER(
      Sales,
      RELATED(Store[Country]) = "USA"
    ),
    Sales[Amount]
  )
```

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

MEDIANX ทำงานกับ FILTER ได้อย่างดี แม้ว่าตาราง Sales จะ filtered หลาย records MEDIANX ยังประเมินนิพจน์ในแต่ละแถวของตาราง filtered ก่อน เหตุผลคือ FILTER สร้างบริบท row context ใหม่ แล้ว MEDIANX ประเมิน expression ในบริบทนั้น

### 3. หามัธยฐานของค่า (รวม BLANK)

```excel
Median With Blanks =
  MEDIANX(
    Transactions,
    Transactions[NetAmount]
  )
```

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

สำคัญ: ถ้า NetAmount มี BLANK ค่าเหล่านั้นจะรวมในการคำนวณ มัธยฐานตั้งอยู่ที่ 2,100 ซึ่งอาจแตกต่างจากผลลัพธ์ของ MEDIAN ที่ละเว้น BLANK

### 4. หามัธยฐานสำหรับแต่ละหมวดหมู่ (ใน Measure)

```excel
Median by Category =
IF(
  HASONEVALUE(Product[Category]),
  MEDIANX(
    FILTER(
      ALL(Sales),
      RELATED(Product[Category]) = VALUES(Product[Category])
    ),
    Sales[Amount]
  ),
  BLANK()
)

```

**ผลลัพธ์:** `1,800 (สำหรับหมวดหมู่ที่เลือก)`

ใช้ HASONEVALUE ตรวจสอบว่าเลือก category เพียง 1 อัน ถ้าใช่ ให้คำนวณ median ของการขายในหมวดหมู่นั้น โดย FILTER + ALL เพื่อให้ดึงแถวทั้งหมด แล้วกรองด้วย RELATED ยุ่งแล้ว แต่ RAW ของการทำงานกับบริบท

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

- ผมแนะนำให้ใช้ MEDIANX แทน AVERAGE เมื่อข้อมูลมี outliers ที่เกินคาด median เป็นตัวชี้วัดที่ stable กว่า

- ระวัง BLANK handling: MEDIANX รวม BLANK ส่วน MEDIAN ไม่ ถ้าต้องการให้ MEDIANX ทำเหมือน MEDIAN ใช้ FILTER(table, expression  BLANK()) ก่อน

- ใช้ VAR เพื่อเก็บค่า MEDIANX ไว้ ผมมักใช้โครงสร้าง VAR median = MEDIANX(...) RETURN median เพื่อ debug และ reuse ได้ง่าย

- MEDIANX ไม่ support DirectQuery mode ในบางกรณี ถ้าต้องการทำงานกับ DirectQuery sources ต้องเปลี่ยนเป็น AVERAGEX หรือ SUMX

- เมื่อ MEDIANX ไม่สามารถหาค่า median (ตัวอย่างเช่น ทุก expression เป็น BLANK) ผลลัพธ์คือ BLANK ไม่ใช่ error บางครั้ง IFERROR() ไม่ได้ช่วย

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

**Q: MEDIANX ต่างจาก MEDIAN อย่างไร**

MEDIAN ทำงานบนคอลัมน์เดียว และละเว้น BLANK ส่วน MEDIANX เป็น iterator function ที่ประเมินนิพจน์ในแต่ละแถว และ รวม BLANK ในการคำนวณ ตัวอย่างเช่น MEDIAN(Sales[Price]) ประเมินเฉพาะราคา ส่วน MEDIANX(Sales, Sales[Qty]*Sales[Price]) คำนวณ Quantity*Price ก่อน แล้วจึงหาค่าเฉลี่ย

**Q: ทำไม MEDIANX รวม BLANK แต่ MEDIAN ไม่**

เนื่องจาก MEDIANX เป็น iterator function ที่เหมาะสำหรับ expressions ที่ซับซ้อน บางครั้ง expression ของคุณอาจส่งคืน BLANK ตั้งใจหรือไม่ตั้งใจ MEDIANX รักษา BLANK ไว้ในสถิติจึงเป็นพฤติกรรมปกติของ iterator functions (เช่น SUMX, AVERAGEX) ส่วน MEDIAN เป็นการรวม aggregate ที่ขัดเกาะ BLANK

**Q: MEDIANX กับ CALCULATE/Filter Context ทำงานอย่างไร**

MEDIANX ประเมิน Expression ในแต่ละแถว ซึ่งหมายถึง row context นี่เป็นจุดแข็งของ iterator function บริบทแถว (row context) ให้ acccess ไปยัง values ของแถวนั้นเท่านั้น ถ้าต้องการกำหนด filter สำหรับตาราง ใช้ FILTER() เข้ากับ MEDIANX เช่น MEDIANX(FILTER(Sales, Sales[Year]=2024), Sales[Amount]) ซึ่ง row context จาก FILTER จะนำไปสู่การประเมิน Amount สำหรับแถวที่ 2024 เท่านั้น

**Q: ใช้ MEDIANX ในหลายแถว (เช่น grouping) ได้ไหม**

ได้ แต่ต้องมานี้เล็กน้อย MEDIANX คำนวณค่า single median สำหรับชุด rows ถ้าต้องการ median ต่อ category ต้องใช้ SUMPRODUCT + FILTER หรือ วิธีอื่นเช่น SUMMARIZECOLUMNS ผมแนะนำให้ใช้วิธี grouping ด้วยการคำนวณด้านหน้า (เช่น pivot table) แล้วค่อย MEDIANX บนผลลัพธ์

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

- median-dax
- [AVERAGEX – หาค่าเฉลี่ยจากนิพจน์ที่คำนวณในแต่ละแถว](https://www.thepexcel.com/functions/dax/aggregation/averagex-dax/)
- [PERCENTILEX.INC – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/statistical/percentilex-inc-dax/)

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

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

---

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