WINDOW
傳回位於指定間隔內的多個資料列。
語法
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
參數
詞彙 | 定義 |
---|---|
寄件者 | 指出視窗的開始位置。 其可為傳回純量值的任何 DAX 運算式。 行為取決於 <from_type> 參數: - 如果 <from_type> 為 REL,則從目前資料列返回 (負值) 或前往 (正值) 的資料列數,以取得視窗中的第一個資料列。 - 如果 <from_type> 為 ABS,且 <from> 為正數,則其為從分割區開頭開始視窗的位置。 編制索引是以 1 為基礎。 例如,1 表示視窗從資料分割的開頭開始。 如果 <from> 為負數,則其為從分割區結尾開始視窗的位置。 -1 表示分割區中的最後一個資料列。 |
from_type | 修改 <from> 參數的行為。 可能的值為 ABS (絕對) 和 REL (相對)。 預設值為 REL。 |
打給 | 與 <from> 相同,但表示視窗的結尾。 最後一個資料列包含在視窗中。 |
to_type | 與 <from_type> 相同,但會修改 <to> 的行為。 |
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。 |
傳回值
視窗中的所有資料列。
備註
除了 DAX 資料表函式新增的資料行,當 <matchBy> 不存在時,為 <relation> 中的每個資料行,或是當 <matchBy> 存在時,為 <matchBy> 和 <partitionBy> 中的每個資料行,必須有對應的外部值,才能協助定義要操作的目前資料列。 如果 <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> 搭配使用。 如果 <重設> 存在, <可以指定座標軸> ,但 <無法指定關聯> 。
範例 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
範圍
RANK
ROWNUMBERRUNNINGSUM