RUNNINGSUM คำนวณยอดสะสมของคอลัมน์/นิพจน์ตามลำดับบนแกนของ Visual Calculations โดยสามารถกำหนด Axis, OrderBy, Blanks และ Reset เพื่อควบคุมลำดับและจุดเริ่มสะสม
=RUNNINGSUM(<Column>[, <Axis>][, <OrderBy>][, <Blanks>][, <Reset>])
=RUNNINGSUM(<Column>[, <Axis>][, <OrderBy>][, <Blanks>][, <Reset>])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Column | column_or_expression | Yes | คอลัมน์หรือนิพจน์ที่ต้องการสะสมบนกริดของ visual | |
| Axis | axis | Optional | แกนเริ่มต้นของ visual (row context) | อ้างอิงแกนของ visual ที่ใช้เป็นลำดับสำหรับการสะสม (ROWS หรือ COLUMNS) ถ้าไม่ระบุ จะใช้แกน row context ปัจจุบัน |
| OrderBy | orderby_expression | Optional | ลำดับเริ่มต้นของ visual | กำหนดการเรียงลำดับบนแกน ใช้ <axis>[<value>] เพื่อระบุคอลัมน์และลำดับ |
| Blanks | text | Optional | DEFAULT | วิธีจัดการค่าว่าง ระบุ “DEFAULT” (ตัวเลือกเริ่มต้น) หรือรูปแบบอื่นตามความจำเป็น |
| Reset | text_or_integer | Optional | ไม่มีการรีเซ็ต | เงื่อนไขการรีเซ็ตยอดสะสม เช่น “HIGHESTPARENT” จะรีเซ็ตเมื่อไปแม่กลุ่มถัดไป หรือกำหนดเป็นจำนวนแถว |
แสดงยอดขายสะสมตามแกนเวลาใน visual โดยไม่ต้องเขียนสูตรสะสมแบบ FILTER เอง
ใช้ร่วมกับการจัดแกน/การแบ่งกลุ่มของ visual เพื่อสะสมภายในกลุ่ม
Sales Running Total = RUNNINGSUM([Total Sales])Sales Running Total = RUNNINGSUM([Total Sales])
ได้ค่า Total Sales แบบสะสมตามลำดับวันที่แสดงบน visual (วันแรก=จำนวนวันแรก, วันสอง=วันแรก+วันสอง, ...).
Annual Sales Running = RUNNINGSUM([Total Sales], ROWS(), , HIGHESTPARENT)Annual Sales Running = RUNNINGSUM([Total Sales], ROWS(), <Sales[Year]>, HIGHESTPARENT)
ยอดสะสมของยอดขายตามแกน ROWS แล้วรีเซ็ตเมื่อเข้าปีใหม่ (ตามที่ HIGHESTPARENT ระบุ)
Cost Running = RUNNINGSUM([Unit Cost], ROWS(), )Cost Running = RUNNINGSUM([Unit Cost], ROWS(), <Sales[Date]>)
ได้ต้นทุนแบบสะสมตามลำดับวันที่ที่ระบุใน OrderBy (อาจเรียงจากเก่าไปใหม่ หรือใหม่ไปเก่า)
Classic Running = VAR CurrentDate = MAX(Sales[Date]) RETURN CALCULATE(SUM(Sales[Amount]), Sales[Date]Classic Running = VAR CurrentDate = MAX(Sales[Date]) RETURN CALCULATE(SUM(Sales[Amount]), Sales[Date] <= CurrentDate)
ยอดสะสมตามวันปัจจุบันโดยใช้ CALCULATE กับ FILTER
RUNNINGSUM สะสมค่า (รวมสะสม) ส่วน MOVINGAVERAGE คำนวณค่าเฉลี่ยของช่วง n แถวก่อนหน้า ทั้งสอง đều ใช้ Visual Calculations แต่วัตถุประสงค์ต่างกัน
ใช้ใน Visual Calculations (สร้างใน Power BI Desktop วิธี Create → Calculated column for visual) ไม่ใช่ใน DAX measure ปกติ ถ้าต้องการยอดสะสมใน measure ให้ใช้ CALCULATE กับ FILTER แทน
ให้ตรวจสิ่งต่อไปนี้: (1) visual ใช้แกนอะไร (ROWS or COLUMNS) (2) ลำดับของแกนตามที่กำหนดใน OrderBy (3) มีการ Reset ที่ค่อนข้างซูมลึก (HIGHESTPARENT) หรือไม่ เพราะ RUNNINGSUM อาศัยโครงสร้างกริดของ visual อย่างสิ้นเชิง
ขึ้นอยู่กับพารามิเตอร์ Blanks ที่กำหนด DEFAULT จะปล่อยให้ระบบจัดการแบบอัตโนมัติ สามารถระบุ FIRST หรือ LAST เพื่อบังคับให้ค่าว่างไปที่ต้น/ท้าย
RUNNINGSUM ใช้คำนวณ “ยอดสะสม” (running total) ตามแกนที่ระบุของ Visual Calculations โดยสะสมจากจุดแรกของแกนไปยังจุดปัจจุบัน เหมาะกับการวาดกราฟขยายตัว เช่น ยอดขายสะสมตามวัน หรือต้นทุนสะสมตามอาจารย์อิสระบน visual
ที่เจ๋งคือ RUNNINGSUM ถูกออกแบบเฉพาะสำหรับ Visual Calculations (ตัวคำนวณบนกริดของ visual โดยตรง) มากกว่าการเขียน measure ทั่วไป มันอาศัยลำดับแถวและแกนของ visual โดยอัตโนมัติ ถ้าเปลี่ยนลำดับหรือโครงสร้างแกน ผลลัพธ์ก็เปลี่ยนตามไป
ส่วนตัวผมถือว่า RUNNINGSUM เป็นเครื่องมือสำหรับงาน visual ที่ละเอียด ไม่ใช่ measure ที่ใช้บ่อยๆ ถ้าต้องทำยอดสะสมใน measure ปกติ ผมยังใช้ CALCULATE กับ FILTER วิธีดั้งเดิมมากกว่า เพราะมันชัดเจนและควบคุมได้ดี