Calcular valores de campo

Os cálculos de campo permitem que o proprietário da camada de feição hospedada ou um administrador da organização altere os valores de cada linha em um campo específico na tabela de atributos de uma camada.

Por exemplo, se você tiver uma camada de feição hospedada que armazene informações sobre vendas de propriedades—incluindo o preço de venda e taxa de imposto para o local da propriedade—você poderá adicionar um campo na camada para armazenar os impostos de propriedade estimados. Para preencher o campo estimated_property_taxes, defina uma expressão de cálculo para o campo que aceita os valores no campo sale_price e multiplique-os pelos valores de tax_rate.

Você tem duas opções ao gravar expressões de cálculo em campos de camadas em uma camada de feição hospedada:

  • ArcGIS ArcadeArcade é ideal para cálculos que exigem mais funcionalidade do que o SQL, já que o Arcade fornece acesso a valores de atributos e geometria da feição, permitindo a você criar expressões que incluem operações espaciais. Além disso, se ocorrer um erro durante o cálculo de uma determinada linha, você poderá parar e solucionar o problema e iniciar o cálculo novamente após corrigir o problema.

    Anotação:

    ArcGIS API for JavaScript 3.44 e posterior não serão atualizados com os recursos de idioma do ArcGIS Arcade mais recentes. As expressões Arcade autorizadas em aplicativos JavaScript API na versão 3.44 ou posterior suportarão somente os recursos de idioma do Arcade introduzidos no Arcade versão 1.21 ou anterior. Para saber mais sobre o suporte a idiomas do Arcade nos produtos ArcGIS, consulte a matriz de versão do Arcade .

  • SQL—Utilize o SQL para obter o desempenho mais rápido com cálculos que podem ser executados com expressões SQL (SQL-92) padronizadas em atributos não espaciais. Você pode executar o SQL em camadas e camadas de feição hospedadas habilitadas para sincronização configuradas para rastrear criadores e editores de feições; enquanto você não for possível executar expressões Arcade em tais camadas.

A próxima seção explica como calcular valores para um campo a partir da página de item de uma camada de feição hospedada. As seções subsequentes fornecem exemplos de cálculos comuns.

Calcular valores de um campo na página do item

Siga estas etapas para calcular valores de campos de sequência, numéricos ou de data em um campo da página de item de uma camada de feição.

Anotação:
Os cálculos de campo não podem ser desfeitos. Por esta razão, é recomendável adicionar um campo, calcular valores nele e confirmar se o cálculo é o que você deseja. Se for, você poderá calcular o campo original para igualar ao campo adicionado. Após confirmar que os valores estão corretos no campo original, você poderá excluir o campo que você adicionou.

  1. Na página de itens da camada, clique na guia Dados para mostrar a tabela.
  2. Clique na coluna contendo os valores que você deseja calcular.
  3. Siga um destes procedimentos para abrir a caixa de diálogo Calcular Campo :
    • Clique em Calcular.
    • Clique em Mostrar Visualização Detalhada > Calcular.
  4. Escolha o idioma a ser usado para o cálculo, Arcade ou SQL.

    Se a camada de feição hospedada tiver a sincronização habilitada ou estiver configurada para rastrear quem cria e atualiza as feições, você não visualizará esta página. Ao contrário, a janela SQL aparecerá.

  5. Componha uma expressão de cálculo.
    • Para SQL, utilize operadores básicos, uma lista de campo e funções. Clique no botão Validar para garantir que não haja erros na expressão. Se a expressão for inválida, clique no botão Remover e componha uma nova. Quando a expressão estiver completa e válida, clique em Calcular.
    • Para Arcade, utilize variáveis globais, funções, e constantes. Clique em OK para executar a expressão. Se ocorrer um erro ao executar a expressão, você poderá clicar em Revisar Erros para abrir a janela de expressão para poder corrigir o erro. Caso contrário, clique em Cancelar. Se você corrigir a expressão e executá-la novamente, o cálculo será reiniciado.

O tempo necessário para o cálculo ser concluído depende da complexidade da expressão e do número de feições na camada.

Cálculos de exemplo

As seções seguintes fornecem sintaxe de exemplo para executar cálculos comuns no ArcGIS Online.

Execute uma operação matemática em valores numéricos em dois campos existentes para preencher um terceiro campo

Um dos cálculos mais comuns que você executa são para derivar um valor numérico novo baseado em valores existentes em sua camada de feição. Por exemplo, você pode subtrair um ano das vendas totais para todas as lojas dos totais de vendas de outro ano para localizar a mudança em lucro de um ano até o próximo, ou você pode dividir o número total de residentes abaixo de 18 anos de idade pela população total para determinar a fração da população que está abaixo de 18.

Exemplos Arcade

Calcule a diferença entre os valores de dois campos numéricos, Sales2016 e Sales2017, para preencher um campo numérico.

$feature.Sales2016 - $feature.Sales2017

Exemplo de SQL

Preencha um campo numérico com um valor número decimal que seja o resultado doo cálculo que a porção da população está abaixo de 18 anos de idade.

PopUnder18/TotalPop

Concatene os valores de string de campos existentes em um novo campo de string

Outro cálculo que preenche um novo campo envolve combinar valores de campos de string existentes. Por exemplo, você pode ter dois campos de string para localizações de quarto em um hotel—Floor e Room—e você deseja combiná-los em um campo de string que contenha ambos.

Nos exemplos seguintes, valores dos campos Floor e Room serão combinados em um campo único.

Exemplo de Arcade

Concatenate($feature.room,$feature.floor)

Exemplo de SQL

CONCAT(Floor,Room)

Remova espaços iniciais ou finais dos campos de string

Quando os usuários digitam ou colam valores em um campo durante a edição, eles podem cometer erros e deixar um espaço à direita ou à esquerda no texto. Você pode limpar estes enganos cortando os valores.

Nestes exemplos, você sabe que o editor adicionou um espaço inicial ao colar New Hampshire no campo que armazena os nomes de estado, então você irá cortar o espaço a partir do final da string.

Exemplo de Arcade

Trim('New Hampshire ')

Exemplo de SQL

Trim(TRAILING ' ' FROM 'New Hampshire ')

Preencha um campo com valores diferentes dependendo de valores em outro campo

Às vezes, o valor que você deseja adicionar em um campo varia por feição e depende de outro valor da mesma feição. Por exemplo, você pode adicionar um campo de string à camada de feição para armazenar o texto que descreve um valor numérico ou valor de string abreviado em outro campo. Como a interface de cálculo SQL não suporta isto, utilize o Arcade para estes tipos de cálculos.

Exemplo de Arcade

O seguinte exemplo grava condicionalmente diferentes valores de string—Nenhum, Baixo, Alto, ou Outro—para um campo de texto baseado em um número em outro campo na camada (HowMany).

When(
  $feature.HowMany == 0, "None",
  $feature.HowMany == 1, "Low",
  $feature.HowMany == 2,  "High",
"Other")

Substitua um valor com outro

Caso seja necessário substituir um valor existente por outro—por exemplo, o modo que você representa um valor em particular mudou ou você precisa corrigir valores inseridos errados—você poderá localizar todos os valores existentes de um campo e substitui-los por um novo valor. Como a interface de cálculo SQL não suporta isto, utilize o Arcade para estes tipos de cálculos.

Aviso:

Os cálculos são imediatamente salvos na camada de feição. Se você substituir um valor existente no erro, você precisará calcular novamente para alterar o valor de volta.

Exemplo de Arcade

Este exemplo utilize a função Substituir para alterar a ortografia Britânica (cor) para a ortografia Americana.

Replace($feature.color, 'colour', 'color')

Determine a densidade de um atributo numérico por área da feição

Para calcular a densidade de um atributo em uma área, utilize uma expressão Arcade, pois você não pode executar cálculos SQL no campo espacial a partir da interface de cálculo.

Exemplo de Arcade

Este exemplo determina a densidade de população por feição dividindo o valor de população total (TotalPop) pela área em milhas quadradas da feição de polígono:

$feature.TotalPop / Area ($feature,
'square-miles')

Derive as coordenadas para uma feição de ponto

Você pode utilizar uma expressão Arcade para retornar as coordenadas de longitude ou latitude dos campos espaciais em uma camada de feição hospedada que contenha somente pontos.

Este tipo de cálculo não é suportado no campo espacial a partir da interface de cálculo.

Exemplo de Arcade

Este exemplo calcula um campo para a coordenada x para cada ponto em uma camada de ponto com a utilização da função Geometria.

Geometry($feature).x

Adicionar ou subtraia tempo de uma data

Você pode desejar adicionar tempo ou subtrair o tempo de um campo de data ou valor literal para produzir um campo de data atualizado. Por exemplo, você pode calcular uma data de inspeção futura ou de revisão ao adicionar tempo para uma data.

Exemplo de Arcade

Este exemplo utiliza a função DateAdd para adicionar sete dias a uma data para obter a data da semana seguinte.

var startDate = Date($feature.dateField);
var oneWeekLater = DateAdd(startDate, 7, 'days');
return oneWeekLater;

Exemplo de SQL

Os cálculos seguintes podem ser utilizados para adicionar tempo ou para subtrair tempo de um campo de data ou utilizando um valor de data literal de SQL suportado. O primeiro utiliza campos de data e o segundo utiliza valores literais de data. Campos de número e literais de número também podem ser utilizados. Qualquer combinação de campos e literais é suportada, como mostrado no terceiro e quarto cálculos.

<DateField> +/- <NumberField> = updated date
DATE'<SQL-supported Date Literal>'  +/- <Number of Days> = updated date
<DateField> +/- <Number of Days> = updated date
DATE'<SQL-supported Date Literal >'  +/- <NumberField> = updated date

O campo de data calculado é a data original mais ou menos o número de dias que você deseja adicionar ou subtrair. O número de dias pode ser um número inteiro e também pode incluir uma fração—por exemplo, 1.5 representaria um dia e meio ou 36 horas.

No seguinte exemplo, uma máquina é instalada em 14/06/2016 às 10:00 a.m. Você pode utilizar um dos seguintes cálculos para produzir uma data de inspeção um mês (30 dias) após esta data de instalação. O primeiro cálculo utiliza um campo de data com um valor de 6/14/2016 e um campo de número com um valor de 30, enquanto o segundo utiliza um literal de data e um literal de número.

<MyDateField> + <MyNumberField> = 7/14/2016 10:00 AM
DATE'6/14/2016' + 30 = 7/14/2016 10:00 AM

Calcular a diferença entre duas datas

Você pode desejar o cálculo do comprimento de tempo entre duas datas. Por exemplo, se você tiver as datas de instalação para metros elétricos e você também tiver as datas de inspeção, você poderá calcular a diferença entre as duas datas para verificar se o comprimento de tempo entre a instalação e a inspeção caem dentro das diretrizes permitidas. O resultado do cálculo é um campo de número, ao invés de um campo de data.

Exemplo de Arcade

O exemplo seguinte utiliza a função DateDiff para calcular uma idade da pessoa localizando a diferença entre uma data atual (endDate) e a data de aniversário da pessoa (startDate):

var startDate = Date($feature.startDateField);
var endDate = Date($feature.endDateField);
var age = DateDiff(endDate, startDate, 'years');
return age;

Exemplo de SQL

Qualquer combinação dos campos de data e literais de data pode ser utilizada para calcular o comprimento de tempo entre duas datas. O primeiro cálculo abaixo utiliza um campo de data, enquanto o segundo utiliza um literal de data. O terceiro e quarto cálculos utilizam ambos um campo de data e um literal de data.

<DateField1> - <DateField2> = number of days in between
DATE'<SQL-supported Date Literal>' - DATE'< SQL-supported Date Literal>' = number of days in between
<DateField1> - DATE'<SQL-supported Date Literal>' = number of days in between
DATE'<SQL-supported Date Literal>' - <DateField2>  = number of days in between

O resultado é um campo de número que é calculado subtraindo um campo de data ou literal de outro campo de data ou literal. O resultado do número (em dias) pode ser um número inteiro e também pode incluir uma fração—por exemplo, 1.5 representaria um dia e meio ou 36 horas.

No exemplo da inspeção de metro elétrico mencionado acima, quaisquer dos seguintes cálculos podem ser utilizados para calcular o comprimento de tempo entre um data de instalação em 6/1/2015 e uma data de inspeção em 10/1/2015. O primeiro cálculo utiliza campos de data, o segundo utiliza literais de data, e o terceiro e quarto ambos utilizam um campo de data e um literal de data.

<InspectionDateField> - <InstallationDateField> = 122 (days)
DATE'10/1/2015' - DATE'6/1/2015' = 122 (days)
<InspectionDateField> - DATE'6/1/2015' = 122 (days)
DATE'10/1/2015' - <InstallationDateField> = 122 (days)

As considerações ao calcular os valores de campo

  • Se você tiver um filtro em sua camada no mapa, apenas os registros que atenderem aos critérios do filtro terão seus valores calculados.
  • Ao escrever expressões de SQL, Calcular Campo funciona somente com nomes de campo, não nomes alternativos de campo. A lista Campos mostra a você todos os nomes de campo disponíveis para cálculos. Você pode filtrar esta lista pelos tipos de campo String, Numérico e Data.
    • Se você pairar sobre um nome de campo na lista Campos, o nome alternativo e tipo de campo serão exibidos.
    • Se você clicar em um nome de campo na lista Campos, o campo será adicionado à expressão.
  • Você não pode calcular valores de campo em cópias das camadas de feição hospedadas ou para camadas de feição hospedadas que tenham camadas de mosaico relacionadas.
  • Os valores calculados não são propagados a partir da camada de feição hospedada ou da visualização das camadas de cena hospedadas dependentes.
  • Formatação específica de local não é suportada para números em expressões SQL. Por exemplo, você deve utilizar um separador de ponto decimal para valores da tabela de atributos, ao invés de um separador de vírgulas quando a localidade estiver definida como Espanha.
  • Você não pode utilizar a função MOD numérica em campos duplos. Molde o campo para um inteiro, como mostrado no exemplo.
  • Não é possível gravar expressões Arcade para camadas de feição hospedadas que tenham sincronização habilitada ou estejam configuradas para rastrear quem criou e atualizou as últimas feições.
  • Você não pode usar Arcade para calcular valores para os seguintes tipos de dados de campo na página do item de uma camada de feição:
    • Inteiro grande
    • Somente data
    • Somente hora
    • Deslocamento do carimbo de data/hora

    Anotação:
    Quando qualquer camada em uma camada de feição hospedada tiver esses tipos de dados, os cálculos serão do Arcade serão desabilitados para toda a camada de feição hospedada, mesmo aquelas subcamadas que não contêm tipos de dados não suportados.

Referência de SQL padronizada (SQL-92)

Quando você gravar uma expressão de SQL para calcular valores de campo, utilize SQL padronizada. Esta seção fornece uma lista dos operadores e funções de SQL que você pode utilizar para cálculos de SQL no ArcGIS Online.

Após ter criado sua expressão, clique no botão Calcular. Se houver quaisquer erros, uma mensagem de erro aparece na parte inferior da caixa de diálogo. Corrija a sintaxe da expressão e calcule novamente.

Operadores

Na caixa de diálogo Calcular Campo você pode construir expressões SQL simples utilizando operadores, tais como, mais, menos, multiplicar e dividir. Exemplos e dicas para utilizar estes operadores são os seguintes:

  • Para multiplicar todos os valores em um campo numérico denominado SAMPLE por 100.0, digite SAMPLE * 100.0 para a expressão.
  • Para equações mais complexas, você pode utilizar os parênteses para especificar a ordem de cálculos, por exemplo, SAMPLE * (BASELINE - 40).
  • Os operadores matemáticos não funcionam com campos de string. Você precisará utilizar as funções da string descrita na seção Funções da string.
  • Se você estiver calculando um campo de tipo duplo para o campo de tipo inteiro, a função CAST poderá ser automaticamente adicionada na sua expressão. Por exemplo, se você estiver calculando uma campo duplo nomeado POP para um campo inteiro nomeado SAMPLE, a expressão aparecerá como CAST(SAMPLE AS FLOAT) Não remova a função CAST. Consulte as Funções numéricas abaixo para informações sobre a função CAST.
  • Para incluir uma apóstrofe na string, utilize duas aspas únicas para a apóstrofe. Por exemplo, 'Nightingale''s'. Não utilize aspas duplas.

Funções

Além de operadores de expressões simples utilizando operadores, você também pode utilizar funções para construir expressões SQL. As funções trabalham com nomes de campo, literais e outras funções. Por exemplo, suponha que você precise calcular um campo duplo para ser TOTALPOP dividido por POP18. Se qualquer feição tiver um POP18 igual a zero, o cálculo resultará em um erro de divisão por zero. Você pode guardar isto utilizando a função NULLIF descrita abaixo. A expressão seria TOTALPOP / NULLIF(POP18, 0).

As funções utilizam parâmetros. Nas tabelas abaixo, qualquer parâmetro pode ser como segue:

  • Um nome de campo, desde que o tipo de campo corresponda ao tipo de parâmetro (string, número ou data).
  • Um literal, como 'Sailboat' (uma string cercada por aspas únicas), o número 5 ou uma data no formato MM/DD/YYYY hh:mm:ss, cercado por aspas únicas.
  • Uma função que retorna um valor do tipo adequado (string, número, data). Por exemplo, FLOOR(POWER(SAMP_ERR, 0.5)) retorna o maior inteiro que é menor ou igual a raiz quadrada de SAMP_ERR.

Para propósitos ilustrativos, os exemplos na coluna de descrição das tabelas abaixo utilizam principalmente parâmetros literais. Você pode substituir um nome de campo ou outra função para estes parâmetros.

Funções de data

Vários cálculos podem ser executados em campos de data. Por exemplo, você pode adicionar ou subtrair tempo de um campo de data ou calcular a diferença entre dois campos de data.

Ao trabalhar com campos de data, leia estas considerações importantes.

Você pode utilizar qualquer combinação dos campos de número e data, e literais ao calcular campos de data. Quando tiver literais de data, você deverá utilizar formatos de data suportados pelo SQL.

As seguintes funções de data estão disponíveis:

FunçãoDescrição

CURRENT_DATE()

Retorna a data atual no horário UTC.

O que você vê no cliente depende do cliente que você está utilizando. No ArcGIS Online, as datas são mostradas no fuso horário da sua organização ou perfil.

CURRENT_TIME()

Retorna a data e hora atuais de UTC (horas, minutos, segundos).

O que você vê no cliente depende do cliente que você está utilizando. No ArcGIS Online, a hora é exibida no horário local da sua organização ou perfil.

CURRENT_TIMESTAMP()

Retorna a data e hora atuais de UTC (horas, minutos, segundos, milissegundos).

O que você vê no cliente depende do cliente que você está utilizando. No ArcGIS Online, a hora é exibida no horário local da sua organização ou perfil.

EXTRACT(<unit> FROM <date>)

Retorna uma única parte (<unit>) da <date> especificada. Os possíveis valores de <unit> incluem, mas não se limitam ao ano, mês, dia, hora e minuto.

Exemplos

  • EXTRACT(MONTH FROM 12/21/2016)—retorna 12.
  • EXTRACT(DAY FROM 12/21/2016 12:00)—retorna 21.
  • EXTRACT(HOUR FROM 12/21/2016 15:00)—retorna 15.

Funções numéricas

FunçãoDescrição

ABS(<number>)

Retorna o valor absoluto (positivo) do número que você especificar.

CEILING(<number>)

Retorna o menor inteiro maior que, ou igual ao número especificado.

Exemplo

  • CEILING(12.93)—o resultado é 13.

COS(<number>)

Retorna o co-seno trigonométrico de <number>, que é assumido para ser um ângulo em radianos.

CAST(<number> AS FLOAT | INT)

Converte um número para um tipo diferente. FLOAT converte o número especificado para um duplo e INT converte para um inteiro.

FLOOR(<number>)

Retorna o maior inteiro que é menor ou igual ao número especificado.

Exemplo

  • FLOOR(12.93)—o resultado é 12.

LOG(<number>)

O logaritmo natural do número especificado.

LOG10(<number>)

O logaritmo de base 10 do número especificado.

MOD(<number>, <n>)

Retorna o restante após o dividendo (<number>) ser dividido pelo divisor <n>. Ambos <n> e <number> devem ser do tipo inteiro.

Os exemplos incluem o seguinte:

  • MOD(10, 4)—o resultado é 2.
  • MOD(CAST(DBLFIELD AS INT), 4)DBLFIELD é um campo do tipo duplo, então a função CAST é necessária para converter valores duplos para inteiro.

NULLIF(<number>, <value>)

Retorna null se o número especificado for igual ao valor especificado. NULLIF é comumente utilizado para evitar erros de divisão por zero configurando <value> para 0.

Sempre que um cálculo encontrar um valor de campo null em alguns dos seus parâmetros, o resultado do cálculo será null.

Por exemplo, suponha que você precise calcular um campo duplo para ser TOTALPOP dividido por POP18. Se qualquer feição tiver um valor POP18 igual a zero, o cálculo resultará em um erro de divisão por zero. Você pode criar um filtro para ocultar registros onde POP18 é zero, e executar seu cálculo. Um atalho é utilizar NULLIF.

  • TOTALPOP / NULLIF(POP18, 0)—retorna null se POP18 for igual a zero; caso contrário, o valor de TOTALPOP / POP18 será retornado.

POWER(<number> , <y>)

Retorna o valor do número especificado elevado à potência especificada (<y>).

ROUND(<number> , <length>)

Arredonda o número especificado para o comprimento especificado.

Se você utilizar um número positivo para <length>, o número será arredondado para a posição decimal especificada por <length>. Quando <length> é um número negativo, o <number> especificado é arredondado no lado esquerdo do ponto decimal.

Exemplos

  • ROUND(10.9934,2)—retorna 10.99.
  • ROUND(10.9964,2)—retorna 11.00.
  • ROUND(111.0,-2)—retorna 100.00.

SIN(<number>)

Retorna o seno trigonométrico do <number> especificado, que é assumido como sendo um ângulo em radianos.

TAN(<number>)

Retorna a tangente do <number> especificado, que é assumido como sendo um ângulo em radianos.

TRUNCATE(<number>,<decimal_place>)

Trunca o <number> na <decimal_place> especificada.

Uma <decimal_place> positiva trunca para a posição decimal especificada. Quando <decimal_place> é um número negativo, o <number> é truncado no lado esquerdo do ponto decimal.

Exemplos

  • TRUNCATE(111.996,2)—retorna 111.99.
  • TRUNCATE(111.996,-2)—retorna 100.00.

Funções de string

FunçãoDescrição

CHAR_LENGTH(<string>)

Retorna o número de caracteres na string especificada. O resultado é um inteiro.

Exemplo

  • CHAR_LENGTH('Redlands')—o resultado é 8.

CONCAT(<string1>, <string2>)

Concatena dois valores de string.

Somente duas strings podem ser fornecidas. Para concatenar mais de duas strings, insira funções CONCAT consecutivas como mostrado abaixo.

Exemplos

  • CONCAT('A', 'B')—o resultado é 'AB'.
  • CONCAT('A', CONCAT(':', 'B'))—o resultado é 'A:B'.

Os valores nulos são convertidos em uma string vazia.

POSITION(<substring>, <string>)

Retorna a posição da primeira ocorrência da substring especificada na string que você especificar. Se substring especificada não for localizada, o resultado será 0.

Exemplos

  • POSITION('boat', 'Sailboat')—o resultado é 5.
  • POSITION('motor', 'Sailboat')—o resultado é 0.

SUBSTRING(<string>, <start>, <length>)

Retorna uma parte de um valor de string; <start> é um índice inteiro especificando onde iniciam os caracteres retornados e <length> é o número de caracteres para ser retornado.

Exemplos

  • SUBSTRING('Sailboat', 5, 4)—o resultado é 'boat'.
  • SUBSTRING('Sailboat', 1, 4)—o resultado é 'Sail'.
  • SUBSTRING('Sailboat', 5, 100)—o resultado é 'boat'.

TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>)

Retorna uma string onde todos os espaços iniciais ou finais são removidos da string especificada.

Exemplo

  • TRIM(BOTH ' ' FROM ' San Bernardino ')—o resultado é 'San Bernardino'.

Note que o segundo parâmetro são duas aspas únicas com um espaço entre elas.

UPPER(<string>)

Retorna uma string onde todos os caracteres são convertidos em letra maiúscula.

Exemplo

  • UPPER('Sailboat')—o resultado é 'SAILBOAT'.

LOWER(<string>)

Retorna uma string onde todos os caracteres são convertidos em letra minúscula.

Exemplo

  • LOWER('Sailboat')—o resultado é 'sailboat'.