Skip To Content

Calcular valores de campo

Los cálculos de campo permiten al propietario de la capa de entidades alojada o al administrador del portal modificar los valores de cada fila en un solo campo de la tabla de atributos de una capa escribiendo y ejecutando una expresión SQL.

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.

La siguiente sección explica cómo calcular valores para un campo desde la página de detalles de una capa de entidades alojada. Las secciones subsiguientes proporcionan ejemplos de cálculos comunes.

Calcular valores para un campo

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. Utilice operadores básicos, una lista de campos y funciones para formar la expresión de cálculo.
  5. Una vez haya formado su expresión, haga clic en el botón Validar para garantizar que no contenga errores. Si la expresión no es válida, haga clic en el botón Eliminar y forme una expresión nueva.
  6. Para aplicar el cálculo a todos los valores del campo, haga clic en Calcular.

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.

Cálculos de ejemplo

Las siguientes secciones proporcionan sintaxis o métodos de ejemplo para realizar cálculos comunes en un portal de ArcGIS Enterprise.

Realizar una operación matemática con los valores numéricos de dos campos existentes para rellenar un tercer campo

Uno de los cálculos más comunes que se realizan es derivar un nuevo valor numérico basado en los valores existentes de la capa de entidades. Por ejemplo, puede restar el total de ventas de un año de todas sus tiendas del total de ventas de otro año para conocer la diferencia de ganancias de un año al siguiente, o puede dividir el número total de residentes menores de 18 años entre la población total para determinar la fracción de la población menor de 18 años.

Ejemplos de SQL

Use el cálculo de un campo numérico (SalesDifference) para encontrar la diferencia entre los valores de los campos numéricos, Sales2016 y Sales2017.

Sales2016 - Sales2017

Rellene un campo numérico con un número decimal que sea el resultado de calcular qué parte de la población es menor de 18 años.

PopUnder18/TotalPop

Concatene los valores de cadena de caracteres de los campos existentes a un nuevo campo de cadena de caracteres.

Otro cálculo que rellena un nuevo campo implica la combinación de los valores de los campos de cadena de caracteres existentes. Por ejemplo, puede tener dos campos de cadena de caracteres para la ubicación de la habitación de un hotel, Piso y Habitación, y desea combinarlos en un campo de cadena de caracteres que contenga ambos.

Ejemplo de SQL

En este ejemplo, los valores de los campos Piso y Habitación se combinan en un solo campo.

CONCAT(Floor,Room)

Eliminar los espacios anteriores y posteriores de los campos de cadena de caracteres

Cuando las personas escriben o pegan valores en un campo cuando están editando, pueden cometer errores y dejar un espacio al principio o al final del texto. Estos errores se pueden eliminar recortando los valores.

Ejemplo de SQL

En este ejemplo, sabe que el editor agregó un espacio final al pegar New Hampshire en el campo que almacena los nombres de los estados, por lo que recortará el espacio al final de la cadena de caracteres.

Trim(TRAILING ' ' FROM 'New Hampshire ')

Rellenar un campo con diferentes valores en función de los valores de otro campo

A veces, el valor que desea que ArcGIS Enterprise escriba en un campo varía según la entidad y depende de otro valor para la misma entidad. Por ejemplo, puede agregar un campo de cadena de caracteres a la capa de entidades para almacenar texto que describa el valor de la cadena de caracteres numérica o abreviada de otro campo.

Ejemplo de SQL

Este tipo de cálculos por lo general se basan en cláusulas WHERE, que actualmente no se admiten en la interfaz de cálculo de los portales de ArcGIS Enterprise. Sin embargo, puede aplicar un filtro a la capa de Map Viewer, calcular los valores de las entidades filtradas, eliminar ese filtro, aplicar otro filtro basado en un valor diferente y calcular los valores de esos campos.

Por ejemplo, si tiene un campo numérico que registra los tipos de tienda utilizando códigos (3, 2 y 1) y desea un campo de cadena de caracteres que explique qué representa cada uno de estos códigos (cadena comercial, franquicia e independiente), puede agregar un campo de cadena de caracteres a la capa, agregar la capa a Map Viewer, filtrar cada valor de código y calcular el valor del campo de cadena de caracteres.

  1. Agregar un campo de cadena de caracteres a la capa de entidades alojada. Establezca la longitud para que quepa la cadena de caracteres más larga que va a almacenar.

    En el ejemplo del tipo de tienda, el nuevo nombre de campo es TypeFull.

  2. En la pestaña Vista general de la página de detalles de la capa, haga clic en Abrir en el Visor de mapas.
  3. Defina un filtro en la capa para que solo las entidades del mismo tipo estén presentes en el mapa.

    En el ejemplo de la tienda, aplique un filtro que devuelva solo aquellas entidades en las que el valor de campo StoreCode sea 3.

  4. Abra la tabla de atributos de la capa.
  5. Haga clic en el nombre del campo agregado en el paso 1 y haga clic en Calcular.

    En este ejemplo, haga clic en el nombre TypeFull y haga clic en Calcular.

  6. Escriba la cadena de caracteres que desea insertar en este campo para estas entidades. Escriba la cadena de caracteres entre comillas simples (' ').

    Escriba "cadena comercial" para rellenar el campo TypeFull de todas las entidades que tengan un StoreCode de 3.

  7. Haga clic en Calcular.
  8. Elimine el filtro definido en el paso 3. (Abra de nuevo la ventana Filtro de la capa y haga clic en Eliminar filtro).
  9. Repita los pasos del 3 al 8 para los valores restantes que necesite calcular.

    En el ejemplo de la tienda, defina un filtro para que StoreCode sea 2 y calcule TypeFull para "franquicia". Elimine ese filtro, defina un nuevo filtro para que StoreCode sea 1 y calcule TypeFull para "independiente".

  10. Cuando termine de calcular los valores del nuevo campo, cierre Map Viewer sin guardar el mapa.

Reemplazar un valor con otro

Si necesita reemplazar un valor existente por otro, por ejemplo, si la forma en que representa un valor concreto ha cambiado o si necesita corregir los valores mal escritos, puede encontrar todos los valores existentes para un campo y reemplazarlos por un nuevo valor.

Precaución:

Los cálculos se guardan inmediatamente en la capa de entidades. Si se sobrescribe un valor existente por error, se debe volver a calcular para volver a cambiar el valor.

Ejemplo de SQL

Al igual que rellena un campo en función de los valores de otro campo, puede aplicar un filtro a la capa en Map Viewer para que devuelva solo aquellas entidades que contengan el valor de campo a reemplazar. A continuación, configure los campos filtrados iguales al nuevo valor para actualizar el valor de los campos.

Por ejemplo, si necesita corregir valores mal escritos o convertir una palabra en una abreviatura, filtre la cadena de caracteres literal que necesita cambiar y configure el campo para que sea igual al nuevo valor.

  1. Agregue la capa de entidades alojada que necesita actualizar a Map Viewer.

    Debe ser propietario de la capa o administrador del portal.

  2. Defina un filtro en la capa para que solo se muestren en el mapa las entidades que contienen el valor que desea reemplazar.

    Por ejemplo, si sabe que una serie de entidades contienen Crt valores para el campo StreetType, aplique un filtro que devuelva solo aquellas entidades en las que el valor de campo StreetType sea Crt.

  3. Abra la tabla de atributos de la capa.
  4. Haga clic en el nombre del campo y haga clic en Calcular.

    En este ejemplo, haga clic en el campo StreetType y haga clic en Calcular.

  5. Escriba la cadena de caracteres que desea insertar en este campo para estas entidades. Escriba la cadena de caracteres entre comillas simples (' ').

    Escriba "Ct" para rellenar los campos de StreetType filtrados con la abreviatura corregida para Court.

  6. Haga clic en Calcular para aplicar los cambios a los campos filtrados.
  7. Cierre Map Viewer sin guardar el mapa.

Agregar tiempo a una fecha o restar tiempo de una fecha

Es recomendable agregar o restar tiempo de un campo de fecha o un valor literal de fecha 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.

Ejemplos de SQL

Utilice una consulta INTERVAL para agregar o restar tiempo de un campo de fecha, como se muestra en los siguientes cálculos. En el primer ejemplo se agregan tres días a una fecha para generar una nueva fecha. En el segundo ejemplo se restan tres días a un campo de marca de tiempo.

<DateField> + INTERVAL '3'DAY = updated date
<DateField> - INTERVAL '3 00:00:60' DAY TO SECOND = updated date

Puede usar INTERVAL con los siguientes valores de fecha y hora:

  • DAY
  • HOUR
  • MINUTE
  • SECOND
  • DAY TO HOUR
  • DAY TO MINUTE
  • DAY TO SECOND
  • HOUR TO MINUTE
  • HOUR TO SECOND
  • MINUTE TO SECOND

Calcular la diferencia entre dos fechas

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.

Ejemplos de SQL

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 o literal de fecha de otro campo o literal de fecha. El número resultante (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)

Consideraciones al calcular valores de campo

  • Si hay un filtro en la capa de Map Viewer, solo se calcularán los valores de los registros que cumplan los criterios del filtro.
  • Al escribir expresiones SQL, 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.
  • No puede calcular valores de campo en copias de capas de entidades alojadas, capas de entidades alojadas que tengan capas de teselas relacionadas, capas de entidades espaciotemporales alojadas ni en vistas creadas a partir de capas de entidades espaciotemporales alojadas.
  • Solo se admiten consultas SQL estandarizadas en los cálculos de valores de campo.
  • 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.

Referencia de SQL estandarizado (SQL-92)

Al escribir una expresión SQL para calcular los valores de campo, utilice SQL estandarizado. Esta sección proporciona una lista de los operadores y funciones de SQL que se pueden usar para cálculos SQL en un portal de ArcGIS Enterprise.

Después de crear la expresión SQL, haga clic en el botón Calcular. Si hay algún error, aparece un mensaje de error en la parte inferior del cuadro de diálogo. Corrija la sintaxis de la expresión y vuelva a calcular.

Operadores

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.

Funciones

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.
  • 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 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.

Antes de trabajar con campos de fecha, lea 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.

Lo que ve en el cliente depende del cliente que esté usando. En el sitio web del portal, las fechas se muestran en la zona horaria de su navegador.

El siguiente ejemplo devuelve todos los valores del campo inspect_date que tienen una fecha posterior a la fecha de hoy:

inspection_date > CURRENT_DATE

CURRENT_TIMESTAMP

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

Lo que ve en el cliente depende del cliente que esté usando. En el sitio web del portal, la hora se muestra en la hora local de su navegador.

En este ejemplo, todos los valores de fecha y hora anteriores a la fecha y hora actuales (en UTC) se devuelven para el campo appointments:

appointments < CURRENT_TIMESTAMP

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.

Los ejemplos incluyen lo siguiente:

  • 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:44') devuelve 15.

Funciones numéricas

FunciónDescripción

ABS(<number>)

Devuelve el valor absoluto (positivo) del número especificado.

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 <number>, 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.

LN(<number>,<decimal_place>)

El logaritmo natural del número especificado.

LOG(<number>,<decimal_place>)

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.

Los ejemplos incluyen lo siguiente:

  • 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.

TRUNC(<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

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

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 funciones CONCAT consecutivas tal como se muestra a continuación.

Ejemplos

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

Los valores nulos se convierten en cadenas vacías.

POSITION(<substring> in <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'in 'Sailboat') devuelve 5.
  • POSITION('motor'in '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.

Ejemplos

  • 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'.