EARLIER
指定された列の外側の評価パスにある、指定された列の現在の値を返します。
EARLIER は、入れ子になった計算で、ある特定の値を入力として使用し、その入力に基づいて計算を生成する場合に役立ちます。 Microsoft Excel では、このような計算は現在の行のコンテキスト内でのみ実行できますが、DAX では、入力の値を格納してから、テーブル全体のデータを使用して計算を行うことができます。
EARLIER は主に計算列のコンテキストで使用されます。
構文
EARLIER(<column>, <number>)
パラメーター
用語 | 定義 |
---|---|
列 | 列または列に解決される式。 |
num | (省略可能) 外側の評価パスへの正数。 1 つ外側の評価レベルは 1、2 つ外側のレベルは 2 というように表されます。 省略した場合の既定値は 1 です。 |
戻り値
number 個外側の評価パスで、column から、行の現在の値。
例外
エラーの説明
解説
テーブル スキャンの開始前に行コンテキストがある場合、EARLIER は成功します。 それ以外の場合は、エラーを返します。
EARLIER のパフォーマンスが低くなる場合があります。これは理論的には、式の構文によって、(列内の) 行の総数に同じ数を掛けた数に近い多くの操作の実行が必要になる可能性があるためです。 たとえば、列に 10 行ある場合は、約 100 回の操作が必要になることがあり、100 行ある場合は、10,000 回近くの操作が実行される可能性があります。
この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
注意
実際には、VertiPaq のメモリ内分析エンジンにより最適化が実行され、実際の計算回数が減りますが、再帰を伴う式を作成する場合は注意が必要です。
例
EARLIER の使用方法を示すため、ランク値を計算し、そのランク値を他の計算で使用するシナリオを構築する必要があります。
次の例は、各 ProductSubcategory の売上合計を示す、このシンプルな ProductSubcategory テーブルに基づいています。
ランキング列を含む最終テーブルを次に示します。
ProductSubcategoryKey | EnglishProductSubcategoryName | TotalSubcategorySales | SubcategoryRanking |
---|---|---|---|
18 | ビブショーツ | $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]) は、外側のループ内の現在の行である $156167.88 に評価されます。
ここで、FILTER 関数は、すべての行が $156167.88 (EARLIER の現在の値) より大きい TotalSubcategorySales の値を持つテーブルを返します。
COUNTROWS 関数は、フィルター処理されたテーブルの行をカウントし、その値を、現在の行の新しく計算された列に 1 を加算して代入します。 最上位ランクの値が空白にならないようにするため、1 を加える必要があります。
計算列の式は次の行に移動し、手順 1 から 4 を繰り返します。 これらの手順が、テーブルの最後に達するまで繰り返されます。
EARLIER 関数は、常に現在のテーブル操作の前に列の値を取得します。 その前のループから値を取得する必要がある場合は、第 2 引数を 2 に設定します。