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
- 所有 orderBypartitionBy 表達式必須是完全限定的欄位名稱,且來自單一資料表。
- 預設為 ALLSELECTED 和 orderBy中的所有數據行 partitionBy()。
orderBy (選擇性)ORDERBY() 子句,其中包含定義每個分割區排序方式的表達式。
若未填寫:
- 必須明確指定 relation
- 預設以未在 partitionByS 中指定的欄位relation排序。
blanks (選擇性)列舉,定義排序 relationaxis時如何處理空白值。
支援的值為:
  • DEFAULT (預設值),其中數值的行為是空白值的順序介於零與負值之間。 字串的行為是,空白值會先排序於所有字串之前,包括空字串。
  • FIRST:空格總是在起始排序,無論排序順序為何。
  • LAST: 空格總是在最後排序,無論排序順序是升降。

當你在()函式中同時指定blanks參數和空白ORDERBY時,blanks在個別的 orderBy 表達式中,對於相關的 orderBy 表達式會優先。 OrderBy 表達式(未 blanks 指定)會尊重 blanks 父函數上的參數。
partitionBy (選擇性) PARTITIONBY() 子句,其中包含定義分割方式 relation 的數據行。 如果省略,則會將 relation 視為單一分割區。
matchBy (選擇性) MATCHBY() 子句,其中包含定義如何比對數據及識別目前數據列的數據行。
reset (選擇性)僅適用於視覺計算。 表示計算是否會重置,以及視覺圖形欄位階層的哪一層級。 接受的值包括:目前視覺圖形中數據行的欄位參考、NONE(預設值)、LOWESTPARENTHIGHESTPARENT或整數。 行為依整數符號而定:
- 若為零或省略,計算不會重置。 相當於 NONE
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。

傳回值

視窗中的所有數據列。

備註

除了由 DAX 表格函式新增的欄位外,每個欄位 relation (當 matchBy 不存在時)或 matchBypartitionBymatchBy 每欄(當存在時)必須有對應的外部值,以幫助定義當前要操作的列。 若 from_typeto_type 皆有 ABS,則以下僅適用於列:partitionBy

  • 若存在對應的外欄,則使用其值。
  • 若無對應的外欄:
    • WINDOW 首先決定所有沒有對應外欄的欄位。
    • 對於這些欄位 WINDOW在 父上下文 WINDOW 中任意組合的既有值,都被評估,並回傳相應的列。
    • WINDOW的最終輸出是這些列的聯集。
  • 若存在多個對應的外欄,則會回傳錯誤。

如果 relation 數據表函式新增了所有 DAX的數據行,則會傳回錯誤。

如果 matchBy 存在,則 WINDOW 嘗試使用 matchBypartitionBy 欄位來識別該列。 如果 matchBy 不存在,且欄位在 中指定 orderBy ,且 partitionBy 無法唯一識別 : relation中的每一列。

  • WINDOW 嘗試尋找唯一識別每一列所需的最少額外欄位數。
  • 若能找到此類欄位, WINDOW 會自動將這些新欄位附加到 orderBy,每個分割則使用這組新的 orderBy 欄位進行排序。
  • 若找不到此類欄位,則會回傳錯誤。

如果:

  • 或欄位對應的外部值orderBypartitionBy不存在於 relation
  • 整個視窗都在隔間外面,或者視窗的起點在隔板結束之後。

如果你在同一表relation中定義的計算欄位中 使用 WINDOW ,且orderBy省略了 ,則會回傳錯誤。

如果視窗的開始在第一列之前,則會設定為第一列。 同樣地,如果視窗的結尾在分割區的最後一列之後,則設為最後一列。

你只能用 reset 在視覺計算中,不能和 orderBypartitionBy/ 一起用。 如果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

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

DAX 視覺計算

範例 4 - 視覺計算

下列視覺計算 DAX 查詢:

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

傳回依月份的累計總銷售額,依每個季度計算。 您可以使用 值 LOWESTPARENT ,而不是 -1,併產生相同的結果。