EARLIER
指定した列の外部評価パスで、指定した列の現在の値を返します。
EARLIER は、特定の値を入力として使用し、その入力に基づいて計算を生成する入れ子になった計算に役立ちます。 Microsoft Excel では、現在の行のコンテキスト内でのみこのような計算を実行できます。ただし、DAX では、入力の値を格納し、テーブル全体のデータを使用して計算を行うことができます。
EARLIER は、主に計算列のコンテキストで使用されます。
構文
EARLIER(<column>, <number>)
パラメーター
用語 | 定義 |
---|---|
column |
列に解決される列または式。 |
num |
(省略可能)外側の評価パスに対する正の数値。 次の評価レベルは 1 で表されます。2 つのレベルは 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 | 自転車ラック | $220,720.70 | 14 |
27 | 自転車スタンド | $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 | ヘッドセット | $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 | マウンテン バイク | $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 | 車輪 | $648,240.04 | 8 |
ランク値の作成
行内の特定の値のランク値を取得する方法の 1 つは、比較対象の行よりも大きい (または小さい) 値を持つ同じテーブル内の行数をカウントすることです。 この手法では、テーブルの最大値に対して空白またはゼロの値が返されますが、等しい値は同じランク値になり、次の値 (等しい値の後) には連続しないランク値が返されます。 以下のサンプルを参照してください。
SubCategorySalesRanking
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
次の手順では、計算方法について詳しく説明します。
EARLIER
関数は、テーブル内の現在の行 TotalSubcategorySales の値を取得します。 この場合、プロセスが開始されているため、テーブルの最初の行になります。EARLIER([TotalSubcategorySales])
は、外側のループの現在の行である $156,167.88 と評価されます。関数は、すべての行の値が $156,167.88 ( の現在の値) より大きい TotalSubcategorySales の値を持つテーブルを返すようになりました。 COUNTROWS
関数は、フィルター処理されたテーブルの行をカウントし、その値を現在の行に 1 を加えた新しい計算列に割り当てます。 上位ランクの値が空白にならないように、1 を追加する必要があります。計算列の数式は次の行に移動し、手順 1 から 4 を繰り返します。 これらの手順は、テーブルの末尾に達するまで繰り返されます。
EARLIER
関数は、現在のテーブル操作の前に常に列の値を取得します。 その前にループから値を取得する必要がある場合は、2 番目の引数を 2 に設定します。