Функция 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) выполняет оптимизацию для сокращения фактического объема вычислений, однако при составлении формул с рекурсией следует соблюдать осторожность.

Для демонстрации использования функции 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

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

Создание ранжирующего значения

Одним из способов получения ранжирующего значения для заданного значения в строке является подсчет количества строк той же таблицы, которые содержат значение больше (или меньше) сравниваемого. Такой метод возвращает пустое значение или ноль для самого большого значения в таблице, при этом равные значения будут иметь одинаковые ранжирующие значения, а следующее значение (после равных) будет иметь не следующее по порядку ранжирующее значение. См. образец далее.

Новый вычисляемый столбец SubCategorySalesRanking создается по следующей формуле.

= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1

В следующих шагах метод вычисления описан более подробно.

  1. Функция EARLIER получает значение TotalSubcategorySales для текущей строки в таблице. В данном случае, поскольку процесс только начинается, это первая строка в таблице.

  2. EARLIER([TotalSubcategorySales]) дает результат 156 176,88 долл. США — текущая строка во внешнем цикле.

  3. Теперь функция FILTER возвращает таблицу, где все строки имеют значение TotalSubcategorySales, превышающее $156,167.88 (текущее значение EARLIER).

  4. Функция COUNTROWS подсчитывает строки отфильтрованной таблицы и присваивает новому вычисляемому столбцу в текущей строке полученное значение плюс 1. Добавление 1 необходимо, чтобы предотвратить появление пустого значения в качестве значения с верхним рангом.

  5. Формула вычисляемого столбца переходит к следующей строке, и шаги с 1 по 4 повторяются. Эти шаги повторяются до конца таблицы.

Функция EARLIER всегда получает значение столбца перед выполнением текущей операции в таблице. Чтобы получить значение на более раннем этапе цикла, установите второй аргумент в значение 2.