WINDOW
นําไปใช้กับ: คอลัมน์จากการคํานวณตารางจากการคํานวณหน่วยวัดการคํานวณวิชวล
ส่งกลับหลายแถวซึ่งอยู่ในตําแหน่งภายในช่วงเวลาที่กําหนด
ไวยากรณ์
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
พารามิเตอร์
เงื่อนไข | คำนิยาม |
---|---|
from |
ระบุตําแหน่งที่หน้าต่างเริ่มต้น ซึ่งอาจเป็นนิพจน์ DAX ใด ๆ ที่แสดงค่าสเกลา
ลักษณะการทํางานขึ้นอยู่กับพารามิเตอร์ from_type : - ถ้า from_type คือ REL จํานวนของแถวที่จะย้อนกลับ (ค่าลบ) หรือไปข้างหน้า (ค่าบวก) จากแถวปัจจุบันเพื่อรับแถวแรกในหน้าต่าง
- ถ้า from_type ABSและ from เป็นบวก ก็จะเป็นตําแหน่งเริ่มต้นของหน้าต่างจากจุดเริ่มต้นของพาร์ติชัน การทําดัชนีเป็นแบบ 1 และ 0 จะถูกแปลเป็น 1 ตัวอย่างเช่น 0 และ 1 หมายถึงหน้าต่างเริ่มต้นจากจุดเริ่มต้นของพาร์ติชัน ถ้า from เป็นลบจะเป็นตําแหน่งของการเริ่มต้นของหน้าต่างจากส่วนท้ายของพาร์ติชัน -1 หมายถึงแถวสุดท้ายในพาร์ติชัน |
from_type |
ปรับเปลี่ยนลักษณะการทํางานของพารามิเตอร์ from ค่าที่เป็นไปได้คือค่า ABS (สัมบูรณ์) และ REL (สัมพัทธ์) ค่าเริ่มต้นคือ REL |
to |
เหมือนกับ from แต่ระบุจุดสิ้นสุดของหน้าต่าง แถวสุดท้ายจะรวมอยู่ในหน้าต่าง |
to_type |
เหมือนกับ from_type แต่ปรับเปลี่ยนลักษณะการทํางานของ to |
relation |
(ไม่บังคับ) นิพจน์ตารางที่แสดงแถวผลลัพธ์
ถ้าระบุคอลัมน์ทั้งหมดใน partitionBy ต้องมาจากคอลัมน์นั้นหรือตารางที่เกี่ยวข้อง
ถ้าเว้นไว้: ต้องมีการระบุ - orderBy อย่างชัดเจน- นิพจน์ orderBy และ partitionBy ทั้งหมดต้องเป็นชื่อคอลัมน์ที่มีคุณสมบัติครบถ้วนและมาจากตารางเดียว
- ค่าเริ่มต้นคือ ALLSELECTED() ของคอลัมน์ทั้งหมดใน orderBy และ partitionBy |
axis |
(ไม่บังคับ) แกนในรูปร่างวิชวล พร้อมใช้งานในการคํานวณวิชวลเท่านั้น และแทนที่ relation |
orderBy |
(ไม่บังคับ) คําสั่ง ORDERBY() ที่มีนิพจน์ที่กําหนดวิธีการเรียงลําดับแต่ละพาร์ติชัน
ถ้าเว้นไว้: ต้องมีการระบุ - relation อย่างชัดเจน
- ค่าเริ่มต้นการเรียงลําดับตามทุกคอลัมน์ใน relation ซึ่งยังไม่ได้ระบุใน partitionBy |
blanks |
(ไม่บังคับ) ค่าจาระเหยที่กําหนดวิธีการจัดการค่าว่างเมื่อเรียงลําดับ relation หรือ axis
ค่าที่สนับสนุนคือ:
|
partitionBy |
(ไม่บังคับ) คําสั่ง relation จะถือว่าเป็นพาร์ติชันเดียว |
matchBy |
(ไม่บังคับ) ส่วนคําสั่ง |
reset |
(ไม่บังคับ) พร้อมใช้งานในการคํานวณวิชวลเท่านั้น ระบุว่าการคํานวณรีเซ็ตหรือไม่ และระดับใดของลําดับชั้นคอลัมน์ของรูปร่างวิชวล ค่าที่ยอมรับคือ: การอ้างอิงเขตข้อมูลไปยังคอลัมน์ในรูปร่างวิชวลปัจจุบัน NONE (ค่าเริ่มต้น) LOWESTPARENT HIGHESTPARENT หรือจํานวนเต็ม ลักษณะการทํางานขึ้นอยู่กับเครื่องหมายจํานวนเต็ม: - ถ้าศูนย์หรือเว้นไว้ การคํานวณจะไม่รีเซ็ต เทียบเท่ากับ NONE
- ถ้าเป็นค่าบวก จํานวนเต็มจะระบุคอลัมน์ที่เริ่มต้นจากสูงสุด โดยไม่ขึ้นอยู่กับเกรน HIGHESTPARENT เทียบเท่ากับ 1
- ถ้าเป็นค่าลบ จํานวนเต็มจะระบุคอลัมน์ที่เริ่มต้นจากต่ําสุด ซึ่งสัมพันธ์กับเกรนปัจจุบัน LOWESTPARENT เทียบเท่ากับ -1 |
ค่าผลลัพธ์
แถวทั้งหมดจากหน้าต่าง
หมายเหตุ
ยกเว้นสําหรับคอลัมน์ที่เพิ่มโดย DAX ฟังก์ชันตาราง แต่ละคอลัมน์ใน relation
เมื่อไม่มี matchBy
อยู่ หรือแต่ละคอลัมน์ใน matchBy
และ partitionBy
เมื่อ matchBy
ปรากฏ อยู่ จะต้องมีค่าภายนอกที่สอดคล้องกันเพื่อช่วยกําหนดแถวปัจจุบันที่จะดําเนินการ ถ้าทั้ง from_type
และ to_type
ทั้งสองค่ามี ABSค่า สิ่งต่อไปนี้จะนําไปใช้กับคอลัมน์ partitionBy
เท่านั้น:
- ถ้ามีหนึ่งคอลัมน์ภายนอกที่สอดคล้องกัน ค่านั้นจะถูกใช้
- ถ้าไม่มีคอลัมน์ภายนอกที่สอดคล้องกัน:
- WINDOW จะกําหนดคอลัมน์ทั้งหมดที่ไม่มีคอลัมน์ภายนอกที่สอดคล้องกันก่อน
- สําหรับการรวมค่าที่มีอยู่สําหรับคอลัมน์เหล่านี้ในบริบทหลักของ WINDOWWINDOW จะถูกประเมิน และจะส่งกลับแถวที่สอดคล้องกัน
- ผลลัพธ์สุดท้าย WINDOW คือการรวมแถวเหล่านี้
- ถ้ามีคอลัมน์ภายนอกที่สอดคล้องกันมากกว่าหนึ่งคอลัมน์ ข้อผิดพลาดจะถูกส่งกลับ
ถ้าคอลัมน์ของ relation
ทั้งหมดถูกเพิ่มโดยฟังก์ชันตาราง DAX ระบบจะแสดงข้อผิดพลาด
ถ้า matchBy
ปรากฏ WINDOW จะพยายามใช้คอลัมน์ matchBy
และ partitionBy
เพื่อระบุแถว
หากไม่มี matchBy
และคอลัมน์ที่ระบุภายใน orderBy
และ partitionBy
ไม่สามารถระบุเฉพาะแถวทุกแถวใน relation
แล้ว:
- WINDOW จะพยายามค้นหาจํานวนคอลัมน์เพิ่มเติมน้อยที่สุดที่จําเป็นในการระบุเฉพาะทุกแถว
- ถ้าสามารถพบได้คอลัมน์ดังกล่าว WINDOW จะผนวกคอลัมน์ใหม่เหล่านี้เข้ากับ
orderBy
โดยอัตโนมัติ และแต่ละพาร์ติชันจะถูกเรียงลําดับโดยใช้ชุดคอลัมน์ orderBy ใหม่นี้ - ถ้าไม่พบคอลัมน์ดังกล่าว ข้อผิดพลาดจะถูกส่งกลับ
ตารางเปล่าจะถูกส่งกลับถ้า:
- ไม่มีค่าภายนอกที่สอดคล้องกันของคอลัมน์
orderBy
หรือpartitionBy
อยู่ภายในrelation
- หน้าต่างทั้งหมดอยู่นอกพาร์ติชัน หรือจุดเริ่มต้นของหน้าต่างจะอยู่หลังจบ
ถ้า WINDOW ถูกใช้ภายในคอลัมน์จากการคํานวณที่กําหนดไว้ในตารางเดียวกันกับ relation
และ orderBy
จะถูกละเว้น ข้อผิดพลาดจะถูกส่งกลับ
ถ้าจุดเริ่มต้นของหน้าต่างเปิดออกมาก่อนแถวแรก จากนั้นจะถูกตั้งค่าเป็นแถวแรก ในทํานองเดียวกัน ถ้าส่วนท้ายของหน้าต่างอยู่หลังแถวสุดท้ายของพาร์ติชัน จากนั้นจะถูกตั้งค่าเป็นแถวสุดท้าย
reset
สามารถใช้ในการคํานวณวิชวลเท่านั้น และไม่สามารถใช้ร่วมกับ orderBy
หรือ partitionBy
ได้ ถ้ามี reset
อยู่ สามารถระบุ axis
ได้ แต่ไม่สามารถระบุ relation
ได้
ตัวอย่างที่ 1 - หน่วยวัด
หน่วยวัดต่อไปนี้:
3-day Average Price =
AVERAGEX(
WINDOW(
-2,REL,0,REL,
SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
ORDERBY('Date'[Date]),
KEEP,
PARTITIONBY('Product'[Product])
),
CALCULATE(AVERAGE(Sales[Unit Price]))
)
ส่งกลับค่าเฉลี่ย 3 วันของราคาต่อหน่วยสําหรับแต่ละผลิตภัณฑ์ โปรดทราบว่าหน้าต่าง 3 วันประกอบด้วยสามวันซึ่งผลิตภัณฑ์มียอดขาย ไม่จําเป็นต้องเป็นสามวันปฏิทินติดต่อกัน
ตัวอย่างที่ 2 - หน่วยวัด
หน่วยวัดต่อไปนี้:
RunningSum =
SUMX (
WINDOW (
1, ABS, 0, REL,
ALLSELECTED (
'Date'[Fiscal Year],
'Date'[Month Number Of Year]
),
PARTITIONBY ( 'Date'[Fiscal Year] )
),
[Total Sales]
)
แสดงผลรวมสะสมสําหรับยอดขายทั้งหมดตามเดือนของปี โดยรีสตาร์ตสําหรับทุกปีบัญชี:
ปี | จํานวนเดือนของปี | ยอดขาย | RunningSum |
---|---|---|---|
ปีงบประมาณ 2018 | 1 | $1,327,675 | $1,327,675 |
ปีงบประมาณ 2018 | 2 | $3,936,463 | $5,264,138 |
ปีงบประมาณ 2018 | 3 | $700,873 | $5,965,011 |
ปีงบประมาณ 2018 | 4 | $1,519,275 | $7,484,286 |
ปีงบประมาณ 2018 | 5 | $2,960,378 | $10,444,664 |
ปีงบประมาณ 2018 | 6 | $1,487,671 | $11,932,336 |
ปีงบประมาณ 2018 | 7 | $1,423,357 | $13,355,693 |
ปีงบประมาณ 2018 | 8 | $2,057,902 | $15,413,595 |
ปีงบประมาณ 2018 | 9 | $2,523,948 | $17,937,543 |
ปีงบประมาณ 2018 | 10 | $561,681 | $18,499,224 |
ปีงบประมาณ 2018 | 11 | $4,764,920 | $23,264,145 |
ปีงบประมาณ 2018 | 12 | $596,747 | $23,860,891 |
FY2019 | 1 | $1,847,692 | $1,847,692 |
FY2019 | 2 | $2,829,362 | $4,677,054 |
FY2019 | 3 | $2,092,434 | $6,769,488 |
FY2019 | 4 | $2,405,971 | $9,175,459 |
FY2019 | 5 | $3,459,444 | $12,634,903 |
FY2019 | 6 | $2,850,649 | $15,485,552 |
FY2019 | 7 | $2,939,691 | $18,425,243 |
FY2019 | 8 | $3,964,801 | $22,390,045 |
FY2019 | 9 | $3,287,606 | $25,677,650 |
FY2019 | 10 | $2,157,287 | $27,834,938 |
FY2019 | 11 | $3,611,092 | $31,446,030 |
FY2019 | 12 | $2,624,078 | $34,070,109 |
FY2020 | 1 | $3,235,187 | $3,235,187 |
FY2020 | 2 | $4,070,046 | $7,305,233 |
FY2020 | 3 | $4,429,833 | $11,735,066 |
FY2020 | 4 | $4,002,614 | $15,737,680 |
FY2020 | 5 | $5,265,797 | $21,003,477 |
FY2020 | 6 | $3,465,241 | $24,468,717 |
FY2020 | 7 | $3,513,064 | $27,981,781 |
FY2020 | 8 | $5,247,165 | $33,228,947 |
FY2020 | 9 | $5,104,088 | $38,333,035 |
FY2020 | 10 | $3,542,150 | $41,875,184 |
FY2020 | 11 | $5,151,897 | $47,027,081 |
FY2020 | 12 | $4,851,194 | $51,878,275 |
ตัวอย่างที่ 3 - การคํานวณวิชวล
การคํานวณวิชวลต่อไปนี้ DAX คิวรี:
TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])
ส่งกลับยอดขายรวมตามเดือน ซึ่งคํานวณตามแต่ละปี สามารถใช้ค่า 1 และ -2 แทน HIGHESTPARENT
ที่มีผลลัพธ์เดียวกันได้
สกรีนช็อตด้านล่างแสดงเมทริกซ์วิชวลและนิพจน์การคํานวณวิชวล:
การคํานวณวิชวล
ตัวอย่างที่ 4 - การคํานวณวิชวล
การคํานวณวิชวลต่อไปนี้ DAX คิวรี:
TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])
ส่งกลับยอดขายรวมตามเดือน โดยคํานวณตามแต่ละไตรมาส
เนื้อหาที่เกี่ยวข้อง
INDEX MOVINGAVERAGE OFFSET ORDERBY PARTITIONBY RANGE RANK ROWNUMBER RUNNINGSUM