Função EARLIER (DAX)
Retorna o valor atual da coluna especificada em uma fase de avaliação exterior da coluna mencionada.
EARLIER é útil para cálculos aninhados onde você deseja usar um certo valor como entrada e gerar cálculos com base nessa entrada. No Microsoft Excel, você pode fazer tais cálculos apenas dentro do contexto da linha atual; entretanto, no PowerPivot, você pode armazenar o valor da entrada e depois fazer o cálculo usando dados da tabela inteira.
EARLIER é usado principalmente no contexto de colunas calculadas.
Sintaxe
EARLIER(<column>, <number>)
Parâmetros
Termo |
Definição |
---|---|
column |
Uma coluna ou expressão resolvida para uma coluna. |
num |
(Opcional) Um número positivo para a fase de avaliação externa. O próximo nível de avaliação externa é representado por 1; dois níveis externos são representados por 2 e assim por diante. Quando omitido, o valor padrão é 1. |
Valor da propriedade/Valor do retorno
O valor atual da linha, de column, em number de fases de avaliação externa.
Exceções
Descrição de erros
Comentários
EARLIER tem êxito se é um contexto de linha antes do começo do exame de tabela. Caso contrário, ela retorna um erro.
O desempenho de EARLIER pode ser lento pois, teoricamente, ela pode precisar executar uma série de operações que se aproximam do número total de horas de linhas (na coluna) vezes o mesmo número (dependendo da sintaxe da expressão). Por exemplo, se você tiver 10 linhas na coluna, aproximadamente 100 operações poderão ser necessárias; se você tiver 100 linhas, cerca de 10.000 operações poderão ser executadas.
Observação |
---|
Na prática, o mecanismo VertiPaq executa otimizações para reduzir o número real de cálculos, mas você deve ter cuidado ao criar fórmulas que envolvam recursão. |
Exemplo
Para ilustrar o uso de EARLIER, é necessário criar um cenário que calcula um valor de classificação e usa esse valor em outros cálculos.
O exemplo a seguir se baseia nesta tabela simples, ProductSubcategory, que mostra o total de vendas para cada ProductSubcategory.
A tabela final, inclusive a coluna de classificação, é mostrada aqui.
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 |
Criando um valor de classificação
Uma forma de obter um valor de classificação para determinado valor de uma linha é contar o número de linhas, na mesma tabela, que têm um valor maior (ou menor) que o valor comparado. Esta técnica retorna um espaço em branco ou valor zero para o valor mais alto da tabela, enquanto valores iguais terão o mesmo valor de classificação e o próximo valor (depois dos valores iguais) terá um valor de classificação não consecutivo. Consulte o exemplo abaixo.
Uma nova coluna calculada, SubCategorySalesRanking, é criada usando a fórmula a seguir.
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
As etapas a seguir descrevem o método de cálculo em maiores detalhes.
A função EARLIER obtém o valor de TotalSubcategorySales para a linha atual da tabela. Neste caso, como o processo está começando, esta é a primeira linha da tabela
EARLIER([TotalSubcategorySales]) é avaliada em $156.167,88, a linha atual no loop exterior.
A função FILTER agora retorna uma tabela onde todas as linhas têm um valor de TotalSubcategorySales maior que $156.167,88 (que é o valor atual de EARLIER).
A função COUNTROWS conta as linhas da tabela filtrada e atribui esse valor à nova coluna calculada na linha atual mais 1. A soma de 1 é necessária para evitar que o valor com classificação superior se torne um espaço em branco.
A fórmula de coluna calculada passa para a próxima linha e repete as etapas 1 a 4. Estas etapas são repetidas até o final da tabela ser atingido.
A função EARLIER sempre obterá o valor da coluna antes da operação de tabela atual. Se você precisar obter um valor do loop antes disso, defina o segundo argumento como 2.