WINDOW

適用於:導出數據行計算數據表Measure視覺計算

傳回位於指定間隔內的多個資料列。

語法

WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

參數

詞彙 定義
from 指出 window 的開始位置。 它可以是傳回純量 value的任何 DAX 表達式。
行為取決於 from_type 參數:
- Iffrom_type 為 REL,從目前數據列返回的數據列數目(負 valueoror 正 value),以取得 window中的 first 數據列。
- Iffrom_type 為 ABS,andfrom 為正數,則為從分割區開頭開始 window 的位置。 編制索引是以 1 為基礎。 例如,1 表示 window 從數據分割的開頭開始。 If from 為負數,則它是從分割區結尾 window 開始的位置。 -1 表示分割區中的 last 數據列。
from_type 修改 from 參數的行為。 可能的 valuesABS(絕對)and REL(相對)。 預設值為 REL。
to from相同,但表示 window結尾。 last 數據列包含在 window中。
to_type from_type相同,但會修改 to的行為。
relation (選擇性)傳回輸出數據列的數據表運算式。
If 指定,partitionByall 數據行必須來自 orrelated 數據表。
If 省略:必須明確指定
- orderBy
- AllorderByandpartitionBy 表示式必須是來自單一數據表的完整數據行名稱 and。
- 預設為 orderByandpartitionBy中 all 資料列的 ALLSELECTED() 。
axis (選擇性)視覺圖形中的軸。 只能在視覺計算中使用,and 會取代 relation
orderBy (選擇性)ORDERBY() 子句,其中包含 define 每個分割區排序方式的表達式。
If 省略:必須明確指定
- relation
- 預設會依已在 partitionBy中指定之 notrelation 中的每個數據行排序。
blanks (選擇性)列舉,定義排序時如何處理 blankvalues。
這個參數會保留供日後使用。
目前,唯一支援的 value 是 DEFAULT,其中數值 values 的行為 blankvalues 會以零 and 負 values排序。 字串的行為 blankvalues 在 all 字串之前排序,包括空字串。
partitionBy (選擇性)PARTITIONBY() 子句,其中包含數據行,define 分割 relation 的方式。 If 省略,relation 會視為單一分割區。
matchBy (選擇性)MATCHBY() 子句,其中包含 define 如何比對數據 and 識別目前數據列的數據行。
reset (選擇性)僅適用於視覺計算。 指出 if 計算重設,and 視覺效果圖形的數據行階層層級。 接受的 values 為:NONELOWESTPARENTHIGHESTPARENT、or 整數。 行為取決於整數 sign:
- If 省略零 or,計算會 not 重設。 相當於 NONE
- If 正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於1。
- If 負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。

傳回 value

從 windowAll 數據列。

備註

Except DAX 數據表函式所加入的數據行,relation中的每個數據行,當 matchBynot 存在時,ormatchByandpartitionBy中的每個數據行,當 matchBy 存在時,必須有對應的外部 value,以協助 define 要操作的目前數據列。 If from_type and to_type 兩者都有 valueABS,則下列專案僅適用於 partitionBy 數據行:

  • If 只有一個對應的外部數據行,則會使用其 value。
  • If 沒有對應的外部資料列:
    • WINDOW 會 first 判斷沒有對應外部數據行的 all 數據行。
    • 針對 WINDOW父內容中這些數據行之現有 values 的每個組合,都會評估 WINDOW,and 傳回對應的數據列。
    • WINDOW 最終輸出是這些數據列的 union。
  • If 有多個對應的外部數據行,則會傳回 error。

DAX 數據表函式會新增 relation數據行的 Ifall,則會傳回 error。

If matchBy 存在,WINDOW 會嘗試使用 matchByandpartitionBy 數據行來識別數據列。
If matchBy not orderBy and partitionBy 中指定的數據行 and 無法唯一識別 relation中的每個數據列,然後:

  • WINDOW 會嘗試 find 唯一識別每個數據列所需的最少額外數據行數目。
  • If 可以找到這類數據行,WINDOW 會自動將這些新數據行附加至 orderBy,and 每個分割區都會使用此新的一組 orderBy 數據行進行排序。
  • If 找不到這類數據行,則會傳回 error。

if傳回空資料表:

  • orderBy or partitionBy 數據行的對應外部 valuenot 存在於 relation內。
  • 整個 window 位於分割區之外,orwindow 的開頭在結束之後。

If WINDOW 用於與 relation相同數據表上定義的匯出數據行內,andorderBy 省略,則會傳回 error。

If window 的開頭會顯示在 first 數據列之前,然後將它設定為 first 列。 同樣地,ifwindow 結尾是在分割區 last 數據列之後,然後將它設定為 last 數據列。

reset 只能用於視覺計算,and 不能與 orderByorpartitionBy搭配使用。 If reset 存在,可以指定 axis,但無法指定 relation

範例 1 - measure

下列 measure:

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]))
)

傳回每個 product單位價格的 3dayaverage。 請注意,3-daywindow 包含三天,其中 product 有銷售,not 一定連續三 calendar 天。

範例 2 - measure

下列 measure:

RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

傳回總銷售額的執行 sumMonthYear數目,針對每個 Fiscal Year重新啟動:

Year Month 數目 Year 銷售量 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])

依 month傳回累計總銷售額,依每個 year計算。 values 1 and -2 可以使用,而不是使用相同結果的 HIGHESTPARENT

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

DAX 視覺計算

範例 4 - 視覺計算

下列視覺計算 DAX 查詢:

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

依 month傳回累計總銷售額,依每個 quarter計算。

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBER RUNNINGSUM