EARLIER 関数
示された列の外部評価パスでの、指定された列の現在の値を返します。
EARLIER は、特定の値を入力として使用し、その入力に基づいて計算処理を生成する、入れ子になった計算を行う場合に役立ちます。 Microsoft Excel では、こうした計算を実行できるのは現在の行のコンテキストに限られますが、DAX では、入力の値を保存し、テーブル全体のデータを使用して計算を行うことができます。
EARLIER は、主に計算列のコンテキストで使用されます。
構文
EARLIER(<column>, <number>)
パラメーター
項目 |
定義 |
---|---|
column |
列か、列に解決される式。 |
num |
(省略可能) 外部評価パスへの正の数値。 1 つ外の評価レベルは 1 で表され、2 つ外のレベルは 2 で表されます。それ以降も同じように表されます。 省略した場合の既定値は 1 です。 |
プロパティ値/戻り値
行の現在の値 (外部評価パスのレベルは number、列は column)。
例外
エラーの説明
説明
EARLIER が成功するのは、テーブル スキャンの開始前に行のコンテキストが存在する場合です。 それ以外の場合はエラーが返されます。
EARLIER では、理論上、式の構文によっては、列内で行の総数の 2 乗に近い多数の演算を実行する必要があるため、関数のパフォーマンスが低下することがあります。 たとえば、列内の行が 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 |
Locks |
$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 |
順位値の作成
行の特定の値に対応する順位値を取得する方法の 1 つに、同じテーブル内で、比較対象の値よりも大きい (または小さい) 値を持つ行の数をカウントする方法があります。 この手法では、テーブル内で最も大きい値に対しては空白またはゼロの値が返されます。値が等しい場合は順位値が同じになり、同じ値が複数存在した場合、次の値は連続しない順位値になります。 以下のサンプルを参照してください。
新しい計算列 SubCategorySalesRanking は、次の数式を使用して作成されます。
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
より詳細な計算方法を次の手順で示します。
EARLIER 関数が、テーブルの現在の行の TotalSubcategorySales の値を取得します。 この場合は、プロセス開始時であるため、テーブル内の最初の行になります。
EARLIER([TotalSubcategorySales]) は $156,167.88 (外部ループの現在の行) に評価されます。
FILTER 関数が、すべての行に $156,167.88 (EARLIER の現在の値) よりも大きい TotalSubcategorySales の値が含まれるテーブルを返します。
COUNTROWS 関数が、フィルター選択されたテーブルの行をカウントし、その値に 1 を加えて、現在の行の新しい計算列に割り当てます。 最上位の順位値が空白にならないように、1 を追加する必要があります。
計算列の数式が次の行に移り、手順 1. ~ 4. を繰り返します。 これらの手順は、テーブルの最終行に到達するまで繰り返されます。
EARLIER 関数は、常に現在のテーブル操作に先行して列の値を取得します。 その前にループから値を取得する必要がある場合は、2 番目の引数を 2 に設定してください。