Thep Excel

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

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

=MOVINGAVERAGE(<column>, <windowSize>[, <includeCurrent>][, <axis>][, <orderBy>][, <blanks>][, <reset>])

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=MOVINGAVERAGE(<column>, <windowSize>[, <includeCurrent>][, <axis>][, <orderBy>][, <blanks>][, <reset>])

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

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: ค่าเฉลี่ยเคลื่อนที่ 7 จุด พื้นฐาน
Moving Avg Sales 7 = MOVINGAVERAGE([Total Sales], 7)
ถ้าเรามียอดขายรายวัน: 100, 95, 110, 105, 120, 98, 102, 115, 110
จุดที่ 7 (ค่า 102) จะได้ค่าเฉลี่ยของจุดที่ 1-7 = (100+95+110+105+120+98+102)/7 = 105.7
DAX Formula:

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

Result:

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

ตัวอย่างที่ 2: ค่าเฉลี่ยจากแถวก่อนหน้าเท่านั้น (excludeCurrent)
Moving Avg Prev 7 = MOVINGAVERAGE([Total Sales], 7, FALSE)
ในตัวอย่างเดิม จุดที่ 7 จะได้ค่าเฉลี่ยของจุดที่ 1-6 = (100+95+110+105+120+98)/6 = 104.7 ใช้เมื่อต้องการดูแนวโน้มจากอดีตเท่านั้น
DAX Formula:

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

Result:

ค่าเฉลี่ยของ 7 แถวก่อนหน้า ไม่รวมแถวปัจจุบัน

ตัวอย่างที่ 3: ค่าเฉลี่ยเคลื่อนที่หน้าต่างเล็ก (3 จุด)
Moving Avg Sales 3 = MOVINGAVERAGE([Total Sales], 3)
window เล็ก (3 จุด) จะเรียบน้อยกว่า window ใหญ่ (7 จุด) แต่ตอบสนองต่อการเปลี่ยนแปลงเร็วกว่า ใช้เมื่อต้องการจับสัญญาณเร็ว
DAX Formula:

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

Result:

ค่าเฉลี่ยเคลื่อนที่ของ 3 จุด ตอบสนองต่อการเปลี่ยนแปลงเร็วกว่า window ใหญ่

ตัวอย่างที่ 4: เปรียบเทียบค่าปัจจุบันกับแนวโน้ง
Deviation from Trend = [Total Sales] - MOVINGAVERAGE([Total Sales], 7)
ถ้า [Total Sales] = 120 และ MOVINGAVERAGE = 105 ผลลัพธ์ = 15 (แสดงว่าค่าปัจจุบันสูงกว่าแนวโน้ม 15) ใช้เพื่อดูความผิดปกติของข้อมูล
DAX Formula:

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

Result:

ค่าส่วนต่างระหว่างค่าปัจจุบันกับแนวโน้ง (positive = สูงกว่าแนวโน้ม, negative = ต่ำกว่าแนวโน้ม)

ตัวอย่างที่ 5: ใช้ reset เมื่อมีการเปลี่ยนหมวดหมู่
Moving Avg by Category = MOVINGAVERAGE([Total Sales], 7, TRUE, ROWS, , DEFAULT, LOWESTPARENT)
หากมีข้อมูลตามหมวดหมู่ (เช่น A, A, A, B, B, B) การนับค่าเฉลี่ยจะรีเซ็ตเมื่อเปลี่ยนจากหมวดหมู่ A เป็น B ช่วยหลีกเลี่ยงการคำนวณข้ามหมวดหมู่
DAX Formula:

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

Result:

ค่าเฉลี่ยเคลื่อนที่ 7 จุด ในแต่ละหมวดหมู่ (รีเซ็ตเมื่อเปลี่ยนหมวดหมู่)

FAQs

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

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

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

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

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

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

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

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

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

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

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

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

Resources & Related

Additional Notes

MOVINGAVERAGE เป็นฟังก์ชัน Visual Calculations ที่คำนวณค่าเฉลี่ยเคลื่อนที่ตามแกนที่ระบุ (row axis หรือ column axis) บนตารางข้อมูลของ visual มันนำค่า Expression มาหาค่าเฉลี่ยใน window ขนาดที่กำหนด (เช่น 7 จุด หรือ 7 วัน) ซึ่งช่วยให้แนวโน้มข้อมูลเรียบและชัดเจนขึ้น

ที่เจ๋งคือ MOVINGAVERAGE ทำงานตามลำดับของการแสดงผลในตัวกริด ไม่ใช่ตามเวลา หากคุณต้องการค่าเฉลี่ยเคลื่อนที่ของ 7 จุด มันจะเอาแถวปัจจุบันและแถวก่อนหน้า 6 แถว (หรือตามการตั้งค่า) มาหาค่าเฉลี่ย ท่านสามารถควบคุมขนาด window และว่าจะรวมแถวปัจจุบันหรือไม่

ส่วนตัวผมถือว่า MOVINGAVERAGE มีประโยชน์มากเมื่อต้องการทำ dashboard ที่มีกราฟแนวโน้มเรียบขึ้น เช่นกราฟยอดขายรายวันที่ผันผวนมาก หรือข้อมูล stock price ที่ปั่นไปปั่นมา มันช่วยให้เห็นแนวโน้มจริงได้ชัดขึ้น แต่ต้องใช้ใน Visual Calculations เท่านั้นนะครับ

Leave a Reply

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