Skip To Content

Calcolare valori campo

I calcoli del campo consentono al proprietario del feature layer hosted o a un amministratore del portale di modificare contemporaneamente i valori di ogni riga per un campo specifico nella tabella degli attributi di un layer scrivendo ed eseguendo un'espressione SQL.

Ad esempio, se si dispone di un feature layer hosted che memorizza informazioni sulle vendite di proprietà, inclusi il prezzo di vendita e l'aliquota fiscale per la posizione della proprietà, è possibile aggiungere un campo al layer per archiviare le imposte stimate sul patrimonio. Per compilare estimated_property_taxes, definire un'espressione di calcolo per il campo che accetta i valori nel campo sale_price e li moltiplica per i valori di tax_rate.

La sezione seguente spiega come calcolare i valori per un campo dalla pagina dei dettagli di un feature layer hosted. Le sezioni successive forniscono alcuni esempi dei calcoli più comuni.

Calcolare valori per un campo

Seguire questi passaggi per calcolare valori di stringa, numerici o data in un campo.

Nota:
Il calcolo dei campi non può essere annullato. Per questo motivo, è opportuno aggiungere un campo, calcolarne il valore e verificare che il calcolo sia quello desiderato. In caso affermativo, è possibile calcolare che il campo originale sia uguale al campo aggiunto. Una volta verificato che i valori siano corretti nel campo originale, è possibile eliminare il campo aggiunto.
  1. Dalla pagina dell'elemento del layer, fare clic sulla scheda Dati per visualizzare la tabella.
    Nota:

    È inoltre possibile eseguire questa procedura dalla tabella in Map Viewer.

  2. Fare clic sulla colonna contenente i valori che si desidera calcolare.
  3. Eseguire una delle seguenti operazioni per aprire la finestra di dialogo Calcola campo:
    • Fare clic su Calcola.
    • Fare clic su Mostra vista dettagliata > Calcola.
  4. Utilizzare operatori di base, elenco campi e funzioni per comporre l’espressione di calcolo.
  5. Una volta composta l'espressione, è possibile fare clic su pulsante Convalida per assicurarsi che non vi siano errori. Se l'espressione non è valida, fare clic sul pulsante Rimuovi e comporne una nuova.
  6. Per applicare il calcolo a tutti i valori nel campo, fare clic su Calcola.

Il tempo necessario per il completamento del calcolo dipende dalla complessità dell'espressione e dal numero di feature nel layer.

Esempi di calcoli

Le sezioni seguenti forniscono esempi di sintassi e metodi per l'esecuzione di calcoli comuni in un portale ArcGIS Enterprise.

Eseguire un'operazione matematica con i valori numerici di due campi esistenti per popolare un terzo campo

Uno dei calcoli più comuni da eseguire consiste nel derivare un nuovo valore numerico in base a valori esistenti nel feature layer. Ad esempio, si può sottrarre il totale delle vendite di un anno per tutti i punti vendita dal totale delle vendite di un altro anno per trovare la differenza di profitto da un anno all'altro, oppure dividere il numero totale di residenti di età inferiore ai 18 anni per il totale della popolazione per determinare la frazione di popolazione di età inferiore a 18 anni.

Esempi di SQL

Usare il calcolo in un campo numerico (SalesDifference) per trovare la differenza tra i valori nei campi numerici Sales2016 e Sales2017.

Sales2016 - Sales2017

Compilare un campo numerico con un numero decimale che è il risultato del calcolo della porzione di popolazione di età inferiore a 18 anni.

PopUnder18/TotalPop

Concatenare valori stringa da campi esistenti in un nuovo campo stringa

Un altro calcolo che popola un nuovo campo comporta la combinazione di valori da campi stringa esistenti. Ad esempio, se si dispone di due campi stringa per la posizione delle stanze in un hotel (Floor e Room) e si desidera combinarli in un campo stringa che li contiene entrambi.

Esempio di SQL

I questo esempio, i valori dei campi Floor e Room saranno combinati in un unico campo.

CONCAT(Floor,Room)

Eliminare gli spazi finali o iniziali dai campi stringa

Quando si digitano o si incollano i valori in un campo che si sta modificando, è possibile che si commettano errori o che si lasci uno spazio finale o iniziale nel testo. È possibile eliminare questi errori limando i valori.

Esempio di SQL

In questo esempio, l'editor ha lasciato uno spazio aggiuntivo quando ha incollato New Hampshire nel campo dei nomi degli stati, pertanto occorre eliminare lo spazio dalla fine della stringa.

Trim(TRAILING ' ' FROM 'New Hampshire ')

Compilare un campo con valori diversi a seconda dei valori in un altro campo

A volte, il valore che si desidera che ArcGIS Enterprise scriva in un campo varia in base alla feature e dipende da un altro valore presente nella stessa feature. Ad esempio, è possibile aggiungere un campo stringa al feature layer per memorizzare il testo che descrive un valore stringa numerico o abbreviato in un altro campo.

Esempio di SQL

Questi tipi di calcoli sfruttano solitamente le clausole WHERE, che non sono attualmente supportate nell'interfaccia di calcolo dei portali ArcGIS Enterprise. Tuttavia, è possibile applicare un filtro al layer in Map Viewer, calcolare i valori per le feature filtrate, rimuovere il filtro, applicare un altro filtro in base a un valore diverso e calcolare i valori per i relativi campi.

Ad esempio, se si dispone di un campo numerico che registra i tipi di punti vendita utilizzando i codici (3, 2 e 1) e si desidera un campo stringa che enumeri ciò che ciascuno di questi codici rappresenta (catena, franchising e negozio indipendente), è possibile aggiungere un campo stringa al layer, aggiungere il layer a Map Viewer, filtrare per ciascun valore del codice e calcolare il valore del campo stringa.

  1. Aggiungere un campo stringa al feature layer hosted. Impostare la lunghezza in modo da poter contenere la stringa più lunga che verrà memorizzata.

    Nell'esempio del tipo di punto vendita, il nuovo nome del campo è TypeFull.

  2. Dalla scheda Panoramica della pagina dei dettagli del layer, fare clic su Apri in Map Viewer.
  3. Definire un filtro nel layer in modo che nella mappa siano presenti solo le feature dello stesso tipo.

    Nell'esempio dei punti vendita, applicare un filtro che restituisce solo le feature per le quali il valore del campo StoreCode è 3.

  4. Aprire la tabella degli attributi per il layer.
  5. Fare clic sul nome del campo aggiunto nel punto 1, quindi fare clic su Calcola.

    Ad esempio, fare clic sul nome TypeFull, quindi fare clic su Calcola.

  6. Digitare la stringa che si desidera inserire in questo campo per queste feature. Racchiudere la stringa all'interno di virgolette ('').

    Digitare 'catena' per compilare il campo TypeFull per tutte le feature che hanno un StoreCode uguale a 3.

  7. Fare clic su Calcola.
  8. Rimuovere il filtro definito al punto 3. (Aprire la finestra Filtro del layer e fare clic su Rimuovi filtro).
  9. Ripetere i punti da 3 a 8 per i restanti valori da calcolare.

    Nell'esempio dei punti vendita, definire un filtro per StoreCode uguale a 2 e calcolare TypeFull per i punti vendita 'franchising'. Rimuovere il filtro, definire un nuovo filtro per StoreCode uguale a 1 e calcolare TypeFull per i punti vendita 'indipendenti'.

  10. Al termine del calcolo dei valori per il nuovo campo, chiudere Map Viewer senza salvare la mappa.

Sostituire un valore con un altro

Se è necessario sostituire un valore esistente con un altro (ad esempio, il modo in cui si rappresenta un determinato valore è stato modificato o è necessario correggere i valori digitati erroneamente), è possibile trovare tutti i valori esistenti per un campo e sostituirli con un nuovo valore.

Attenzione:

I calcoli vengono salvati immediatamente nel feature layer. Se si sovrascrive un valore esistente per errore, sarà necessario eseguire nuovamente il calcolo per modificare il valore.

Esempio di SQL

Analogamente al modo in cui si compilerebbe un campo in base ai valori in un altro campo, è possibile applicare un filtro al layer in Map Viewer che restituisce solo le feature contenenti il valore del campo da sostituire. Successivamente, impostare i campi filtrati in modo che corrispondano al nuovo valore per aggiornare i valori dei campi.

Ad esempio, se occorre correggere i valori digitati in modo errato o convertire una parola in un'abbreviazione, filtrare la stringa letterale da modificare e impostare il campo in modo che corrisponda al nuovo valore.

  1. Aggiungere il feature layer hosted da aggiornare a Map Viewer.

    Occorre essere il proprietario del layer o un amministratore del portale.

  2. Definire un filtro nel layer in modo che nella mappa siano mostrate solo le feature contenenti il valore da sostituire.

    Ad esempio, se si sa che un certo numero di feature contengono valori Crt per il campo StreetType, applicare un filtro che restituisca solo le feature per le quali il valore del campo StreetType è Crt.

  3. Aprire la tabella degli attributi per il layer.
  4. Fare clic sul nome del campo, quindi su Calcola.

    In questo esempio, fare clic sul campo StreetType, quindi fare clic su Calcola.

  5. Digitare la stringa che si desidera inserire in questo campo per queste feature. Racchiudere la stringa all'interno di virgolette ('').

    Digitare 'Ct' per compilare i campi StreetType filtrati con l'abbreviazione corretta per Court.

  6. Fare clic su Calcola per applicare le modifiche ai campi filtrati.
  7. Chiudere Map Viewer senza salvare la mappa.

Aggiungere o sottrarre tempo da una data

Potrebbe essere necessario aggiungere o sottrarre tempo da un campo data o un valore letterale data per produrre un campo data aggiornato. Ad esempio, è possibile calcolare una data di ispezione o revisione futura aggiungendo tempo a una data.

Esempi di SQL

Usare un’interrogazione INTERVALLO per aggiungere o sottrarre tempo da un campo data, come mostrato nei seguenti calcoli. Il primo esempio aggiunge tre giorni a una data per ottenere una nuova data. Il secondo esempio sottrae tre giorni da un campo di indicatori data.

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

È possibile usare INTERVALLO con i seguenti valori di data e ora:

  • GIORNO
  • ORA
  • MINUTO
  • SECONDO
  • DA GIORNO A ORA
  • DA GIORNO A MINUTO
  • DA GIORNO A SECONDO
  • DA ORA A MINUTO
  • DA ORA A SECONDO
  • DA MINUTO A SECONDO

Calcolare la differenza fra due date

Potrebbe essere necessario calcolare l'intervallo di tempo tra due date. Ad esempio, se si dispone delle date di installazione di contatori elettrici e anche delle date di ispezione, è possibile calcolare la differenza tra le date per verificare che l'intervallo di tempo tra l'installazione e l'ispezione rispetti le linee guida ammissibili. Il risultato del calcolo è un campo numerico anziché un campo data.

Esempi di SQL

Qualsiasi combinazione di campi data e valori letterali data può essere utilizzata per calcolare l'intervallo di tempo tra due date. Il primo calcolo sottostante utilizza un campo data, mentre il secondo utilizzata un valore letterale data. Il terzo e il quarto calcolo utilizzano sia un campo data sia un valore letterale 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

Il risultato è un campo numerico che viene calcolato sottraendo un campo data o valore letterale da un altro campo data o valore letterale. Il risultato numerico (in giorni) può essere un numero intero e anche includere una frazione. Ad esempio, 1,5 rappresenta un giorno e mezzo o 36 ore.

Nell'esempio di ispezione del contatore elettrico citato in precedenza, qualsiasi calcolo può essere utilizzato per calcolare l'intervallo di tempo tra una data di installazione di 6/1/2015 e una data di ispezione di 10/1/2015. Il primo calcolo utilizza campi data, il secondo utilizza valori letterali data e il terzo e il quarto utilizzando sia un campo data sia un valore letterale 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)

Considerazioni sul calcolo dei valori di campo

  • Se in uno dei layer in Map Viewer è presente un filtro, verranno calcolati i valori solo per i record che soddisfano i criteri dei filtri.
  • Quando si scrivono espressioni SQL, Calcola campo funziona solo con i nomi di campo e non con gli alias. Nell'elenco Campi sono visualizzati tutti i nomi di campi disponibili per i calcoli. È possibile filtrare questo elenco per tipi di campo Stringa, Numerico e Data.
    • Se si passa con il puntatore del mouse su un nome di campo nell'elenco Campi, verranno visualizzati l'alias e il tipo di campo.
    • Se si fa clic su un nome di campo nell'elenco Campi, il campo verrà aggiunto all'espressione.
  • Non è possibile calcolare valori campo in copie di feature layer hosted, feature layer hosted con Tile Layer correlati, hosted spatiotemporal feature layer o viste create da hosted spatiotemporal feature layer.
  • Durante il calcolo di valori campo sono supportate solo le interrogazioni SQL standardizzate.
  • Non è possibile utilizzare la funzione MOD numerica su campi doppi. Convertire il campo in un numero intero come mostrato nell’esempio.

Riferimento SQL (SQL-92) standardizzato

Quando si scrive un'espressione SQL per calcolare valori di campo, è necessario utilizzare un SQL standardizzato. Questa sezione fornisce un elenco degli operatori e delle funzioni SQL che è possibile utilizzare per i calcoli SQL in un portale ArcGIS Enterprise.

Dopo aver creato l'espressione SQL, fare clic sul pulsante Calcola. Se si verificano errori, viene visualizzato un messaggio di errore nella parte inferiore della finestra di dialogo. Correggere la sintassi dell'espressione ed eseguire nuovamente il calcolo.

Operatori

Nella finestra di dialogo Calcola campo è possibile creare semplici espressioni SQL utilizzando operatori come somma, sottrazione, moltiplicazione e divisione. Esempi e suggerimenti per utilizzare questi operatori come segue:

  • Per moltiplicare per 100,0 i valori numerici in un campo numerico denominato SAMPLE, digitare SAMPLE * 100.0 per l’espressione.
  • Per equazioni più complesse, è possibile utilizzare le parentesi per specificare l'ordine dei calcoli, ad esempio SAMPLE * (BASELINE - 40).
  • Gli operatori matematici non funzionano con i campi stringa. Sarà necessario utilizzare le funzioni stringa descritte nella sezione Funzioni stringa.
  • Se si intende calcolare un campo di tipo double in un campo di tipo intero, è possibile che all'espressione venga aggiunta automaticamente la funzione CAST. Ad esempio, se si intende calcolare un campo double denominato POP in un campo di valore intero denominato SAMPLE, l’espressione visualizzata sarà CAST(SAMPLE AS FLOAT). Non rimuovere la funzione CAST. Per informazioni sulla funzione CAST, vedere la sezione Funzioni numeriche di seguito.
  • Per includere un apostrofo nella stringa, utilizzare due virgolette singole come apostrofo. Ad esempio, 'Nightingale''s'. Non utilizzare una virgoletta doppia.

Funzioni

Oltre a semplici espressioni con operatori, è anche possibile utilizzare anche le funzioni per creare espressioni SQL. Le funzioni possono essere utilizzate con nomi di campo, valori letterali e altre funzioni. Si supponga ad esempio di dover calcolare un campo di tipo double da TOTALPOP diviso per POP18. Se un valore POP18 di una feature è uguale a zero, il calcolo restituirà un errore di divisione per zero. Per evitare tale errore, è possibile utilizzare la funzione NULLIF, descritta di seguito. L'espressione sarà TOTALPOP / NULLIF(POP18, 0).

Le funzioni accettano argomenti. Nelle tabelle seguenti qualsiasi argomento può essere uno dei seguenti:

  • Un nome di campo, purché il tipo di campo corrisponda al tipo di argomento (stringa, numero o data).
  • Un valore letterale, ad esempio 'Barca a vela' (una stringa racchiusa tra virgolette singole), il numero 5 o una data in formato MM/GG/AAAA hh:mm:ss racchiusa tra virgolette singole.
  • Una funzione che restituisce un valore di tipo corretto (stringa, numero o data). Ad esempio, FLOOR(POWER(SAMP_ERR, 0.5)) restituisce il valore intero massimo minore o uguale alla radice quadrata di SAMP_ERR.

A scopo illustrativo, negli esempi della colonna Descrizione delle seguenti tabelle vengono utilizzati principalmente argomenti di tipo valore letterale. È possibile sostituire il nome di un campo o un'altra funzione per questi argomenti.

Funzioni data

Sui campi data è possibile eseguire diversi calcoli. Ad esempio, è possibile aggiungere o sottrarre tempo da una campo data o calcolare la differenza tra due campi data.

Prima di lavorare con i campi data, si consiglia di leggere queste importanti considerazioni.

Durante il calcolo dei campi data è possibile utilizzare qualsiasi combinazione di campi data e numerici e valori letterali. Quando si utilizzano valori letterali data, occorre utilizzare formati data supportati da SQL.

Sono disponibili le seguenti funzioni data:

FunzioneDescrizione

CURRENT_DATE

Restituisce la data corrente nel fuso UTC.

Ciò che viene visualizzato nel client dipende dal client che si sta utilizzando. Nel portale Web, le date vengono visualizzate nel fuso orario del browser.

I seguenti esempi restituiscono tutti i valori nel campo inspection_date con una data successiva a quella odierna:

inspection_date > CURRENT_DATE

CURRENT_TIMESTAMP

Restituisce data e ora UTC correnti (ore, minuti, secondi).

Ciò che viene visualizzato nel client dipende dal client che si sta utilizzando. Nel portale Web, l'orario viene visualizzato nell'ora locale del browser.

In questo esempio, vengono restituiti tutti i valori di timestamp precedenti alla data odierna e all'ora corrente (in UTC) per il campo appointments:

appointments < CURRENT_TIMESTAMP

EXTRACT(<unit> FROM '<date>')

Restituisce una singola parte di (<unit>) di <date> specificato. I possibili valori <unit> includono, ma non solo, anno, mese, giorno, ora e minuto.

Gli esempi includono:

  • EXTRACT(MONTH FROM '12-21-2016')—restituisce 12.
  • EXTRACT(DAY FROM '12-21-2016 12:00')—restituisce 21.
  • EXTRACT(HOUR FROM '12-21-2016 15:00:44')—restituisce 15.

Funzioni numeriche

FunzioneDescrizione

ABS(<number>)

Restituisce il valore assoluto (positivo) del numero specificato.

CEILING(<number>)

Restituisce il numero intero più piccolo maggiore o uguale al numero specificato.

Questa funzione è stata aggiunta a partire da 10.1.

  • CEILING(12.93): il risultato è 13.

COS(<number>)

Restituisce il coseno trigonometrico di <number>, che si presuppone sia un angolo espresso in radianti.

CAST(<numero>AS FLOAT | INT)

Converte un numero in un tipo diverso. FLOAT converte il numero specificato in un valore double, mentre INT lo converte in un valore intero.

FLOOR(<number>)

Restituisce il valore intero massimo minore o uguale al numero specificato.

Questa funzione è stata aggiunta a partire da 10.1.

  • FLOOR(12.93): il risultato è 12.

LN(<number>,<decimal_place>)

Il logaritmo naturale del numero specificato.

LOG(<number>,<decimal_place>)

Il logaritmo in base 10 del numero specificato.

MOD(<number>, <n>)

Restituisce il resto dopo il dividendo (<numero>) è suddiviso dal divisore <n>. Sia <n> che <numero> devono essere valori di tipo intero.

Gli esempi includono:

  • MOD(10, 4): il risultato è 2.
  • MOD(CAST(DBLFIELD AS INT), 4)DBLFIELD è un campo di tipo doppio, pertanto è necessaria la funzione CAST per convertire i valori da doppio a intero.

NULLIF(<number>, <value>)

Restituisce null se il numero specificato è uguale al valore specificato. NULLIF viene utilizzato in genere per impedire errori di divisione per zero se si imposta <value> su 0.

Ogni volta che un calcolo rileva un valore di campo null in uno degli argomenti, il risultato del calcolo è null.

Si supponga ad esempio di dover calcolare un campo di tipo double da TOTALPOP diviso per POP18. Se un valore POP18 di una feature è uguale a zero, il calcolo restituirà un errore di divisione per zero. È possibile creare un filtro per nascondere i record quando POP18 è zero, quindi eseguire il calcolo. Un metodo rapido consiste nell'utilizzare NULLIF.

  • TOTALPOP / NULLIF(POP18, 0): restituisce null se POP18 è uguale a zero; in caso contrario, viene restituito il valore di TOTALPOP / POP18.

POWER(<number> , <y>)

Restituisce il valore del numero specificato elevato alla potenza specificata (<y>).

ROUND(<number> , <length>)

Arrotonda il numero specificato alla lunghezza specificata.

Se si utilizza un numero positivo per <length>, il numero viene arrotondato alla posizione decimale specificata da <length>. Quando <length> è un numero negativo, <number> specificato viene arrotondato a sinistra della virgola decimale.

Esempi

  • ROUND(10.9934,2): restituisce 10,99.
  • ROUND(10.9964,2): restituisce 11,00.
  • ROUND(111.0,-2): restituisce 100,00.

SIN(<number>)

Restituisce il seno trigonometrico di <number> specificato, che si presuppone sia un angolo espresso in radianti.

TAN(<number>)

Restituisce la tangente di <number> specificato, che si presuppone sia un angolo espresso in radianti.

TRUNC(<number>,<decimal_place>)

Tronca <number> su <decimal_place> specificato.

Un <decimal_place> positivo viene troncato alla posizione decimale specificata. Quando <decimal_place> è un numero negativo, <number> viene troncato alla sinistra della virgola decimale.

Esempi

  • TRUNC(111.996,2): restituisce 111,99 .
  • TRUNC(111.996,-2): restituisce 100,00.

Funzioni stringa

FunzioneDescrizione

CHAR_LENGTH(<string>)

Restituisce il numero di caratteri nella stringa specificata. Il risultato è un valore intero.

Questa funzione è stata aggiunta a partire da 10.1.

  • CHAR_LENGTH('Redlands'): il risultato è 8.

CONCAT(<string1>, <string2>)

Concatena due valori stringa.

È possibile specificare solo due stringhe. Per concatenare più di due stringhe, annidare funzioni CONCAT consecutive come illustrato di seguito.

Esempi

  • CONCAT('A', 'B'): il risultato è 'AB'.
  • CONCAT('A', CONCAT(':', 'B')): il risultato è 'A:B'.

I valori Null vengono convertiti in una stringa vuota.

POSITION(<substring> in <string>)

Restituisce la posizione della prima occorrenza della sottostringa specifica nella stringa specificata. Se la sottostringa specifica non viene trovata, il risultato è 0.

Esempi

  • POSITION('boat'in 'Sailboat'): il risultato è 5.
  • POSITION('motor'in 'Sailboat'): il risultato è 0.

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

Restituisce una parte di valore di stringa; <start> è un indice intero che specifica dove iniziano i caratteri restituiti. <length> è il numero di caratteri da restituire.

Esempi

  • SUBSTRING('Sailboat', 5, 4): il risultato è 'boat'.
  • SUBSTRING('Sailboat', 1, 4): il risultato è 'Sail'.
  • SUBSTRING('Sailboat', 5, 100): il risultato è 'boat'.

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

Restituisce una stringa in cui tutti gli spazi iniziali e finali vengono rimossi dalla stringa specificata.

Questa funzione è stata aggiunta a partire da 10.1.

  • TRIM(BOTH ' ' FROM ' San Bernardino '): il risultato è 'San Bernardino'.

Si noti che il secondo argomento è costituito da due virgolette singole che racchiudono uno spazio.

UPPER(<string>)

Restituisce una stringa in cui tutti i caratteri vengono convertiti in maiuscolo.

Questa funzione è stata aggiunta a partire da 10.1.

  • UPPER('Sailboat'): il risultato è 'SAILBOAT'.

LOWER(<string>)

Restituisce una stringa in cui tutti i caratteri vengono convertiti in minuscolo.

Questa funzione è stata aggiunta a partire da 10.1.

  • LOWER('Sailboat'): il risultato è 'sailboat'.