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 。- 所有 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。 |
傳回值
視窗中的所有數據列。
備註
除了 DAX 數據表函式所加入的數據行之外,relation
中的每個數據行,當 matchBy
不存在時,或 matchBy
和 partitionBy
中的每個數據行,當 matchBy
存在時,都必須有對應的外部值,以協助定義要操作的目前數據列。 如果 from_type
和 to_type
兩者都有值 ABS,則下列內容只適用於 partitionBy
數據行:
- 如果只有一個對應的外部數據行,則會使用其值。
- 如果沒有對應的外部資料列:
- WINDOW 會先判斷沒有對應外部數據行的所有數據行。
- 針對 WINDOW父內容中這些數據行之現有值的每個組合,會評估 WINDOW,並傳回對應的數據列。
- WINDOW 最終輸出是這些數據列的聯集。
- 如果有多個對應的外部數據行,則會傳回錯誤。
如果 DAX 數據表函式新增了所有 relation
的數據行,則會傳回錯誤。
如果 matchBy
存在,WINDOW 會嘗試使用 matchBy
和 partitionBy
數據行來識別數據列。
如果 matchBy
不存在,且 orderBy
內指定的數據行和 partitionBy
無法唯一識別 relation
中的每個數據列,則:
- WINDOW 會嘗試尋找唯一識別每個數據列所需的最少額外數據行數目。
- 如果可以找到這類數據行,WINDOW 會自動將這些新數據行附加至
orderBy
,而且每個分割區都會使用這組新的 orderBy 數據行來排序。 - 如果找不到這類數據行,則會傳回錯誤。
如果:
-
orderBy
或partitionBy
數據行的對應外部值不存在於relation
中。 - 整個視窗位於分割區之外,或視窗的開頭在結束之後。
如果在與 relation
相同的數據表上定義的計算數據行內使用 WINDOW,則會省略 orderBy
,則會傳回錯誤。
如果視窗的開頭在第一個數據列之前,則會設定為第一個數據列。 同樣地,如果視窗的結尾是在數據分割的最後一個數據列之後,則會設定為最後一個數據列。
reset
只能用於視覺計算,而且不能與 orderBy
或 partitionBy
搭配使用。 如果 reset
存在,則可以指定 axis
,但無法指定 relation
。
範例 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 |
---|---|---|---|
FY2018 | 1 | $1,327,675 | $1,327,675 |
FY2018 | 2 | $3,936,463 | $5,264,138 |
FY2018 | 3 | $700,873 | $5,965,011 |
FY2018 | 4 | $1,519,275 | $7,484,286 |
FY2018 | 5 | $2,960,378 | $10,444,664 |
FY2018 | 6 | $1,487,671 | $11,932,336 |
FY2018 | 7 | $1,423,357 | $13,355,693 |
FY2018 | 8 | $2,057,902 | $15,413,595 |
FY2018 | 9 | $2,523,948 | $17,937,543 |
FY2018 | 10 | $561,681 | $18,499,224 |
FY2018 | 11 | $4,764,920 | $23,264,145 |
FY2018 | 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 和 -2 可以使用,而不是 HIGHESTPARENT
,結果相同。
下列螢幕快照顯示視覺化矩陣和視覺計算表示式:
範例 4 - 視覺計算
下列視覺計算 DAX 查詢:
TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])
傳回依月份的累計總銷售額,依每個季度計算。
相關內容
INDEX MOVINGAVERAGE OFFSET ORDERBY PARTITIONBY RANGE RANK ROWNUMBER RUNNINGSUM