หน้าต่าง
นําไปใช้กับ: การคํานวณคอลัมน์จากการคํานวณ ตารางจากการคํานวณ หน่วยวัดภาพการคํานวณ
ส่งกลับหลายแถวซึ่งอยู่ในตําแหน่งภายในช่วงเวลาที่กําหนด
ไวยากรณ์
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
พารามิเตอร์
เงื่อนไข | คำนิยาม |
---|---|
จาก | ระบุตําแหน่งที่หน้าต่างเริ่มต้น ซึ่งอาจเป็นนิพจน์ DAX ใด ๆ ที่แสดงค่าสเกลา ลักษณะการทํางานขึ้นอยู่กับ <พารามิเตอร์ from_type> : - ถ้า <from_type> คือ REL จํานวนแถวที่จะย้อนกลับ (ค่าลบ) หรือไปข้างหน้า (ค่าบวก) จากแถวปัจจุบันเพื่อรับแถวแรกในหน้าต่าง -ถ้า <from_type> เป็น ABS และ <จาก> เป็นบวกแล้วมันเป็นตําแหน่งของจุดเริ่มต้นของหน้าต่างจากจุดเริ่มต้นของพาร์ติชัน การทําดัชนีจะขึ้นอยู่กับ 1 ตัวอย่างเช่น 1 หมายถึง หน้าต่างเริ่มต้นจากจุดเริ่มต้นของพาร์ติชัน ถ้า <จาก> เป็นลบ จะเป็นตําแหน่งของจุดเริ่มต้นของหน้าต่างจากส่วนท้ายของพาร์ติชัน -1 หมายถึงแถวสุดท้ายในพาร์ติชัน |
from_type | ปรับเปลี่ยนลักษณะการทํางานของ <จาก> พารามิเตอร์ ค่าที่เป็นไปได้คือ ABS (สัมบูรณ์) และ REL (สัมพัทธ์) ค่าเริ่มต้นคือ REL |
ถึง | เหมือนกับ <จาก> แต่ระบุจุดสิ้นสุดของหน้าต่าง แถวสุดท้ายจะรวมอยู่ในหน้าต่าง |
to_type | เหมือนกับ <from_type> แต่ปรับเปลี่ยนลักษณะการทํางานของ <ไปเป็น> |
ความสัมพันธ์ | (ไม่บังคับ) นิพจน์ตารางที่แสดงแถวผลลัพธ์ ถ้าระบุคอลัมน์ทั้งหมดใน <partitionBy> ต้องมาจากตารางหรือตารางที่เกี่ยวข้อง ถ้าเว้นไว้: - <orderBy> ต้องระบุ อย่างชัดเจน- นิพจน์ orderBy และ <partitionBy>> ทั้งหมด<ต้องเป็นชื่อคอลัมน์ที่มีคุณสมบัติครบถ้วนและมาจากตารางเดียว - ค่าเริ่มต้นเป็น ALLSELECTED() ของคอลัมน์<ทั้งหมดใน orderBy> และ <partitionBy> |
แกน | (ไม่บังคับ) แกนในรูปร่างวิชวล พร้อมใช้งานในการคํานวณวิชวลเท่านั้น และแทนที่<ความสัมพันธ์> |
orderBy | (ไม่บังคับ) คําสั่ง ORDERBY() ที่มีนิพจน์ที่กําหนดวิธีการเรียงลําดับแต่ละพาร์ติชัน ถ้าเว้นไว้: - <ต้องระบุความสัมพันธ์> อย่างชัดเจน - ค่าเริ่มต้นในการเรียงลําดับตามทุกคอลัมน์ที่สัมพันธ์กับ<>ไม่ได้ระบุไว้ใน <partitionBy> |
ช่อง ว่าง | (ไม่บังคับ) ค่าจาระเลี่ยงที่กําหนดวิธีการจัดการค่าว่างเมื่อเรียงลําดับ พารามิเตอร์นี้สงวนไว้สําหรับการใช้งานในอนาคต ในปัจจุบัน ค่าที่สนับสนุนเท่านั้นเป็นค่าเริ่มต้น ซึ่งลักษณะการทํางานสําหรับค่าตัวเลขจะเป็นค่าว่างที่เรียงลําดับระหว่างค่าศูนย์และค่าลบ ลักษณะการทํางานสําหรับสตริงเป็นค่าว่างจะถูกเรียงลําดับก่อนสตริงทั้งหมด รวมถึงสตริงที่ว่างเปล่า |
partitionBy | (ไม่บังคับ) คําสั่ง PARTITIONBY() ที่มีคอลัมน์ที่กําหนดวิธีการ<แบ่งพาร์ติชันความสัมพันธ์> ถ้ามีการเว้นไว้ <ความสัมพันธ์> จะถือว่าเป็นพาร์ติชันเดียว |
matchBy | (ไม่บังคับ) ส่วนคําสั่ง MATCHBY() ที่มีคอลัมน์ที่กําหนดวิธีการจับคู่ข้อมูลและระบุแถวปัจจุบัน |
รี เซ็ต | (ไม่บังคับ) พร้อมใช้งานในการคํานวณวิชวลเท่านั้น ระบุว่าการคํานวณรีเซ็ตหรือไม่ และระดับใดของลําดับชั้นคอลัมน์ของรูปร่างวิชวล ค่าที่ยอมรับคือ: NONE, LOWESTPARENT, HIGHESTPARENT หรือจํานวนเต็ม ลักษณะการทํางานจะขึ้นอยู่กับเครื่องหมายจํานวนเต็ม: - ถ้าเป็นศูนย์หรือเว้นไว้ การคํานวณจะไม่รีเซ็ต เทียบเท่ากับ NONE - ถ้าเป็นค่าบวก จํานวนเต็มจะระบุคอลัมน์ที่เริ่มต้นจากสูงสุด เป็นอิสระจากเกรน HIGHESTPARENT เทียบเท่ากับ 1 - ถ้าเป็นค่าลบ จํานวนเต็มจะระบุคอลัมน์โดยเริ่มต้นจากต่ําสุด ซึ่งสัมพันธ์กับเกรนปัจจุบัน LOWESTPARENT เทียบเท่ากับ -1 |
ค่าที่ส่งกลับ
แถวทั้งหมดจากหน้าต่าง
หมายเหตุ
ยกเว้นสําหรับคอลัมน์ที่เพิ่มโดยฟังก์ชันตาราง DAX แต่ละคอลัมน์ใน <ความสัมพันธ์>เมื่อ <matchBy> ไม่ปรากฏ หรือแต่ละคอลัมน์ใน <matchBy> และ <partitionBy> เมื่อ <matchBy> ปรากฏอยู่ จะต้องมีค่าภายนอกที่สอดคล้องกันเพื่อช่วยกําหนดแถวปัจจุบันที่จะทํางาน หาก<ทั้ง from_type> และ <to_type> มีค่า ABS สิ่งต่อไปนี้จะนําไปใช้กับคอลัมน์ partitionBy> เท่านั้น<:
- ถ้ามีหนึ่งคอลัมน์ภายนอกที่สอดคล้องกัน ค่านั้นจะถูกใช้
- ถ้าไม่มีคอลัมน์ภายนอกที่สอดคล้องกัน:
- หน้าต่างจะกําหนดคอลัมน์ทั้งหมดที่ไม่มีคอลัมน์ภายนอกที่สอดคล้องกันก่อน
- สําหรับการรวมค่าที่มีอยู่สําหรับคอลัมน์เหล่านี้ในบริบทหลักของ WINDOW จะมีการประเมิน WINDOW และแถวที่สอดคล้องกันจะถูกส่งกลับ
- ผลลัพธ์สุดท้ายของหน้าต่างคือการรวมแถวเหล่านี้
- ถ้ามีคอลัมน์ภายนอกที่สอดคล้องกันมากกว่าหนึ่งคอลัมน์ ข้อผิดพลาดจะถูกส่งกลับ
ถ้ามีการเพิ่มคอลัมน์ของ <ความสัมพันธ์>ทั้งหมดด้วยฟังก์ชันตาราง DAX ข้อผิดพลาดจะถูกส่งกลับ
ถ้ามี <matchBy> อยู่ WINDOW จะพยายามใช้ <คอลัมน์ matchBy> และ <partitionBy> เพื่อระบุแถว
หาก <matchBy> ไม่ปรากฏและคอลัมน์ที่ระบุภายใน <orderBy> และ <partitionBy> ไม่สามารถระบุทุกแถวที่สัมพันธ์กัน<>ได้ดังนั้น:
- หน้าต่างจะพยายามค้นหาจํานวนคอลัมน์เพิ่มเติมน้อยที่สุดที่จําเป็นในการระบุเฉพาะทุกแถว
- ถ้าสามารถพบได้คอลัมน์ดังกล่าว WINDOW จะผนวกคอลัมน์ใหม่เหล่านี้เข้ากับ <orderBy> โดยอัตโนมัติ และแต่ละพาร์ติชันจะถูกเรียงลําดับโดยใช้ชุดคอลัมน์ orderBy ใหม่นี้
- ถ้าไม่พบคอลัมน์ดังกล่าว ข้อผิดพลาดจะถูกส่งกลับ
ตารางเปล่าจะถูกส่งกลับถ้า:
- ไม่มีค่าภายนอกที่สอดคล้องกันของ<คอลัมน์ orderBy> หรือ <partitionBy> ภายใน<ความสัมพันธ์>
- หน้าต่างทั้งหมดอยู่นอกพาร์ติชัน หรือจุดเริ่มต้นของหน้าต่างจะอยู่หลังจบ
ถ้า WINDOW ถูกใช้ภายในคอลัมน์จากการคํานวณที่กําหนดไว้ในตารางเดียวกันเป็น <ความสัมพันธ์> และ <orderBy> ถูกเว้นไว้ ข้อผิดพลาดจะถูกส่งกลับ
ถ้าจุดเริ่มต้นของหน้าต่างเปิดออกมาก่อนแถวแรก จากนั้นจะถูกตั้งค่าเป็นแถวแรก ในทํานองเดียวกัน ถ้าส่วนท้ายของหน้าต่างอยู่หลังแถวสุดท้ายของพาร์ติชัน จากนั้นจะถูกตั้งค่าเป็นแถวสุดท้าย
<Reset> สามารถใช้ในการคํานวณวิชวลเท่านั้น และไม่สามารถใช้ร่วมกับ <orderBy> หรือ <partitionBy> ได้ ถ้า <รีเซ็ต> ปรากฏ <อยู่ สามารถระบุแกน> ได้ แต่ <ไม่สามารถระบุความสัมพันธ์> ได้
ตัวอย่างที่ 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]
)
แสดงผลรวมสะสมสําหรับยอดขายทั้งหมดตามเดือนของปี โดยรีสตาร์ตสําหรับทุกปีบัญชี:
Year | จํานวนเดือนของปี | ยอดขาย | 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])
ส่งกลับยอดขายรวมตามเดือน โดยคํานวณตามแต่ละไตรมาส
เนื้อหาที่เกี่ยวข้อง
ดัชนี
MOVINGAVERAGE
ออฟเซ็ต
ORDERBY
PARTITIONBY
เทือก
ยศ
ROWNUMBERRUNNINGSUM