Функция EARLIER
Возвращает текущее значение указанного столбца на внешнем этапе вычисления для данного столбца.
Функция EARLIER полезна для вложенных вычислений, когда необходимо указать в качестве входного определенное значение и в зависимости от него проводить вычисления. В Microsoft Excel такие вычисления можно выполнять только в контексте текущей строки, однако в DAX можно сохранить входное значение, а затем выполнить вычисление с использованием данных из всей таблицы.
Функция EARLIER используется главным образом в контексте вычисляемых столбцов.
Синтаксис
EARLIER(<column>, <number>)
Параметры
Термин |
Определение |
---|---|
столбец |
Столбец или выражение, результатом которого служит столбец. |
num |
(Необязательно.) Положительный номер внешнего этапа вычисления. Следующий внешний этап вычисления имеет номер 1, внешний этап, отстоящий от текущего на два уровня, имеет номер 2 и т. д. Если номер не указан, используется значение по умолчанию — 1. |
Значение свойства/возвращаемое значение
Текущее значение строки из столбца column на расстоянии в number внешних этапов вычисления.
Исключения
Описание ошибок
Замечания
Функция EARLIER завершает работу успешно, если перед началом просмотра таблицы существует контекст строки. В противном случае функция возвращает ошибку.
Производительность функции EARLIER может снижаться, поскольку теоретически может понадобиться выполнить количество вычислений, близкое к общему количеству строк (в столбце), умноженному на это количество (в зависимости от синтаксиса выражения). Например, если столбец содержит 10 строк, то может потребоваться до 100 операций, а для 100 строк может выполняться до 10 000 операций.
Примечание |
---|
На практике подсистема аналитики в памяти xVelocity (VertiPaq) выполняет оптимизацию для сокращения фактического объема вычислений, однако следует соблюдать осторожность при составлении формул с рекурсией. |
Пример
Для демонстрации использования функции EARLIE необходимо построить задачу, где вычисляется ранжирующее значение, которое затем используется в других вычислениях.
Следующий пример основан на простой таблице 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 176,88 долл. США — текущая строка во внешнем цикле.
Теперь функция FILTER возвращает таблицу, где все строки имеют значение TotalSubcategorySales, превышающее $156,167.88 (текущее значение EARLIER).
Функция COUNTROWS подсчитывает строки отфильтрованной таблицы и присваивает новому вычисляемому столбцу в текущей строке полученное значение плюс 1. Добавление 1 необходимо, чтобы предотвратить появление пустого значения в качестве значения с верхним рангом.
Формула вычисляемого столбца переходит к следующей строке, и шаги с 1 по 4 повторяются. Эти шаги повторяются до конца таблицы.
Функция EARLIER всегда получает значение столбца перед выполнением текущей операции в таблице. Чтобы получить значение на более раннем этапе цикла, установите второй аргумент в значение 2.