OFFSET

適用於:匯出數據行匯出數據表量值視覺計算

根據指定的位移,傳回位於相同資料表內目前資料列之前或之後的單一資料列。 如果目前的資料列無法推算為單一資料列,可能會傳回多個資料列。

語法

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

參數

詞彙 定義
delta 要從中取得資料之目前資料列之前 (負值) 或之後的資料列數。 其可為傳回純量值的任何 DAX 運算式。
relation (選擇性) 傳回輸出資料列的來源資料表運算式。
如果指定,<partitionBy> 中的所有資料行都必須以其或相關資料表做為來源。
如果省略:必須明確指定
- <orderBy>。
- 所有 <orderBy> 和 <partitionBy> 運算式都必須是完整資料行名稱,且來自單一資料表。
- 預設為 <orderBy> 和 <partitionBy> 中所有資料行的 ALLSELECTED()。
(選擇性)視覺圖形中的軸。 僅適用於視覺計算,並取代 <關聯>。
orderBy (選擇性) ORDERBY() 子句,其中包含定義每個分割區排序方式的運算式。
如果省略:必須明確指定
- <relation>。
- 預設會依 <relation> 中尚未在 <partitionBy> 中指定的每個資料行排序。
blanks (選擇性) 列舉,會定義排序時如何處理空白值。
這個參數會保留供日後使用。
目前,唯一支援的值是 DEFAULT,其中數值的行為是空白值,會在零與負值之間排序。 字串的行為是空白值,會在所有字串之前排序,包括空字串。
partitionBy (選擇性) PARTITIONBY() 子句包含定義如何分割 <relation> 的資料行。
如果省略,<relation> 會視為單一分割區。
matchBy (選擇性) MATCHBY() 子句,其中包含定義如何比對資料及識別目前資料列的資料行。
reset (選擇性)僅適用於視覺計算。 指出計算是否重設,以及視覺圖形數據行階層的哪個層級。 接受的值包括:NONE、LOWESTPARENT、HIGHESTPARENT 或整數。 行為取決於整數符號:
- 如果零或省略,則計算不會重設。 相當於 NONE。
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於 1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。

傳回值

<relation> 的一或多個資料列。

備註

除了 DAX 資料表函式新增的資料行,當 <matchBy> 不存在時,為 <relation> 中的每個資料行,或是當 <matchBy> 存在時,為 <matchBy> 和 <partitionBy> 中的每個資料行,必須有對應的外部值,才能協助定義要操作的目前資料列,行為如下:

  • 如果只有一個對應的外部資料行,則會使用其值。
  • 如果沒有對應的外部資料行,則:
    • OFFSET 會先將所有資料行判斷為沒有對應的外部資料行。
    • 針對 OFFSET 的父內容中這些資料行現有值的每個組合,都會評估 OFFSET,並傳回資料列。
    • OFFSET 最終輸出是這些資料列的聯集。
  • 如果有多個對應的外部資料行,則會傳回錯誤。

如果 DAX 資料表函式已新增所有 <relation> 的資料行,則會傳回錯誤。

如果 <matchBy> 存在,則 OFFSET 會嘗試使用 <matchBy> 和 <partitionBy> 資料行來識別資料列。
如果 <matchBy> 不存在,且 <orderBy> 和 <partitionBy> 中所指定的資料行無法唯一識別 <relation> 中的每個資料列,則:

  • OFFSET 會嘗試尋找唯一識別每個資料列所需的最少額外資料行數目。
  • 如果能夠找到這類資料行,則 OFFSET 會自動將這些新資料行附加至 <orderBy>,且每個分割區都會使用這組新的 OrderBy 資料行集來排序。
  • 如果找不到這類資料行,就會傳回錯誤。

如果發生下列情況,就會傳回空白的資料表:

  • orderBy 或 partitionBy 資料行的對應外部值不存在於 <relation> 內。
  • <delta> 值會導致切換到資料分割內不存在的資料列。

如果在與 <relation> 相同資料表上定義的計算資料行內使用 OFFSET,並且省略 <orderBy>,則會傳回錯誤。

<reset> 只能用於視覺計算中,而且不能與 <orderBy> 或 <partitionBy> 搭配使用。 如果 <重設> 存在, <可以指定座標軸> ,但 <無法指定關聯> 。

範例 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))

傳回每個月與同一年內前一個銷售額的總銷售額差異。

下列螢幕快照顯示視覺化矩陣和視覺計算表示式:

DAX 視覺計算

INDEX
ORDERBY
PARTITIONBY
MATCHBY
WINDOW
RANK
ROWNUMBER