INDEX
傳回絕對位置的數據列,由 position 參數指定,在指定的數據分割內,依指定的順序排序。 如果目前的分割區無法推斷為單一分割區,可能會傳回多個數據列。
語法
INDEX(<position>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
參數
術語 | 定義 |
---|---|
position |
從中取得數據的絕對位置(1 為基底: - position 為正數:1 為第一列、2 為第二列等。- position 為負數:-1 為最後一個數據列、-2 為第二個最後一列等 當 position 脫離界限或零或 BLANK() INDEX 會傳回空的數據表。 它可以是傳回純量值的任何 DAX 表示式。 |
relation |
(選擇性)傳回輸出的數據表運算式。
如果指定, partitionBy 中的所有數據行都必須來自它或相關的數據表。
如果省略:必須明確指定 - orderBy 。
- 所有 orderBy 和 partitionBy 表示式都必須是完整數據行名稱,而且來自單一數據表。
- 預設為 orderBy 和 partitionBy 中的所有數據行 ALLSELECTED() 。 |
axis |
(選擇性)視覺圖形中的軸。 只適用於視覺計算,並取代 relation 。 |
orderBy |
(選擇性)ORDERBY() 子句,其中包含定義每個分割區排序方式的表達式。
如果省略:必須明確指定 - relation 。
- 預設會依尚未在 partitionBy 中指定之 relation 中的每個數據行排序。 |
blanks |
(選擇性)列舉,定義排序 relation 或 axis 時如何處理空白值。
支援的值為:
注意,當 ORDERBY() 函式中的 blanks 參數和空白同時指定個別表達式時,blanks 個別 orderBy 表達式會優先處理相關的 orderBy 表達式,而未指定 blanks 的 orderBy 表達式則會接受父函式上的 blanks 參數。 |
partitionBy |
(選擇性)PARTITIONBY() 子句,其中包含定義分割 relation 方式的數據行。 如果省略,則會將 relation 視為單一分割區。 |
matchBy |
(選擇性)MATCHBY() 子句,其中包含定義如何比對數據及識別目前數據列的數據行。 |
reset |
(選擇性)僅適用於視覺計算。 指出計算是否重設,以及視覺圖形數據行階層的哪個層級。 接受的值包括:目前視覺圖形中數據行的欄位參考、NONE (預設值)、LOWESTPARENT 、HIGHESTPARENT 或整數。 行為取決於整數符號:- 如果零或省略,則計算不會重設。 相當於 NONE 。
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。 |
傳回值
位於絕對位置的數據列。
言論
每個 partitionBy
和 matchBy
數據行都必須有對應的外部值,以下列行為協助定義要操作的「目前分割區」:
- 如果只有一個對應的外部數據行,則會使用其值。
- 如果沒有對應的外部資料列:
-
INDEX 會先判斷沒有對應外部數據行的所有
partitionBy
和matchBy
數據行。 - 針對 INDEX父內容中這些數據行的每個現有值組合,會評估 INDEX 並傳回一個數據列。
- INDEX的最終輸出是這些數據列的聯集。
-
INDEX 會先判斷沒有對應外部數據行的所有
- 如果有多個對應的外部數據行,則會傳回錯誤。
如果 matchBy
存在,INDEX 會嘗試使用 matchBy
和 partitionBy
數據行來識別數據列。
如果 matchBy
不存在,且 orderBy
和 partitionBy
中指定的數據行無法唯一識別 relation
中的每個資料列:
- INDEX 會嘗試尋找唯一識別每個數據列所需的最少額外數據行數目。
- 如果可以找到這類數據行,INDEX 會自動將這些新數據行附加至
orderBy
,而且每個數據分割都會使用這組新的 OrderBy 數據行來排序。 - 如果找不到這類數據行,則會傳回錯誤。
如果:
- PartitionBy 數據行的對應外部值不存在於
relation
內。 -
position
值是指數據分割內不存在的位置。
如果在與 relation
相同的數據表上定義的匯出數據行內使用 INDEX,則會省略 orderBy
,則會傳回錯誤。
reset
只能用於視覺計算,而且不能與 orderBy
或 partitionBy
搭配使用。 如果 reset
存在,則可以指定 axis
,但無法指定 relation
。
範例 1 - 計算結果列
下列 DAX 查詢:
EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))
傳回下表:
DimDate[CalendarYear] |
---|
2005 |
範例 2 - 計算結果列
下列 DAX 查詢:
EVALUATE
SUMMARIZECOLUMNS (
FactInternetSales[ProductKey],
DimDate[MonthNumberOfYear],
FILTER (
VALUES(FactInternetSales[ProductKey]),
[ProductKey] < 222
),
"CurrentSales", SUM(FactInternetSales[SalesAmount]),
"LastMonthSales",
CALCULATE (
SUM(FactInternetSales[SalesAmount]),
INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
)
)
ORDER BY [ProductKey], [MonthNumberOfYear]
傳回下表:
FactInternetSales[ProductKey] | DimDate[MonthNumberOfYear] | [CurrentSales] | [LastMonthSales] |
---|---|---|---|
214 | 1 | 5423.45 | 8047.7 |
214 | 2 | 4968.58 | 8047.7 |
214 | 3 | 5598.4 | 8047.7 |
214 | 4 | 5073.55 | 8047.7 |
214 | 5 | 5248.5 | 8047.7 |
214 | 6 | 7487.86 | 8047.7 |
214 | 7 | 7382.89 | 8047.7 |
214 | 8 | 6543.13 | 8047.7 |
214 | 9 | 6788.06 | 8047.7 |
214 | 10 | 6858.04 | 8047.7 |
214 | 11 | 8607.54 | 8047.7 |
214 | 12 | 8047.7 | 8047.7 |
217 | 1 | 5353.47 | 7767.78 |
217 | 2 | 4268.78 | 7767.78 |
217 | 3 | 5773.35 | 7767.78 |
217 | 4 | 5738.36 | 7767.78 |
217 | 5 | 6158.24 | 7767.78 |
217 | 6 | 6998 | 7767.78 |
217 | 7 | 5563.41 | 7767.78 |
217 | 8 | 5913.31 | 7767.78 |
217 | 9 | 5913.31 | 7767.78 |
217 | 10 | 6823.05 | 7767.78 |
217 | 11 | 6683.09 | 7767.78 |
217 | 12 | 7767.78 | 7767.78 |
範例 3 - 視覺計算
下列視覺計算 DAX 查詢:
SalesComparedToBeginningOfYear = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, ROWS, HIGHESTPARENT))
SalesComparedToBeginningOfQuarter = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, , -1))
增強數據表,使其在每個月包含:
- 總銷售額;
- 與個別年份第一個月的差異:
- 和個別季度第一個月的差異。
下列螢幕快照顯示視覺化矩陣和第一個視覺計算表示式: