แชร์ผ่าน


หน้าต่าง

นําไปใช้กับ: การคํานวณคอลัมน์จากการคํานวณ ตารางจากการคํานวณ หน่วยวัดภาพการคํานวณ

ส่งกลับหลายแถวซึ่งอยู่ในตําแหน่งภายในช่วงเวลาที่กําหนด

ไวยากรณ์

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 ด้วยผลลัพธ์เดียวกันได้

สกรีนช็อตด้านล่างแสดงเมทริกซ์วิชวลและนิพจน์การคํานวณวิชวล:

การคํานวณวิชวล DAX

ตัวอย่างที่ 4 - การคํานวณวิชวล

คิวรี DAX การคํานวณวิชวลต่อไปนี้:

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

ส่งกลับยอดขายรวมตามเดือน โดยคํานวณตามแต่ละไตรมาส

ดัชนี
MOVINGAVERAGE
ออฟเซ็ต
ORDERBY
PARTITIONBY
เทือก
ยศ
ROWNUMBERRUNNINGSUM