共用方式為


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,結果相同。

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

DAX 視覺計算

範例 4 - 視覺計算

下列視覺計算 DAX 查詢:

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

傳回依月份的累計總銷售額,依每個季度計算。

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
範圍
RANK
ROWNUMBERRUNNINGSUM