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อย่างชัดเจน
- นิพจน์ และ partitionBy ทั้งหมดorderByต้องเป็นชื่อคอลัมน์ที่ตรงตามเกณฑ์และมาจากตารางเดียว
- ค่าเริ่มต้นคือ ALLSELECTED() ของคอลัมน์ทั้งหมดใน orderBy และ partitionBy
orderBy (ไม่บังคับ) คําสั่ง ORDERBY() ที่มีนิพจน์ที่กําหนดวิธีการเรียงลําดับแต่ละพาร์ติชัน
ถ้าเว้นไว้:
- คุณต้องระบุ relation อย่างชัดเจน
- ค่าเริ่มต้นการเรียงลําดับตามทุกคอลัมน์ใน relation ที่ยังไม่ได้ระบุในpartitionBy
blanks (ไม่บังคับ) ค่าจาระเหยที่กําหนดวิธีการจัดการค่าว่างเมื่อเรียงลําดับ relation หรือ axis
ค่าที่สนับสนุนคือ:
  • DEFAULT (ค่าเริ่มต้น) ซึ่งลักษณะการทํางานสําหรับค่าตัวเลขคือการเรียงลําดับค่าว่างระหว่างศูนย์และค่าลบ ลักษณะการทํางานสําหรับสตริงคือการเรียงลําดับค่าว่างก่อนสตริงทั้งหมด รวมถึงสตริงที่ว่างเปล่า
  • FIRST: ช่องว่างจะถูกเรียงลําดับที่ส่วนเริ่มต้นเสมอ โดยไม่คํานึงถึงการเรียงลําดับจากน้อยไปหามากหรือจากมากไปหาน้อย
  • LAST: ช่องว่างจะถูกเรียงลําดับที่ส่วนท้ายเสมอ โดยไม่คํานึงถึงการเรียงลําดับจากน้อยไปหามากหรือจากมากไปหาน้อย

เมื่อคุณระบุทั้งblanksพารามิเตอร์และช่องว่างในฟังก์ชัน () บนORDERBYแต่ละนิพจน์ แต่ละนิพจน์ blanks orderBy จะมีความสําคัญสําหรับนิพจน์ orderBy ที่เกี่ยวข้อง นิพจน์ OrderBy โดยไม่ blanks ระบุจะ blanks เป็นไปตามพารามิเตอร์บนฟังก์ชันหลัก
partitionBy (ไม่บังคับ) คําสั่ง () ที่มีคอลัมน์ที่กําหนดวิธีการแบ่งพาร์ติชัน ถ้าเว้นไว้ relation จะถือว่าเป็นพาร์ติชันเดียว
matchBy (ไม่บังคับ) ส่วนคําสั่ง () ที่มีคอลัมน์ที่กําหนดวิธีการจับคู่ข้อมูลและระบุแถวปัจจุบัน
reset (ไม่บังคับ) พร้อมใช้งานในการคํานวณวิชวลเท่านั้น ระบุว่าการคํานวณจะรีเซ็ตและระดับใดของลําดับชั้นคอลัมน์ของรูปร่างวิชวล ค่าที่ยอมรับคือ: การอ้างอิงเขตข้อมูลไปยังคอลัมน์ในรูปร่างวิชวลปัจจุบัน NONE (ค่าเริ่มต้น) LOWESTPARENTHIGHESTPARENTหรือจํานวนเต็ม ลักษณะการทํางานจะขึ้นอยู่กับเครื่องหมายจํานวนเต็ม:
- ถ้าศูนย์หรือเว้นไว้ การคํานวณจะไม่รีเซ็ต เทียบเท่ากับ NONE
- ถ้าเป็นค่าบวก จํานวนเต็มจะระบุคอลัมน์ที่เริ่มต้นจากสูงสุด โดยไม่ขึ้นอยู่กับเกรน HIGHESTPARENT เทียบเท่ากับ 1
- ถ้าเป็นค่าลบ จํานวนเต็มจะระบุคอลัมน์ที่เริ่มต้นจากต่ําสุด ซึ่งสัมพันธ์กับเกรนปัจจุบัน LOWESTPARENT เทียบเท่ากับ -1

ค่าผลลัพธ์

แถวทั้งหมดจากหน้าต่าง

หมายเหตุ

ยกเว้นสําหรับคอลัมน์ที่เพิ่มเข้ามาโดย DAX ฟังก์ชันตาราง แต่ละคอลัมน์ใน relation (เมื่อ matchBy ไม่ปรากฏ) หรือแต่ละคอลัมน์ใน matchBy และ partitionBy (เมื่อ matchBy ปรากฏ) ต้องมีค่าภายนอกที่สอดคล้องกันเพื่อช่วยกําหนดแถวปัจจุบันที่จะทํางาน ถ้า from_type และ to_type ทั้งสอง มีค่า ABSต่อไปนี้จะนําไปใช้กับคอลัมน์เท่านั้น partitionBy :

  • ถ้ามีคอลัมน์ภายนอกที่สอดคล้องกันอยู่หนึ่งคอลัมน์ ให้ใช้ค่าของคอลัมน์นั้น
  • ถ้าไม่มีคอลัมน์ภายนอกที่สอดคล้องกันอยู่:
    • WINDOW ก่อนอื่น จะกําหนดคอลัมน์ทั้งหมดที่ไม่มีคอลัมน์ภายนอกที่สอดคล้องกัน
    • สําหรับการรวมค่าที่มีอยู่สําหรับคอลัมน์เหล่านี้ใน WINDOWบริบท WINDOW หลัก จะถูกประเมินและแถวที่สอดคล้องกันจะถูกส่งกลับ
    • 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

ถ้าค่าของ reset เป็นแบบสัมบูรณ์ (จํานวนเต็ม HIGHESTPARENTบวก หรือการอ้างอิงเขตข้อมูล) และการคํานวณจะถูกประเมินที่หรือสูงกว่าระดับเป้าหมายในลําดับชั้น การคํานวณจะรีเซ็ตสําหรับแต่ละองค์ประกอบ นั่นคือ ฟังก์ชันจะถูกประเมินภายในพาร์ติชันที่ประกอบด้วยองค์ประกอบเฉพาะเท่านั้น

ตัวอย่างในบทความนี้สามารถใช้ได้กับตัวอย่าง Adventure Works DW 2020 Power BI Desktop แบบจําลอง หากต้องการรับแบบจําลอง โปรดดู DAX แบบจําลองตัวอย่าง

ตัวอย่างที่ 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 แทน HIGHESTPARENTด้วยผลลัพธ์เดียวกันได้

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

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

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

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

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

ส่งกลับยอดขายรวมตามเดือน โดยคํานวณตามแต่ละไตรมาส สามารถใช้ค่า LOWESTPARENT แทน -1 ด้วยผลลัพธ์เดียวกันได้