แชร์ผ่าน


OFFSET

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

ส่งกลับแถวเดียวที่วางไว้ก่อนหรือหลัง แถวปัจจุบัน ภายในตารางเดียวกันตามออฟเซตที่กําหนด ถ้าแถวปัจจุบันไม่สามารถอนุมานเป็นแถวเดียว ได้ ระบบอาจส่งกลับหลายแถว

วากยสัมพันธ์

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

พารามิเตอร์

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

ค่าผลลัพธ์

อย่างน้อยหนึ่งแถวจาก relation

หมาย เหตุ

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

  • ถ้ามีหนึ่งคอลัมน์ภายนอกที่สอดคล้องกัน ค่านั้นจะถูกใช้
  • ถ้าไม่มีคอลัมน์ภายนอกที่สอดคล้องกัน จะเป็น:
    • OFFSET จะกําหนดคอลัมน์ทั้งหมดที่ไม่มีคอลัมน์ภายนอกที่สอดคล้องกันก่อน
    • สําหรับการรวมค่าที่มีอยู่สําหรับคอลัมน์เหล่านี้ในบริบทหลักของ OFFSETOFFSET ได้รับการประเมินและแถวจะถูกส่งกลับ
    • ผลลัพธ์สุดท้าย OFFSETคือการรวมแถวเหล่านี้
  • ถ้ามีคอลัมน์ภายนอกที่สอดคล้องกันมากกว่าหนึ่งคอลัมน์ ข้อผิดพลาดจะถูกส่งกลับ

ถ้าคอลัมน์ของ relationทั้งหมดถูกเพิ่มโดยฟังก์ชันตาราง DAX ระบบจะแสดงข้อผิดพลาด

ถ้า matchBy ปรากฏ OFFSET จะพยายามใช้คอลัมน์ matchBy และ partitionBy เพื่อระบุแถว ถ้า matchBy ไม่ปรากฏ และคอลัมน์ที่ระบุภายใน orderBy และ partitionBy ไม่สามารถระบุเฉพาะทุกแถวใน relationแล้ว:

  • OFFSET จะพยายามค้นหาจํานวนคอลัมน์เพิ่มเติมน้อยที่สุดที่จําเป็นในการระบุเฉพาะทุกแถว
  • ถ้าสามารถพบได้คอลัมน์ดังกล่าว OFFSET จะผนวกคอลัมน์ใหม่เหล่านี้เข้ากับ orderByโดยอัตโนมัติ และแต่ละพาร์ติชันจะถูกเรียงลําดับโดยใช้ชุดคอลัมน์ OrderBy ใหม่นี้
  • ถ้าไม่พบคอลัมน์ดังกล่าว ข้อผิดพลาดจะถูกส่งกลับ

ตารางเปล่าจะถูกส่งกลับถ้า:

  • ไม่มีค่าภายนอกที่สอดคล้องกันของคอลัมน์ OrderBy หรือ PartitionBy อยู่ภายใน relation
  • ค่า delta ทําให้เกิดการเลื่อนไปยังแถวที่ไม่มีอยู่ภายในพาร์ติชัน

ถ้า OFFSET ถูกใช้ภายในคอลัมน์จากการคํานวณที่กําหนดไว้ในตารางเดียวกันกับ relationและ orderBy จะถูกละเว้น ข้อผิดพลาดจะถูกส่งกลับ

reset สามารถใช้ในการคํานวณวิชวลเท่านั้น และไม่สามารถใช้ร่วมกับ orderBy หรือ partitionByได้ ถ้ามี reset อยู่ สามารถระบุ axis ได้ แต่ไม่สามารถระบุ relation ได้

ตัวอย่างที่ 1 - คอลัมน์จากการคํานวณ

คิวรี DAX ต่อไปนี้:

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

ส่งกลับตารางที่สรุปยอดขายทั้งหมดสําหรับแต่ละหมวดหมู่ผลิตภัณฑ์และปีปฏิทิน รวมถึงยอดขายทั้งหมดสําหรับหมวดหมู่นั้นในปีก่อนหน้า

ตัวอย่างที่ 2 - หน่วยวัด

คิวรี DAX ต่อไปนี้:

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

ใช้ OFFSET() ในหน่วยวัดเพื่อส่งคืนตารางที่สรุปยอดขายทั้งหมดสําหรับแต่ละปีปฏิทินและยอดขายทั้งหมดสําหรับปีก่อนหน้า

ตัวอย่างที่ 3 - คอลัมน์จากการคํานวณ

คิวรี DAX ต่อไปนี้:

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

ส่งกลับตาราง FactInternetSales พร้อมการเพิ่มคอลัมน์ ซึ่งระบุสําหรับการขายแต่ละครั้ง จํานวนการขายก่อนหน้าของผลิตภัณฑ์เดียวกัน ในลําดับยอดขายจากมากไปหาน้อย โดยมีการขายปัจจุบันซึ่งระบุโดย SalesOrderNumber และ SalesOrderLineNumber หากไม่มี MATCHBYคิวรีจะส่งกลับข้อผิดพลาดเนื่องจากไม่มีคอลัมน์หลักในตาราง FactInternetSales

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

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

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

ส่งกลับความแตกต่างของยอดขายรวมระหว่างแต่ละเดือนกับยอดขายก่อนหน้าภายในปีเดียวกัน

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

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

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER