WINDOW ดึงช่วงแถวภายในพาร์ทิชันที่กำหนดตามลำดับการเรียง คืนค่าเป็นตาราง เหมาะกับการทำคำนวณแบบช่วง (window) เช่น rolling หรือช่วงรอบแถวปัจจุบัน
=WINDOW(<From>[, <FromType>], <To>[, <ToType>][, <Relation>][, <OrderBy>][, <Blanks>][, <PartitionBy>][, <MatchBy>][, <Reset>])
=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 | ไม่ระบุ | เงื่อนไข/การตั้งค่าการรีเซ็ตช่วงในบางกรณี (ขึ้นกับรูปแบบที่ใช้) |
เช่น เอาแถวก่อนหน้าและถัดไปเพื่อทำการสรุปแบบช่วง
เช่น สรุปยอดในช่วงแถวล่าสุดตามลำดับที่กำหนด
Window Rows (Concept) = WINDOW( -2, 0, ORDERBY('DimDate'[Date]) )=Window Rows (Concept) =
WINDOW(
-2,
0,
ORDERBY('DimDate'[Date])
)
ได้ตารางของแถวในช่วงออฟเซ็ตที่กำหนดตามลำดับวันที่
Window Rows by Customer (Concept) = WINDOW( -3, 0, ORDERBY(Sales[OrderDate]), PARTITIONBY(Sales[CustomerID]) )=Window Rows by Customer (Concept) =
WINDOW(
-3,
0,
ORDERBY(Sales[OrderDate]),
PARTITIONBY(Sales[CustomerID])
)
ได้ช่วงแถวล่าสุดภายในแต่ละ CustomerID
Rolling Sum (Concept) = SUMX( WINDOW(-6, 0, ORDERBY('DimDate'[Date])), [Sales Amount] )=Rolling Sum (Concept) =
SUMX(
WINDOW(-6, 0, ORDERBY('DimDate'[Date])),
[Sales Amount]
)
ได้ผลลัพธ์เป็นยอดรวมของช่วงแถวที่ WINDOW คืนมา
WINDOW คืนค่าเป็นตาราง (ชุดของแถว) จึงมักต้องนำไปสรุปต่อด้วย iterator เช่น SUMX/COUNTROWS เพื่อให้ได้ค่าสเกลาร์
เพราะการสร้างช่วงแถวต้องอาศัยลำดับที่ชัดเจน และบางกรณีต้องการสร้างช่วงแยกกันภายในแต่ละกลุ่ม (พาร์ทิชัน) เพื่อให้ผลลัพธ์ถูกต้อง
WINDOW ใช้ดึงช่วงของแถวภายในพาร์ทิชัน (partition) ตามลำดับที่กำหนด เหมาะกับงานคำนวณแบบช่วงต่อเนื่อง เช่น การทำ rolling window, การหาช่วงแถวรอบ ๆ แถวปัจจุบัน หรือการคำนวณแบบอาศัยลำดับ/อันดับ โดย WINDOW จะคืนค่าเป็นตาราง (ชุดของแถว) เพื่อให้นำไปสรุปต่อด้วย iterator ได้