---
title: MOVINGAVERAGE – ค่าเฉลี่ยเคลื่อนที่บน Visual Calculations
url: https://www.thepexcel.com/functions/dax/visual-calculations/movingaverage-dax/
type: function-explainer
program: DAX
syntax: "MOVINGAVERAGE(<column>, <windowSize>[, <includeCurrent>][, <axis>][, <orderBy>][, <blanks>][, <reset>])"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 4
  usefulness: 6
---

# MOVINGAVERAGE – ค่าเฉลี่ยเคลื่อนที่บน Visual Calculations

> MOVINGAVERAGE คำนวณค่าเฉลี่ยเคลื่อนที่ (moving average) บนแกนของ Visual Calculations ในตารางข้อมูล เ

## คำอธิบาย

MOVINGAVERAGE คำนวณค่าเฉลี่ยเคลื่อนที่ (moving average) บนแกนของ Visual Calculations ในตารางข้อมูล เหมาะสำหรับทำเส้นแนวโน้มที่เรียบขึ้นและลดความผันผวนของข้อมูล

## Syntax

```excel
MOVINGAVERAGE(&lt;column&gt;, &lt;windowSize&gt;[, &lt;includeCurrent&gt;][, &lt;axis&gt;][, &lt;orderBy&gt;][, &lt;blanks&gt;][, &lt;reset&gt;])
```

**Variant**

```excel
MOVINGAVERAGE(&lt;Expression&gt;)
```

ใช้ขนาดหน้าต่างตามค่าเริ่มต้นของ visual

**Variant**

```excel
MOVINGAVERAGE(&lt;Expression&gt;, 7)
```

ค่าเฉลี่ยเคลื่อนที่ขนาด 7 หน่วยบนแกน

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| column | Yes | column |  | คอลัมน์ที่มีค่าที่ต้องการนำไปคำนวณค่าเฉลี่ยเคลื่อนที่ (เช่น Sales[Amount]) |
| windowSize | Yes | integer |  | ขนาดของหน้าต่าง (window) ที่ใช้คำนวณค่าเฉลี่ยเคลื่อนที่ ต้องเป็นค่าคงที่ (เช่น 7 = เฉลี่ย 7 จุด/7 แถว/7 วัน) |
| includeCurrent | No | boolean | TRUE | ระบุว่าจะรวมแถวปัจจุบันในการคำนวณหรือไม่ TRUE = รวม (ค่าเริ่มต้น), FALSE = ไม่รวม (เฉลี่ยจากแถวก่อนหน้า) |
| axis | No | axis | แกนเริ่มต้นของ visual | แกนการคำนวณ (Rows = ตามแถว, Columns = ตามคอลัมน์) ถ้าไม่ระบุ ใช้แกนเริ่มต้นของ visual |
| orderBy | No | expression | ลำดับแสดงผลเริ่มต้น | ORDERBY() clause เพื่อระบุลำดับการคำนวณ ใช้เมื่อต้องการเรียงลำดับตามคอลัมน์อื่น |
| blanks | No | enum | DEFAULT | การจัดการค่าว่าง DEFAULT = ตามลำดับปกติ, FIRST = ค่าว่างอยู่ด้านหน้า, LAST = ค่าว่างอยู่ด้านหลัง |
| reset | No | expression | NONE | เมื่อไรการคำนวณจะรีเซ็ต NONE = ไม่รีเซ็ต, LOWESTPARENT = รีเซ็ตที่ระดับ parent ต่ำสุด, HIGHESTPARENT = รีเซ็ตที่ระดับ parent สูงสุด, หรือฟิลด์อ้างอิง |

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

### ทำเส้นแนวโน้มที่เรียบขึ้น

ลดความผันผวนของข้อมูลรายวัน/รายช่วงเพื่อดูแนวโน้ม

_เหมาะกับ:_ trend-smoothing

### ค่าเฉลี่ยเคลื่อนที่ 7 ช่วง

ทำ moving average ขนาด 7 จุดบนแกนที่แสดงใน visual

_เหมาะกับ:_ 7-point-moving-average

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ค่าเฉลี่ยเคลื่อนที่ 7 จุด พื้นฐาน

```excel
Moving Avg Sales 7 = MOVINGAVERAGE([Total Sales], 7)
```

**ผลลัพธ์:** `ได้ค่าเฉลี่ยเคลื่อนที่ของ [Total Sales] ตามแกนแถวของ visual ขนาด 7 จุด (รวมจุดปัจจุบัน)`

ถ้าเรามียอดขายรายวัน: 100, 95, 110, 105, 120, 98, 102, 115, 110
จุดที่ 7 (ค่า 102) จะได้ค่าเฉลี่ยของจุดที่ 1-7 = (100+95+110+105+120+98+102)/7 = 105.7

### 2. ตัวอย่างที่ 2: ค่าเฉลี่ยจากแถวก่อนหน้าเท่านั้น (excludeCurrent)

```excel
Moving Avg Prev 7 = MOVINGAVERAGE([Total Sales], 7, FALSE)
```

**ผลลัพธ์:** `ค่าเฉลี่ยของ 7 แถวก่อนหน้า ไม่รวมแถวปัจจุบัน`

ในตัวอย่างเดิม จุดที่ 7 จะได้ค่าเฉลี่ยของจุดที่ 1-6 = (100+95+110+105+120+98)/6 = 104.7 ใช้เมื่อต้องการดูแนวโน้มจากอดีตเท่านั้น

### 3. ตัวอย่างที่ 3: ค่าเฉลี่ยเคลื่อนที่หน้าต่างเล็ก (3 จุด)

```excel
Moving Avg Sales 3 = MOVINGAVERAGE([Total Sales], 3)
```

**ผลลัพธ์:** `ค่าเฉลี่ยเคลื่อนที่ของ 3 จุด ตอบสนองต่อการเปลี่ยนแปลงเร็วกว่า window ใหญ่`

window เล็ก (3 จุด) จะเรียบน้อยกว่า window ใหญ่ (7 จุด) แต่ตอบสนองต่อการเปลี่ยนแปลงเร็วกว่า ใช้เมื่อต้องการจับสัญญาณเร็ว

### 4. ตัวอย่างที่ 4: เปรียบเทียบค่าปัจจุบันกับแนวโน้ง

```excel
Deviation from Trend = [Total Sales] - MOVINGAVERAGE([Total Sales], 7)
```

**ผลลัพธ์:** `ค่าส่วนต่างระหว่างค่าปัจจุบันกับแนวโน้ง (positive = สูงกว่าแนวโน้ม, negative = ต่ำกว่าแนวโน้ม)`

ถ้า [Total Sales] = 120 และ MOVINGAVERAGE = 105 ผลลัพธ์ = 15 (แสดงว่าค่าปัจจุบันสูงกว่าแนวโน้ม 15) ใช้เพื่อดูความผิดปกติของข้อมูล

### 5. ตัวอย่างที่ 5: ใช้ reset เมื่อมีการเปลี่ยนหมวดหมู่

```excel
Moving Avg by Category = MOVINGAVERAGE([Total Sales], 7, TRUE, ROWS, , DEFAULT, LOWESTPARENT)
```

**ผลลัพธ์:** `ค่าเฉลี่ยเคลื่อนที่ 7 จุด ในแต่ละหมวดหมู่ (รีเซ็ตเมื่อเปลี่ยนหมวดหมู่)`

หากมีข้อมูลตามหมวดหมู่ (เช่น A, A, A, B, B, B) การนับค่าเฉลี่ยจะรีเซ็ตเมื่อเปลี่ยนจากหมวดหมู่ A เป็น B ช่วยหลีกเลี่ยงการคำนวณข้ามหมวดหมู่

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

- ผมแนะนำให้ใช้ MOVINGAVERAGE ร่วมกับกราฟเส้น (line chart) เพื่อแสดงแนวโน้มแบบมีกริดพิเศษ มันช่วยให้ dashboard ดูมืออาชีพขึ้น

- ระวังกับ window ขนาดใหญ่เกินไป ถ้ากำหนด windowSize = 100 แต่ข้อมูลมี 365 แถว การ smooth จะมากเกินไป อาจพลาดการเปลี่ยนแปลงที่สำคัญ

- ถ้าต้องการค่าเฉลี่ยเคลื่อนที่ที่เหมาะสมสำหรับการวิเคราะห์ผลิตภาพ ผมแนะนำให้สร้าง measure สองตัว: หนึ่งสำหรับค่าปัจจุบัน อีกตัวสำหรับค่าเฉลี่ยเคลื่อนที่ แล้วแสดงทั้งสองบนกราฟเดียวกันเพื่อเปรียบเทียบ

- ส่วนตัวผมพบว่า MOVINGAVERAGE ทำงานดีที่สุดเมื่อขนาด window มีความเหมาะสมกับความถี่ของข้อมูล (เช่น ข้อมูลรายวัน ใช้ windowSize = 7 สำหรับค่าเฉลี่ย 7 วัน ข้อมูลรายชั่วโมง ใช้ windowSize = 24 สำหรับค่าเฉลี่ย 24 ชั่วโมง)

- ถ้าจะใช้ reset parameter ให้ทดสอบกับ visual ที่มีลำดับชั้น (hierarchy) เช่นเดือน-สัปดาห์-วัน เพื่อให้แน่ใจว่าการรีเซ็ตทำงานตามที่คิด

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

**Q: MOVINGAVERAGE ต่างจาก RUNNINGSUM อย่างไร?**

MOVINGAVERAGE ใช้ window ขนาดคงที่ (เช่น 7 จุด) และคำนวณค่าเฉลี่ย ส่วน RUNNINGSUM ใช้ accumulative sum แบบ running (รวมตั้งแต่จุดแรกถึงจุดปัจจุบัน) MOVINGAVERAGE เหมาะสำหรับแนวโน้มแบบเนื้อ ส่วน RUNNINGSUM เหมาะสำหรับสะสมยอด

**Q: MOVINGAVERAGE ใช้กับ measure ทั่วไป (นอก Visual Calculations) ได้ไหม?**

ไม่ได้ MOVINGAVERAGE ออกแบบมาสำหรับ Visual Calculations เท่านั้น ถ้าต้องการค่าเฉลี่ยเคลื่อนที่ใน measure ทั่วไป ต้องสร้างตารางเวลาเสริม แล้วใช้ AVERAGEX + DATEADD หรือการกรองช่วงเวลาด้วยตัวเอง

**Q: ใช้ windowSize เท่าไหร่ดี?**

ขึ้นอยู่กับลักษณะข้อมูล window ใหญ่ (เช่น 30 วัน) จะเรียบแนวโน้มมากแต่ตอบสนองช้ากว่า window เล็ก (เช่น 3-7 วัน) window เล็กจะตอบสนองเร็วแต่ผันผวน ส่วนตัวผมแนะนำเริ่มจาก 7 แล้วปรับตามความต้องการ

**Q: ถ้า windowSize มากกว่าจำนวนแถวที่มี จะเกิดอะไรขึ้น?**

MOVINGAVERAGE จะใช้เฉพาะแถวที่มีอยู่ (ไม่มี error) ถ้าชุดข้อมูลมีแค่ 3 แถว แต่ windowSize = 7 มันจะเฉลี่ยเพียง 3 แถวที่มี

**Q: ทำไมผลลัพธ์เปลี่ยนเมื่อเปลี่ยน orderBy?**

MOVINGAVERAGE คำนวณตามลำดับของแถวในตารางข้อมูล orderBy เปลี่ยนลำดับแถวจึงทำให้ window และค่าเฉลี่ยเปลี่ยน ต้องตรวจสอบให้แน่ใจว่า orderBy ตรงกับตัวแปรที่ต้องการเรียงลำดับ

**Q: includeCurrent = FALSE กับ reset มีความสัมพันธ์ไหม?**

ไม่เกี่ยวข้องกัน includeCurrent ควบคุมว่าจะรวมแถวปัจจุบันหรือไม่ reset ควบคุมเมื่อไรการนับจะเริ่มใหม่ (เช่นเมื่อเปลี่ยนหมวดหมู่) สามารถใช้ร่วมกันได้

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

- [AVERAGE – คำนวณค่าเฉลี่ยเลขคณิตจากคอลัมน์ตัวเลข](https://www.thepexcel.com/functions/dax/aggregation/average-dax/)
- averagex
- datesinperiod
- dateadd
- calculate
- runningsum
- window

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

- [DAX Guide: MOVINGAVERAGE](https://dax.guide/movingaverage/) _(guide)_
- [Microsoft Learn: MOVINGAVERAGE Function](https://learn.microsoft.com/en-us/dax/movingaverage-function-dax) _(official)_
- [SQLBI - Visual Calculations](https://www.sqlbi.com/articles/visual-calculations-in-power-bi/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/visual-calculations/movingaverage-dax/](https://www.thepexcel.com/functions/dax/visual-calculations/movingaverage-dax/)_
