Thep Excel

WINDOW – ดึงช่วงแถว (Window) ภายในพาร์ทิชัน

WINDOW ดึงช่วงแถวภายในพาร์ทิชันที่กำหนดตามลำดับการเรียง คืนค่าเป็นตาราง เหมาะกับการทำคำนวณแบบช่วง (window) เช่น rolling หรือช่วงรอบแถวปัจจุบัน

=WINDOW(<From>[, <FromType>], <To>[, <ToType>][, <Relation>][, <OrderBy>][, <Blanks>][, <PartitionBy>][, <MatchBy>][, <Reset>])

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
4/10

Difficulty
6/10

Usefulness
5/10

Syntax & Arguments

=WINDOW(<From>[, <FromType>], <To>[, <ToType>][, <Relation>][, <OrderBy>][, <Blanks>][, <PartitionBy>][, <MatchBy>][, <Reset>])

Argument Type Required Default Description
From scalar Yes ตำแหน่งเริ่มของช่วง (เช่น ออฟเซ็ต หรืออันดับ/ลำดับตามที่ FromType กำหนด)
FromType scalar Optional ค่าตั้งต้น ชนิดการตีความ From (เช่น อ้างอิงแบบออฟเซ็ต/แบบสัมบูรณ์ตามแกน)
To scalar Yes ตำแหน่งสิ้นสุดของช่วง
ToType scalar Optional ค่าตั้งต้น ชนิดการตีความ To
Relation table Optional บริบทปัจจุบัน ตาราง/ความสัมพันธ์ที่ WINDOW จะประเมินช่วงแถวภายใน
OrderBy scalar Optional บริบทปัจจุบัน นิพจน์กำหนดลำดับการเรียงสำหรับการสร้างช่วงแถว
Blanks scalar Optional ค่าตั้งต้น วิธีจัดการค่าว่างในการเรียงลำดับ/ช่วงแถว
PartitionBy scalar Optional ไม่แบ่งเพิ่ม นิพจน์กำหนดการแบ่งพาร์ทิชัน (แบ่งกลุ่มก่อนสร้างช่วงแถว)
MatchBy scalar Optional ค่าตั้งต้น นิพจน์กำหนดการจับคู่แถวเมื่อมีค่าซ้ำในลำดับ
Reset scalar Optional ไม่ระบุ เงื่อนไข/การตั้งค่าการรีเซ็ตช่วงในบางกรณี (ขึ้นกับรูปแบบที่ใช้)

How it works

ดึงช่วงแถวรอบแถวปัจจุบัน

เช่น เอาแถวก่อนหน้าและถัดไปเพื่อทำการสรุปแบบช่วง

ทำการคำนวณแบบ rolling

เช่น สรุปยอดในช่วงแถวล่าสุดตามลำดับที่กำหนด

Examples

ตัวอย่างที่ 1: ดึงช่วงแถวแบบออฟเซ็ต (แนวคิด)
Window Rows (Concept) = WINDOW( -2, 0, ORDERBY('DimDate'[Date]) )
WINDOW คืนค่าเป็นตารางของแถวในช่วง โดยการเรียงลำดับถูกกำหนดด้วย ORDERBY เพื่อให้ช่วงแถวสอดคล้องกับลำดับวันที่
DAX Formula:

=Window Rows (Concept) =
WINDOW(
    -2,
    0,
    ORDERBY('DimDate'[Date])
)

Result:

ได้ตารางของแถวในช่วงออฟเซ็ตที่กำหนดตามลำดับวันที่

ตัวอย่างที่ 2: ทำช่วงภายในพาร์ทิชัน (แนวคิด)
Window Rows by Customer (Concept) = WINDOW( -3, 0, ORDERBY(Sales[OrderDate]), PARTITIONBY(Sales[CustomerID]) )
PARTITIONBY แบ่งพาร์ทิชันก่อน จากนั้น WINDOW จึงสร้างช่วงแถวภายในแต่ละพาร์ทิชันตามลำดับที่กำหนด
DAX Formula:

=Window Rows by Customer (Concept) =
WINDOW(
    -3,
    0,
    ORDERBY(Sales[OrderDate]),
    PARTITIONBY(Sales[CustomerID])
)

Result:

ได้ช่วงแถวล่าสุดภายในแต่ละ CustomerID

ตัวอย่างที่ 3: ใช้กับการสรุปต่อด้วย iterator (แนวคิด)
Rolling Sum (Concept) = SUMX( WINDOW(-6, 0, ORDERBY('DimDate'[Date])), [Sales Amount] )
เพราะ WINDOW คืนค่าเป็นตาราง จึงนิยมสรุปต่อด้วย iterator เช่น SUMX
DAX Formula:

=Rolling Sum (Concept) =
SUMX(
    WINDOW(-6, 0, ORDERBY('DimDate'[Date])),
    [Sales Amount]
)

Result:

ได้ผลลัพธ์เป็นยอดรวมของช่วงแถวที่ WINDOW คืนมา

FAQs

WINDOW คืนค่าเป็นตัวเลขหรือเป็นตาราง?

WINDOW คืนค่าเป็นตาราง (ชุดของแถว) จึงมักต้องนำไปสรุปต่อด้วย iterator เช่น SUMX/COUNTROWS เพื่อให้ได้ค่าสเกลาร์

ทำไมต้องกำหนด OrderBy/PartitionBy?

เพราะการสร้างช่วงแถวต้องอาศัยลำดับที่ชัดเจน และบางกรณีต้องการสร้างช่วงแยกกันภายในแต่ละกลุ่ม (พาร์ทิชัน) เพื่อให้ผลลัพธ์ถูกต้อง

Resources & Related

Additional Notes

WINDOW ใช้ดึงช่วงของแถวภายในพาร์ทิชัน (partition) ตามลำดับที่กำหนด เหมาะกับงานคำนวณแบบช่วงต่อเนื่อง เช่น การทำ rolling window, การหาช่วงแถวรอบ ๆ แถวปัจจุบัน หรือการคำนวณแบบอาศัยลำดับ/อันดับ โดย WINDOW จะคืนค่าเป็นตาราง (ชุดของแถว) เพื่อให้นำไปสรุปต่อด้วย iterator ได้

Leave a Reply

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