EARLIER 函數
在提及之資料行的外部評估行程中,傳回所指定資料行的目前值。
當您想要將特定值做為輸入使用並根據該輸入產生計算時,EARLIER 對巢狀計算很有用。 在 Microsoft Excel 中,您僅能在目前資料列的內容中執行此類計算,然而在 DAX 中,您可以儲存輸入的值,然後使用整個資料表中的資料進行計算。
EARLIER 大部分用於導出資料行的內容中。
語法
EARLIER(<column>, <number>)
參數
詞彙 |
定義 |
---|---|
column |
資料行或是解析成資料行的運算式。 |
num |
(選擇性) 外部評估行程的正數。 下一個評估層級輸出以 1 表示;兩個層級輸出以 2 表示等等。 省略時,預設值為 1。 |
屬性值/傳回值
資料列的目前值,從外部評估行程的 column (位於 number)。
例外狀況
錯誤的描述
備註
如果在開始資料表掃描前有一個資料列內容,EARLIER 會成功。 否則,它會傳回錯誤。
EARLIER 的效能可能會變慢,因為理論上,它必須執行接近資料列 (在資料行中) 總數乘以相同數字 (根據運算式的語法) 的數個運算。 例如,如果您在資料行中有 10 個資料列,可能需要大約 100 個運算;如果您有 100 個資料列,則可能會執行接近 10,000 個運算。
[!附註]
實際上,xVelocity 記憶體中分析引擎 (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 |
Bottles and Cages |
$59,342.43 |
24 |
5 |
Bottom Brackets |
$48,643.47 |
27 |
6 |
Brakes |
$62,113.16 |
23 |
19 |
Caps |
$47,934.54 |
28 |
7 |
Chains |
$8,847.08 |
35 |
29 |
Cleaners |
$16,882.62 |
32 |
8 |
Cranksets |
$191,522.09 |
15 |
9 |
Derailleurs |
$64,965.33 |
22 |
30 |
Fenders |
$41,974.10 |
29 |
10 |
Forks |
$74,727.66 |
21 |
20 |
Gloves |
$228,353.58 |
12 |
4 |
Handlebars |
$163,257.06 |
17 |
11 |
Headsets |
$57,659.99 |
25 |
31 |
Helmets |
$451,192.31 |
9 |
32 |
Hydration Packs |
$96,893.78 |
20 |
21 |
Jerseys |
$699,429.78 |
7 |
33 |
Lights |
|
36 |
34 |
鎖定 |
$15,059.47 |
33 |
1 |
Mountain Bikes |
$34,305,864.29 |
2 |
12 |
Mountain Frames |
$4,511,170.68 |
4 |
35 |
Panniers |
|
36 |
13 |
Pedals |
$140,422.20 |
19 |
36 |
Pumps |
$12,695.18 |
34 |
2 |
Road Bikes |
$40,551,696.34 |
1 |
14 |
Road Frames |
$3,636,398.71 |
5 |
15 |
Saddles |
$52,526.47 |
26 |
22 |
Shorts |
$385,707.80 |
10 |
23 |
Socks |
$28,337.85 |
31 |
24 |
Tights |
$189,179.37 |
16 |
37 |
Tires and Tubes |
$224,832.81 |
13 |
3 |
Touring Bikes |
$13,334,864.18 |
3 |
16 |
Touring Frames |
$1,545,344.02 |
6 |
25 |
Vests |
$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。 在到達資料表結尾之前,會重複這些步驟。
The EARLIER 函數永遠會在目前資料表運算之前,取得資料行的值。 如果您需要在這之前取得迴圈中的值,請將第二個引數設為 2。