EARLIER
傳回所指定資料行在提及資料行外部評估行程中的目前值。
如果您想要使用特定值作為輸入,並根據該輸入產生計算,則適合使用 EARLIER 進行這種巢狀計算。 在 Microsoft Excel 中,您只能在目前資料列的內容中進行這類計算;不過,在 DAX 中,您可以儲存輸入的值,然後使用整個資料表的資料來進行計算。
EARLIER 最常用於計算結果欄的內容。
語法
EARLIER(<column>, <number>)
參數
詞彙 | 定義 |
---|---|
column | 資料行或解析為資料行的運算式。 |
num | (選擇性) 提供給外部評估行程的正數。 下一層外部評估會以 1 表示,下兩層外部評估則以 2 表示,依此類推。 省略時,預設值為 1。 |
傳回值
位於 number 個外部評估行程的 column 中資料列目前值。
例外狀況
錯誤的描述
備註
如果資料表掃描開始之前有資料列內容,則 EARLIER 會成功。 否則會傳回錯誤。
EARLIER 的效能可能會很慢,因為理論上,該函式所必須執行的運算次數可能很接近資料行中資料列總數乘以相同數目 (視運算式的語法而定)。 例如,如果在資料行中有 10 個資料列,則可能需要大約 100 次運算;如果您有 100 個資料列,則可能會執行接近 10,000 次運算。
在計算結果欄或資料列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。
注意
實務上,VertiPaq 記憶體內部分析引擎會執行最佳化來減少實際的計算次數,但在建立涉及遞迴的公式時,還請務必謹慎。
範例
為了說明 EARLIER 的用法,您必須建立一個案例,先計算排名值,再於其他計算中使用該排名值。
下列範例是以這個簡單的資料表 ProductSubcategory 為基礎,其中顯示每個 ProductSubcategory 的總銷售額。
最終資料表 (包括排名資料行) 如下所示。
ProductSubcategoryKey | EnglishProductSubcategoryName | TotalSubcategorySales | SubcategoryRanking |
---|---|---|---|
18 | Bib-Shorts | $156,167.88 | 18 |
26 | Bike Racks | $220,720.70 | 14 |
27 | Bike Stands | $35,628.69 | 30 |
28 | 自行車水壺架 | $59,342.43 | 24 |
5 | 五通軸心 | $48,643.47 | 27 |
6 | 煞車 | $62,113.16 | 23 |
19 | 帽子 | $47,934.54 | 28 |
7 | 車鏈 | $8,847.08 | 35 |
29 | 清潔劑 | $16,882.62 | 32 |
8 | 牙盤 | $191,522.09 | 15 |
9 | 變速器 | $64,965.33 | 22 |
30 | 擋泥板 | $41,974.10 | 29 |
10 | 分支 | $74,727.66 | 21 |
20 | 手套 | $228,353.58 | 12 |
4 | 把手 | $163,257.06 | 17 |
11 | Headsets | $57,659.99 | 25 |
31 | 安全帽 | $451,192.31 | 9 |
32 | 水袋 | $96,893.78 | 20 |
21 | 車衣 | $699,429.78 | 7 |
33 | 車燈 | 36 | |
34 | 鎖定 | $15,059.47 | 33 |
1 | Mountain Bikes | $34,305,864.29 | 2 |
12 | 登山車架 | $4,511,170.68 | 4 |
35 | 掛包 | 36 | |
13 | 踏板 | $140,422.20 | 19 |
36 | 打氣筒 | $12,695.18 | 34 |
2 | 公路車 | $40,551,696.34 | 1 |
14 | 公路車架 | $3,636,398.71 | 5 |
15 | 車座 | $52,526.47 | 26 |
22 | 短袖 | $385,707.80 | 10 |
23 | 襪子 | $28,337.85 | 31 |
24 | 緊身褲 | $189,179.37 | 16 |
37 | 輪胎和內胎 | $224,832.81 | 13 |
3 | 休閒車 | $13,334,864.18 | 3 |
16 | 休閒車架 | $1,545,344.02 | 6 |
25 | 背心外套 | $240,990.04 | 11 |
17 | Wheels | $648,240.04 | 8 |
建立排名值
若要取得資料列中指定值的排名值,其中一個方法是計算相同資料表中其值大於 (或小於) 相較者的資料列數目。 此方法會針對資料表中的最大值傳回空白或零值,而相等的值會有相同排名值,且下一個值 (排在相等值後面) 會有非連續的排名值。 請參閱下列範例。
使用下列公式建立新的計算結果欄 SubCategorySalesRanking。
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
下列步驟將更詳細地描述計算方法。
EARLIER 函式會取得資料表中目前資料列的 TotalSubcategorySales 值。 在此案例中,由於正要開始處理,因此會是資料表中的第一個資料列
EARLIER([TotalSubcategorySales]) 會得出 $156,167.88,這是外部迴圈的目前資料列。
FILTER 函式現在會傳回一個資料表,其中所有資料列的 TotalSubcategorySales 值都大於 $156,167.88 (這是 EARLIER 的目前值)。
COUNTROWS 函式會計算已篩選資料表的資料列數目,並將該值指派給目前資料列中新的計算結果欄加上 1。 若要防止排在最前面的值變成空白,則需要加上 1。
計算結果欄公式會移到下一個資料列,並重複步驟 1 到 4。 這些步驟會重複直到到達資料表的結尾為止。
EARLIER 函式一律會取得目前資料表運算之前的資料行值。 如果需要從之前的迴圈取得值,請將第二個引數設定為 2。