共用方式為


OFFSET

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

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

語法

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

參數

術語 定義
delta 要從中取得數據之目前數據列之前的數據列數目(負值)或之後的數據列數。 它可以是傳回純量值的任何 DAX 表示式。
relation (選擇性)傳回輸出數據列的數據表運算式。
如果指定,partitionBy 中的所有數據行都必須來自它或相關的數據表。
如果省略:必須明確指定
- orderBy
- 所有 orderBypartitionBy 表示式都必須是完整數據行名稱,而且來自單一數據表。
- 預設為 orderBypartitionBy中的所有數據行 ALLSELECTED()。
axis (選擇性)視覺圖形中的軸。 只適用於視覺計算,並取代 relation
orderBy (選擇性)ORDERBY() 子句,其中包含定義每個分割區排序方式的表達式。
如果省略:必須明確指定
- relation
- 預設會依尚未在 partitionBy中指定之 relation 中的每個數據行排序。
blanks (選擇性)列舉,定義排序 relationaxis時如何處理空白值。
支援的值為:
  • DEFAULT (預設值),其中數值的行為是空白值,會在零和負值之間排序。 字串的行為是空白值,會在所有字串之前排序,包括空字串。
  • FIRST,不論遞增或遞減排序順序為何,一律會在開頭排序空白。
  • LAST,不論遞增或遞減排序順序為何,一律會在結尾排序空白。

注意,當 ORDERBY() 函式中的 blanks 參數和空白同時指定個別表達式時,blanks 個別 orderBy 表達式會優先處理相關的 orderBy 表達式,而未指定 blanks 的 orderBy 表達式則會接受父函式上的 blanks 參數。
partitionBy (選擇性)PARTITIONBY() 子句,其中包含定義分割 relation 方式的數據行。 如果省略,則會將 relation 視為單一分割區。
matchBy (選擇性)MATCHBY() 子句,其中包含定義如何比對數據及識別目前數據列的數據行。
reset (選擇性)僅適用於視覺計算。 指出計算是否重設,以及視覺圖形數據行階層的哪個層級。 接受的值包括:目前視覺圖形中數據行的欄位參考、NONE(預設值)、LOWESTPARENTHIGHESTPARENT或整數。 行為取決於整數符號:
- 如果零或省略,則計算不會重設。 相當於 NONE
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。

傳回值

來自 relation的一或多個數據列。

言論

除了 DAX 數據表函數所加入的數據行之外,relation中的每個數據行、matchBy 不存在,或 matchBypartitionBy中的每個數據行,當 matchBy 存在時,必須有對應的外部值,以協助定義目前要操作的數據列,並具有下列行為:

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

如果 DAX 數據表函式新增了所有 relation的數據行,則會傳回錯誤。

如果 matchBy 存在,OFFSET 會嘗試使用 matchBypartitionBy 數據行來識別數據列。 如果 matchBy 不存在,且 orderBypartitionBy 中指定的數據行無法唯一識別 relation中的每個數據列,則:

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

如果:

  • OrderBy 或 PartitionBy 資料行的對應外部值不存在於 relation中。
  • delta 值會導致移轉至數據分割內不存在的數據列。

如果在與 relation相同的數據表上定義的計算數據行內使用 OFFSET,則會省略 orderBy,則會傳回錯誤。

reset 只能用於視覺計算,而且不能與 orderBypartitionBy搭配使用。 如果 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))

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

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

DAX 視覺計算

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER