Skip To Content

Calcular valores de campo

Los cálculos de campos permiten al propietario de la capa de entidades alojada o al administrador de la organización modificar los valores de cada fila en un solo campo en la tabla de atributos de una capa.

Por ejemplo, si usted tiene una capa de entidades alojada que almacena información sobre ventas inmobiliarias (incluidos el precio de venta y el tipo impositivo de la ubicación del inmueble), podría agregar un campo a la capa para almacenar estimaciones de impuestos sobre bienes inmuebles. Para rellenar el campo estimated_property_taxes, defina una expresión de cálculo para el campo que tome los valores del campo sale_price y los multiplique por los valores de tax_rate.

Tiene dos opciones al escribir expresiones de cálculo en campos de capas que se encuentran en una capa de entidades alojada:

  • Arcade: ideal para cálculos que requieren más funcionalidad que SQL, ya que Arcade otorga acceso a valores de atributos y geometría de entidades; de esta forma, puede crear expresiones que incluyan operaciones espaciales. Además, si se produce un error durante los cálculos de una fila en concreto, es posible detener el proceso, solucionar el problema y reiniciar los cálculos después de corregirlo.
  • SQL: úselo si desea obtener el rendimiento más rápido con cálculos que se pueden expresar con expresiones de SQL estandarizadas (SQL-92) en atributos no espaciales. Es posible ejecutar SQL en capas de entidades alojadas con la sincronización habilitada y en capas configuradas para rastrear a creadores y editores de entidades; por el contrario, no se pueden ejecutar expresiones de Arcade en dichas capas.

Siga estos pasos para calcular valores de campo numérico, de fecha o de cadena de caracteres en un campo.

Nota:
Los cálculos de campo no se pueden deshacer. Por este motivo, una buena práctica es agregar un campo, calcularle valores y confirmar que el cálculo es lo que usted desea. De ser así, entonces pude calcular el campo original para que equivalga al campo agregado. Una vez haya confirmado que los valores son correctos en el campo original, puede eliminar el campo que agregó.
  1. Desde la página del elemento de la capa, haga clic en la pestaña Datos para mostrar la tabla.
    Nota:

    Estos pasos también se pueden realizar desde la tabla de Map Viewer.

  2. Haga clic en la columna que contenga los valores desee calcular.
  3. Realice una de las siguientes acciones para abrir el cuadro de diálogo Calcular campo:
    • Haga clic en Calcular.
    • Haga clic en Mostrar vista detallada > Calcular
  4. Seleccione el lenguaje que desea usar en los cálculos, ya sea Arcade o SQL.

    Si la capa de entidades alojada tiene la sincronización habilitada o está configurada para rastrear a quienes crean y actualizan entidades, se abrirá el cuadro de diálogo de la expresión SQL y usted no verá esta página.

  5. Forme una expresión de cálculo.
    • Para SQL, use operadores básicos, una lista de campos y funciones. Haga clic en el botón Validar para garantizar que la expresión no contenga errores. Si la expresión no es válida, haga clic en el botón Eliminar y forme una expresión nueva. Cuando la expresión esté completada y sea válida, haga clic en Calcular.
    • Para Arcade, use variables globales, funciones y constantes. Haga clic en Aceptar para ejecutar la expresión. Si se produce un error mientras se ejecuta la expresión, haga clic en Revisar error para abrir la ventana de la expresión y corregir el error. De lo contrario, haga clic en Cancelar. Si corrige la expresión y la vuelve a ejecutar, los cálculos empiezan de nuevo.

El tiempo que tarda el cálculo en completarse depende de la complejidad de la expresión y del número de entidades de su capa.

Ejemplos de Arcade

Hay algunas expresiones de Arcade sencillas que muestran cómo se podría calcular un campo.

Calcule la suma de los valores de dos campos numéricos, Sales2016 y Sales2017, para rellenar un campo numérico.

$feature.Sales2016 + $feature.Sales2017

El siguiente ejemplo escribe condicionalmente distintos valores de cadena de caracteres –None, Low, High u Other– en un campo de texto en función de un número en otro campo de la capa (HowMany).

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

Este ejemplo calcula un campo respecto a la coordenada x de cada punto de una capa de puntos.

Geometry($feature).x

El ejemplo normaliza un valor de población sin procesar dividiéndolo entre el área (en millas cuadradas) de la entidad poligonal:

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

Operadores SQL básicos

En el cuadro de diálogo Calcular campo, puede crear expresiones SQL sencillas con operadores como los de suma, resta, multiplicación y división. A continuación se muestran algunos ejemplos y sugerencias para utilizar estos operadores:

  • Para multiplicar todos los valores de un campo numérico denominado SAMPLE por 100.0, escriba SAMPLE * 100.0 como expresión.
  • Para ecuaciones más complejas, puede usar paréntesis para especificar el orden de los cálculos, por ejemplo, SAMPLE * (BASELINE - 40).
  • Los operadores de coincidencia no funcionan en los campos de cadena de caracteres. Deberá usar las funciones de cadena de caracteres que se describen en la sección Funciones de cadenas de caracteres.
  • Si va a calcular un campo de tipo doble para convertirlo en un campo de tipo entero, puede agregar la función CAST automáticamente a la expresión. Por ejemplo, si va a calcular un campo de tipo doble llamado POP para ponerlo en un campo de tipo entero llamado SAMPLE, la expresión aparecerá como CAST(SAMPLE AS FLOAT). No quite la función CAST. Consulte Funciones numéricas a continuación para obtener información sobre la función CAST.
  • Utilice comillas simples para incluir un apóstrofo en la cadena. Por ejemplo, 'L''Hospitalet'. No utilice comillas dobles.

Después de crear la expresión, haga clic en el botón Calcular. Si hay algún error, aparecerá un mensaje de error en la parte inferior del cuadro de diálogo.

A continuación se indican algunas consideraciones adicionales:

  • Si hay un filtro en la capa, solo se calcularán los valores de los registros que cumplan los criterios del filtro.
  • Calcular campo solo funciona con nombres de campo, no con alias. La lista Campos muestra todos los nombres de los campos disponibles para los cálculos. Puede filtrar la lista por tipo de campo Cadena de caracteres, Numérico y Fecha.
    • Si pasa el ratón por encima del nombre del campo en la lista Campos, se muestran el alias y el tipo de campo.
    • Si hace clic en un nombre de campo en la lista Campos, el campo se agrega a la expresión.

funciones SQL

Además de expresiones sencillas con operadores, también puede usar funciones para crear expresiones SQL. Las funciones funcionan con nombres de campos, literales y otras funciones. Por ejemplo, supongamos que necesita calcular un campo doble para que sea TOTALPOP dividido por POP18. Si una función tiene POP18 igual a cero, el cálculo dará como resultado un error de división por cero. Puede protegerse frente a esto con la función NULLIF que se describe a continuación. La expresión sería TOTALPOP / NULLIF(POP18, 0).

Las funciones admiten argumentos. En las tablas siguientes, cualquier argumento puede ser:

  • Un nombre de campo, siempre que el tipo del campo coincida con el tipo del argumento (cadena de caracteres, número o fecha).
  • Un literal, como 'Velero' (una cadena de caracteres entrecomillada con comillas simples), el número 5 o una fecha en formato MM/DD/YYYY hh:mm:ss, entrecomillada con comillas simples.
  • Si su organización permite consultas SQL no estándar, es necesario marcar los caracteres no ingleses en un literal de cadena de caracteres con N (por ejemplo, N'针叶林').
  • Una función que devuelva un valor del tipo adecuado (cadena de caracteres, número o fecha). Por ejemplo, FLOOR(POWER(SAMP_ERR, 0.5)) devuelve el entero más grande que es menor o igual que la raíz cuadrada de SAMP_ERR.

Con fines ilustrativos, los ejemplos de la columna de descripción de las tablas siguientes utilizan mayoritariamente argumentos literales. Puede sustituir un nombre de campo u otra función por estos argumentos.

Funciones de cadena

FunciónDescripción

CHAR_LENGTH(<string>)

Devuelve el número de caracteres en la cadena especificada. El resultado es un entero.

Ejemplo

  • CHAR_LENGTH('Redlands') devuelve 8.

CONCAT(<string1>, <string2>)

Concatena dos valores de cadena de caracteres.

Solo se pueden indicar dos cadenas. Para concatenar más de dos cadenas de caracteres, anide CONCAT consecutivas tal como se muestra en el ejemplo siguiente.

Ejemplo

  • CONCAT('A', 'B') devuelve 'AB'.
  • CONCAT('A', CONCAT(':', 'B')) devuelve 'A:B'.

Los valores nulos se convierten en cadenas vacías.

POSITION(<substring>, <string>)

Devuelve la posición de la primera ocurrencia de la subcadena especificada en la cadena que usted especifica. Si no se encuentra la subcadena especificada, el resultado es 0.

Ejemplos

  • POSITION('boat', 'Sailboat') devuelve 5.
  • POSITION('motor', 'Sailboat') devuelve 0.

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

Devuelve una parte de un valor de cadena; <start> es un índice entero que especifica dónde empiezan los caracteres devueltos y <length> es el número de caracteres que se deben devolver.

Ejemplo

  • SUBSTRING('Sailboat', 5, 4) devuelve 'boat'.
  • SUBSTRING('Sailboat', 1, 4) devuelve 'Sail'.
  • SUBSTRING('Sailboat', 5, 100) devuelve 'boat'.

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

Devuelve una cadena de caracteres en la que se han eliminado todos los espacios anteriores y posteriores de la cadena que usted especifica.

Ejemplo

  • TRIM(BOTH ' ' FROM ' San Bernardino ') devuelve 'San Bernardino'.

Como se ve, en el segundo argumento hay espacios entre las comillas simples y el texto.

UPPER(<string>)

Devuelve una cadena de caracteres en la que todos los caracteres se han convertido en mayúsculas.

Ejemplo

  • UPPER('Sailboat') devuelve 'SAILBOAT'.

LOWER(<string>)

Devuelve una cadena de caracteres en la que todos los caracteres se han convertido en minúsculas.

Ejemplo

  • LOWER('Sailboat') devuelve 'sailboat'.

Funciones numéricas

FunciónDescripción

ABS(<number>)

Devuelve el valor absoluto (positivo) del número que usted especifica

CEILING(<number>)

Devuelve el número entero más pequeño que sea mayor o igual al número especificado.

Ejemplo

  • CEILING(12.93) devuelve 13.

COS(<number>)

Devuelve el coseno trigonométrico de número, que se asume que es un ángulo en radianes.

CAST(<number>AS FLOAT | INT)

Convierte un número en otro tipo distinto. FLOAT convierte el número especificado en un doble y INT lo convierte en un entero.

FLOOR(<number>)

Devuelve el número entero más grande que sea menor o igual al número especificado.

Ejemplo

  • FLOOR(12.93) devuelve 12.

LOG(<number>)

El logaritmo natural del número especificado.

LOG10(<number>)

El logaritmo de base 10 del número especificado.

MOD(<number>, <n>)

Devuelve el resto una vez se ha dividido el dividendo (<number>) entre el divisor <n>. Tanto <n> como <number> deben ser de tipo entero.

Ejemplo

  • MOD(10, 4) devuelve 2.
  • MOD(CAST(DBLFIELD AS INT), 4): DBLFIELD es un campo de tipo doble, así que es necesario usar la función CAST para convertir los valores dobles en enteros.

NULLIF(<number>, <value>)

Devuelve null si el número especificado equivale al valor especificado. NULLIF se suele utilizar para evitar errores de división entre cero poniendo <value> a 0.

Siempre que un campo encuentre un campo con valor null en cualquiera de los argumentos, el resultado del cálculo será null.

Por ejemplo, supongamos que necesita calcular un campo doble para que sea TOTALPOP dividido por POP18. Si una función tiene un valor POP18 igual a cero, el cálculo dará como resultado un error de división entre cero. Puede crear un filtro para ocultar registros en los que POP18 es igual a cero y realizar su cálculo. Un atajo sería usar NULLIF.

  • TOTALPOP / NULLIF(POP18, 0) devuelve null si POP18 es igual a cero; de lo contrario, se devuelve el valor de TOTALPOP / POP18.

POWER(<number> , <y>)

Devuelve el valor del número especificado elevado a la potencia especificada (<y>).

ROUND(<number> , <length>)

Redondea el número especificado a la longitud especificada.

Si utiliza un número positivo para <length>, el número se redondea a la posición decimal especificada por <length>. Si <length> es un número negativo, el valor de <number> especificado se redondea a la izquierda del punto decimal.

Ejemplos

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

SIN(<number>)

Devuelve el seno trigonométrico del valor de <number> especificado, que se asume que es un ángulo en radianes.

TAN(<number>)

Devuelve la tangente del valor de <number> especificado, que se asume que es un ángulo en radianes.

TRUNCATE(<number>,<decimal_place>)

Trunca <number> en el valor especificado para <decimal_place>.

Un valor positivo de <decimal_place> trunca en la posición decimal especificada. Si <decimal_place> es un número negativo, el valor de <number> se trunca a la izquierda del punto decimal.

Ejemplos

  • TRUNCATE(111.996,2) devuelve 111.99.
  • TRUNCATE(111.996,-2) devuelve 100.00.

Funciones de fecha

En los campos fecha se pueden realizar varios cálculos. Por ejemplo, puede agregar o restar tiempo de un campo de fecha o calcular la diferencia entre dos campos de fecha.

Cuando trabaje con campos de fecha, tenga en cuenta estas consideraciones importantes.

Puede utilizar cualquier combinación de campos de fecha y numéricos y literales para calcular los campos de fecha. Si utiliza literales de fecha, debe utilizar formatos de fecha compatibles con SQL.

Están disponibles las siguientes funciones de fecha:

FunciónDescripción

CURRENT_DATE()

Devuelve la fecha actual en hora UTC.

CURRENT_TIME()

Devuelve la fecha y hora UTC (horas, minutos y segundos) actuales.

CURRENT_TIMESTAMP()

Devuelve la fecha y hora UTC (horas, minutos, segundos y milisegundos) actuales.

EXTRACT(<unit> FROM <date>)

Devuelve una sola parte (<unit>) del valor especificado para <date>. Entre los posibles valores de <unit> se encuentran: año, mes, día, hora y minuto.

Por ejemplo

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

Agregar tiempo a una fecha o restar tiempo de una fecha

Puede que desee agregar o restar tiempo de un campo de fecha o un valor literal de fecha compatible con SQL para generar un campo de fecha actualizado. Por ejemplo, puede calcular una fecha de inspección o revisión futura agregando tiempo a una fecha.

Los cálculos siguientes se pueden utilizar para agregar o restar tiempo de un campo de fecha. En el primero se utilizan campos de fecha y en el segundo se utilizan valores literales de fecha. También se pueden utilizar campos numéricos y literales de número. Se admite cualquier combinación de campos y literales, tal y como se muestra en el tercer y cuarto cálculo.

<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

El campo de fecha calculado es la fecha original más o menos el número de días que desee agregar o restar. El número de días puede ser un número entero y también puede incluir una fracción; por ejemplo, 1,5 representaría un día y medio o 36 horas.

En el ejemplo siguiente, se instaló una pieza de maquinaria el 14/6/2016 a las 10:00 AM. Podría utilizar cualquiera de los cálculos siguientes para generar una fecha de inspección transcurrido un mes (30 días) de esta fecha de instalación. En el primer cálculo se utiliza un campo de fecha con el valor 14/6/2016 y un campo numérico con el valor 30, mientras que en el segundo se utiliza un literal de fecha y un literal de número.

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

Calcular la diferencia entre dos fechas con SQL

Puede que desee calcular el tiempo transcurrido entre dos fechas. Por ejemplo, si tiene fechas de instalación para contadores eléctricos y también tiene fechas de inspección, puede calcular la diferencia entre las dos fechas para verificar que el tiempo transcurrido entre la instalación y la inspección queda dentro de unas directrices válidas. El resultado del cálculo es un campo numérico en lugar de un campo de fecha.

Se puede utilizar cualquier combinación de campos de fecha y literales de fecha para calcular el tiempo transcurrido entre dos fechas. En el primer cálculo de abajo se utiliza un campo de fecha, mientras que en el segundo se utiliza un literal de fecha. En el tercer y cuarto cálculo se utiliza un campo de fecha y un literal de fecha.

<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

El resultado es un campo numérico que se calcula restando un campo/literal de fecha de otro campo/literal de fecha. El resultado del número (en días) puede ser un número entero y también puede incluir una fracción; por ejemplo, 1,5 representaría un día y medio o 36 horas.

En el ejemplo de la inspección de los contadores eléctricos mencionada antes, se puede utilizar cualquiera de los cálculos siguientes para calcular el tiempo transcurrido entre la fecha de instalación del 1/6/2015 y la fecha de inspección del 1/10/2015. En el primer cálculo se utilizan campos de fecha, en el segundo se utilizan literales de fecha y en el tercero y cuarto se utilizan tanto un campo de fecha como un literal de fecha.

<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)

Restricciones al calcular valores de campo

  • No puede calcular valores de campo en copias de capas de entidades alojadas ni en capas de entidades alojadas que tengan capas de teselas relacionadas.
  • Los valores calculados no se propagan desde la capa de entidades alojada o la vista a las capas de escenas alojadas.
  • Solo se admiten consultas SQL estándar en los cálculos de valores de campo, independientemente del ajuste Permitir solo consultas SQL estándar de la configuración de seguridad de la organización.
  • Los números de las expresiones SQL no admiten Formatos regionales. Por ejemplo, en los valores de tablas de atributos debe utilizar un separador de punto decimal en lugar del separador de coma cuando la configuración regional está definida en España.
  • No puede usar la función MOD numérica en campos dobles. Asigne el campo a un valor entero como se muestra en el ejemplo.
  • No es posible escribir expresiones de Arcade para capas de entidades alojadas con la sincronización habilitada o que están configuradas para rastrear a quienes crearon y actualizaron por última vez entidades.