回傳位於指定區間內的多列。
語法
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 表達式必須是完全限定的欄位名稱,且來自單一資料表。
- 預設為 ALLSELECTED 和 orderBy中的所有數據行 partitionBy()。 |
orderBy |
(選擇性)ORDERBY() 子句,其中包含定義每個分割區排序方式的表達式。
若未填寫: - 必須明確指定 relation 。
- 預設以未在 partitionByS 中指定的欄位relation排序。 |
blanks |
(選擇性)列舉,定義排序 relation 或 axis時如何處理空白值。
支援的值為:
當你在()函式中同時指定 blanks參數和空白ORDERBY時,blanks在個別的 orderBy 表達式中,對於相關的 orderBy 表達式會優先。 OrderBy 表達式(未 blanks 指定)會尊重 blanks 父函數上的參數。 |
partitionBy |
(選擇性) PARTITIONBY() 子句,其中包含定義分割方式 relation 的數據行。 如果省略,則會將 relation 視為單一分割區。 |
matchBy |
(選擇性) MATCHBY() 子句,其中包含定義如何比對數據及識別目前數據列的數據行。 |
reset |
(選擇性)僅適用於視覺計算。 表示計算是否會重置,以及視覺圖形欄位階層的哪一層級。 接受的值包括:目前視覺圖形中數據行的欄位參考、NONE(預設值)、LOWESTPARENT、HIGHESTPARENT或整數。 行為依整數符號而定: - 若為零或省略,計算不會重置。 相當於 NONE。
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。 |
傳回值
視窗中的所有數據列。
備註
除了由 DAX 表格函式新增的欄位外,每個欄位 relation (當 matchBy 不存在時)或 matchBypartitionBymatchBy 每欄(當存在時)必須有對應的外部值,以幫助定義當前要操作的列。 若 from_type 和 to_type 皆有 ABS,則以下僅適用於列:partitionBy
- 若存在對應的外欄,則使用其值。
- 若無對應的外欄:
- WINDOW 首先決定所有沒有對應外欄的欄位。
- 對於這些欄位 WINDOW在 父上下文 WINDOW 中任意組合的既有值,都被評估,並回傳相應的列。
- WINDOW的最終輸出是這些列的聯集。
- 若存在多個對應的外欄,則會回傳錯誤。
如果 relation 數據表函式新增了所有 DAX的數據行,則會傳回錯誤。
如果 matchBy 存在,則 WINDOW 嘗試使用 matchBy 和 partitionBy 欄位來識別該列。
如果 matchBy 不存在,且欄位在 中指定 orderBy ,且 partitionBy 無法唯一識別 : relation中的每一列。
- WINDOW 嘗試尋找唯一識別每一列所需的最少額外欄位數。
- 若能找到此類欄位, WINDOW 會自動將這些新欄位附加到
orderBy,每個分割則使用這組新的 orderBy 欄位進行排序。 - 若找不到此類欄位,則會回傳錯誤。
如果:
- 或欄位對應的外部值
orderBypartitionBy不存在於relation。 - 整個視窗都在隔間外面,或者視窗的起點在隔板結束之後。
如果你在同一表relation中定義的計算欄位中 使用 WINDOW ,且orderBy省略了 ,則會回傳錯誤。
如果視窗的開始在第一列之前,則會設定為第一列。 同樣地,如果視窗的結尾在分割區的最後一列之後,則設為最後一列。
你只能用 reset 在視覺計算中,不能和 orderBy 或 partitionBy/ 一起用。 如果reset存在,你可以指定但不relation行。axis
若 的 reset 值為絕對值(正整數, HIGHESTPARENT或欄位參考),且計算在階層中目標層級或以上,計算會對每個元素重置。 也就是說,函式會在只包含該特定元素的數據分割內進行評估。
本文中的範例可以搭配範例 Adventure Works DW 2020 Power BI Desktop 模型使用。 若要取得模型,請參閱 DAX 範例模型。
範例 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 天單位價格平均。 三天窗口包含產品銷售的三天,不一定是連續三個日曆日。
範例 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 可以搭配相同的結果使用,而不是 HIGHESTPARENT。
下列螢幕快照顯示視覺化矩陣和視覺計算表示式:
範例 4 - 視覺計算
下列視覺計算 DAX 查詢:
TotalSalesRunningSumByQuarter =
SUMX ( WINDOW ( 0, ABS, 0, REL,, -1 ), [SalesAmount] )
傳回依月份的累計總銷售額,依每個季度計算。
您可以使用 值 LOWESTPARENT ,而不是 -1,併產生相同的結果。