Les calculs de champ permettent au propriétaire de la couche d’entités hébergée ou à l’administrateur du portail de modifier les valeurs de chaque ligne d’un champ unique dans la table attributaire d’une couche en écrivant et en exécutant une expression SQL.
Par exemple, si vous avez une couche d’entités hébergée qui archive les informations sur ventes immobilières, comprenant le prix de vente et le taux d’imposition pour l’emplacement du bien, vous pouvez ajouter un champ à la couche pour stocker les impôts fonciers estimées. Pour renseigner le champ estimated_property_taxes, définissez pour ce champ une expression de calcul qui prend les valeurs du champ sale_price et les multiplie par les valeurs tax_rate.
La prochaine section explique comment calculer les valeurs d’un champ sur la page des détails d’une couche d’entités hébergée. Les sections suivantes offrent des exemples de calculs courants.
Calculer les valeurs d’un champ
Procédez comme suit pour calculer les valeurs de chaîne, numériques ou de date dans un champ.
Remarque :
Les calculs de champs ne peuvent pas être annulés. Pour cette raison, il est judicieux d’ajouter un champ, d’y calculer les valeurs et de vérifier que le calcul correspond à vos attentes. Si c’est le cas, vous pouvez calculer la valeur du champ original pour qu’elle soit égale à celle du champ ajouté. Une fois que vous avez vérifié que les valeurs sont correctes dans le champ original, vous pouvez supprimer le champ que vous avez ajouté.- Sur la page d’élément de la couche, cliquez sur l’onglet Data (Données) pour afficher la table.
Remarque :
Vous pouvez aussi effectuer ces étapes à partir du tableau dans Map Viewer.
- Cliquez sur la colonne contenant les valeurs à calculer.
- Pour ouvrir la boîte de dialogue Calculate Field (Calculer un champ), procédez de l’une des manières suivantes :
- Cliquez sur Calculer.
- Cliquez sur Show Detailed View (Afficher la vue détaillée) > Calculate (Calculer).
- Utilisez des opérateurs de base, une liste de champs et des fonctions pour générer l’expression de calcul.
- Une fois que vous avez généré votre expression, cliquez sur le bouton Validate (Valider) pour vérifier qu’elle ne contient pas d’erreur. Si l’expression n’est pas valide, cliquez sur le bouton Remove (Supprimer) et générez une nouvelle expression.
- Pour appliquer le calcul à toutes les valeurs dans le champ, cliquez sur Calculate (Calculer).
Le temps nécessaire au calcul dépend de la complexité de l’expression et du nombre d’entités figurant dans votre couche.
Exemples de calculs
Les sections suivantes offrent une syntaxe ou des méthodes d’exemple pour effectuer des calculs courants dans un portail ArcGIS Enterprise.
Effectuer une opération mathématique sur des valeurs numériques dans deux champs existants pour renseigner un troisième champ
Un des calculs les plus courants que vous effectuez consiste à déduire une nouvelle valeur numérique en fonction de valeurs existantes dans votre couche d’entités. Vous pouvez par exemple soustraire les ventes totales d’une année pour tous vos points de vente des ventes totales d’une autre année afin de connaître l’évolution du bénéfice d’une année à l’autre. Vous pouvez également diviser le nombre total d’habitants âgés de moins de 18 ans par la population totale pour connaître la proportion de la population de moins de 18 ans.
Exemples SQL
Utilisez le calcul sur un champ numérique (SalesDifference) pour connaître la différence entre les valeurs des champs numériques, Sales2016 et Sales2017.
Sales2016 - Sales2017
Renseignez un champ numérique avec un nombre décimal découlant du calcul de la portion de la population âgée de moins de 18 ans.
PopUnder18/TotalPop
Concaténez les valeurs de chaîne de champs existants dans un nouveau champ de chaîne
Pour renseigner un nouveau champ, vous pouvez également associer les valeurs de champs de chaîne existants. Vous pouvez par exemple avoir deux champs de chaîne pour désigner l’emplacement des chambres d’un hôtel (Étage et Chambre) et vous voulez les associer dans un champ de chaîne contenant les deux.
Exemple SQL
Dans cet exemple, les valeurs des champs Floor (Étage) et Room (Chambre) seront associés dans un seul champ.
CONCAT(Floor,Room)
Supprimer les espaces de début ou de fin des champs de chaîne
Lorsque les utilisateurs saisissent ou collent des valeurs dans un champ pendant une session de mise à jour, ils peuvent commettre des erreurs et laisser un espace de début ou de fin dans le texte. Vous pouvez nettoyer ces erreurs en réduisant les valeurs.
Exemple SQL
Dans cet exemple, vous savez que l’éditeur a ajouté un espace de fin lorsqu’il a collé Hampshire dans le champ des noms d’État, vous allez donc supprimer l’espace à la fin de la chaîne.
Trim(TRAILING ' ' FROM 'New Hampshire ')
Renseigner un champ avec différentes valeurs selon les valeurs d’un autre champ
Il peut arriver que la valeur que ArcGIS Enterprise doit écrire dans un champ varie en fonction de l’entité et dépende d’une autre valeur pour la même entité. Vous pouvez par exemple ajouter un champ de chaîne dans une couche d’entités pour stocker du texte décrivant une valeur de chaîne numérique ou abrégée dans un autre champ.
Exemple SQL
Ces types de calculs s’appuient généralement sur des clauses WHERE, qui ne sont actuellement pas prises en charge dans l’interface de calcul des portails ArcGIS Enterprise. Vous pouvez toutefois appliquer un filtre à la couche dans Map Viewer, calculer les valeurs des entités filtrées, supprimer ce filtre, appliquer un autre filtre en fonction d’une autre valeur, puis calculer les valeurs de ces champs.
Par exemple, si vous avez un champ numérique qui contient les types de points de vente avec des codes (3, 2 et 1) et que vous voulez un champ de chaîne qui énonce clairement ce que représente chacun de ces codes (chaîne, franchise et magasin indépendant), vous pouvez ajouter un champ de chaîne à la couche, ajouter la couche dans Map Viewer, filtrer chaque valeur de code et calculer la valeur du champ de chaîne.
- Ajoutez un champ de chaîne à la couche d’entités hébergée. Définissez la longueur pour adapter le champ à la chaîne la plus longue que vous allez intégrer.
Dans l’exemple du type de point de vente, le nouveau champ se nomme TypeFull.
- Sur l’onglet Overview (Vue d’ensemble) de la page des détails de la couche, cliquez sur Open in Map Viewer (Ouvrir dans Map Viewer).
- Définissez un filtre sur la couche afin que seules les entités du même type soient présentes sur la carte.
Pour l’exemple des points de vente, appliquez un filtre qui renvoie uniquement les entités dont la valeur de champ StoreCode est égale à 3.
- Ouvrez la table attributaire de la couche.
- Cliquez sur le nom du champ que vous avez ajouté à l’étape 1 et sur Calculate (Calculer).
Pour cet exemple, cliquez sur le nom TypeFull et sur Calculate (Calculer).
- Saisissez la chaîne à insérer dans ce champ pour ces entités. Entourez la chaîne de guillemets simples ('').
Saisissez 'chaîne' pour renseigner le champ TypeFull pour toutes les entités dont la valeur de StoreCode est égale à 3.
- Cliquez sur Calculer.
- Supprimez le filtre défini à l’étape 3. (Rouvrez la fenêtre Filter (Filtre) de la couche et cliquez sur Remove Filter (Supprimer le filtre)).
- Répétez les étapes 3 à 8 pour les valeurs restantes à calculer.
Pour l’exemple des points de vente, définissez un filtre qui renvoie uniquement les entités dont la valeur de champ StoreCode est égale à 2 et définissez le champ TypeFull sur 'franchise'. Supprimez ce filtre, définissez un nouveau filtre qui renvoie uniquement les entités dont la valeur de champ StoreCode est égale à 1, puis définissez le champ TypeFull sur store 'magasin indépendant'.
- Une fois les valeurs du nouveau champ calculées, fermez Map Viewer sans enregistrer la carte.
Remplacer une valeur par une autre
Si vous devez remplacer une valeur existante par une autre (par exemple, si la façon dont vous représentez une valeur en particulier a changé ou si vous devez corriger des valeurs incorrectement saisies), vous pouvez trouver toutes les valeurs existantes d’un champ et les remplacer par une nouvelle valeur.
Attention :
Les calculs sont immédiatement enregistrés dans la couche d’entités. Si vous remplacez une valeur existante par erreur, vous devez relancer le calcul pour rétablir la valeur.
Exemple SQL
Tout comme vous renseignez un champ en fonction des valeurs d’un autre champ, vous pouvez appliquez un filtre à la couche dans Map Viewer qui renvoie uniquement les entités contenant la valeur de champ à remplacer. Définissez ensuite les champs filtrés comme étant égaux à la nouvelle valeur pour mettre à jour la valeur des champs.
Par exemple, si vous devez corriger des valeurs incorrectement saisies ou convertir un mot en abréviation, filtrez la chaîne littérale à changer et définissez le champ comme étant égal à la nouvelle valeur.
- Ajoutez la couche d’entités hébergée à mettre à jour dans Map Viewer.
Vous devez être le propriétaire de la couche ou un administrateur du portail.
- Définissez un filtre sur la couche afin que seules les entités contenant la valeur à remplacer apparaissent sur la carte.
Par exemple, si vous savez que certaines entités contiennent les valeurs Crt pour le champ StreetType, appliquez un filtre qui renvoie uniquement les entités pour lesquelles la valeur de champ StreetType est égale à Crt.
- Ouvrez la table attributaire de la couche.
- Cliquez sur le nom du champ, puis sur Calculate (Calculer).
Pour cet exemple, cliquez sur le champ StreetType et sur Calculate (Calculer).
- Saisissez la chaîne à insérer dans ce champ pour ces entités. Entourez la chaîne de guillemets simples ('').
Saisissez 'Ct' pour renseigner les champs StreetType filtrés avec l’abréviation corrigée de « Court ».
- Cliquez sur Calculate (Calculer) pour appliquer les modifications aux champs filtrés.
- Fermez Map Viewer sans enregistrer la carte.
Ajouter du temps ou soustrayez-en d'une date
Vous pouvez ajouter du temps ou en soustraire d’un champ de date ou d’une valeur littérale de date pour obtenir un champ de date mis à jour. Par exemple, vous pouvez calculer une date d'une inspection ou d'un examen à venir en ajoutant du temps à une date.
Exemples SQL
Utilisez une requête INTERVAL pour ajouter du temps ou en soustraire d’un champ de date, comme illustré dans les calculs ci-après. Le premier exemple ajoute trois jours à une date pour obtenir une nouvelle date. Le deuxième exemple soustrait trois jours d’un champ d’horodatage.<DateField> + INTERVAL '3'DAY = updated date
<DateField> - INTERVAL '3 00:00:60' DAY TO SECOND = updated date
Vous pouvez utiliser INTERVAL avec les valeurs de date et d’heure suivantes :
- DAY
- HOUR
- MINUTE
- SECOND
- DAY TO HOUR
- DAY TO MINUTE
- DAY TO SECOND
- HOUR TO MINUTE
- HOUR TO SECOND
- MINUTE TO SECOND
Calculer la différence entre deux dates
Vous pouvez calculer l'intervalle entre deux dates. Par exemple, si vous avez les dates d'installation pour les compteurs électriques et si vous avez également les dates d'inspection, vous pouvez calculer la différence entre les deux dates afin de vérifier que l'intervalle entre l'installation et l'inspection correspond parfaitement aux instructions. Le résultat du calcul est un champ de nombre plutôt qu'un champ de date.
Exemples SQL
Toute combinaison de champs de date et de littéraux de date peut être utilisée pour calculer l'intervalle entre deux dates. Le premier calcul ci-dessous utilise un champ de date, tandis que le second utilise un littéral de date. Les troisième et quatrième calculs utilisent à la fois un champ de date et un littéral de date.<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
Le résultat est un champ numérique calculé en soustrayant un champ ou une valeur littérale de date à partir d’un autre champ ou d’une autre valeur littérale de date. Le résultat numérique (en jours) peut être un nombre entier et peut également inclure une fraction, par exemple 1,5 pourrait représenter une journée et demie ou 36 heures.
Dans le cadre de l'inspection des compteurs électriques susmentionnée, par exemple, un des calculs suivants peut être utilisé pour calculer l'intervalle entre une date d'installation au 01/06/2015 et une date d'inspection au 01/10/2015. Le premier calcul utilise les champs de date, le second utilise les littéraux de date et les troisième et quatrième calculs utilisent un champ de date et un littéral de date.<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)
Considérations relatives au calcul de valeurs de champ
- Si un filtre est appliqué à votre couche dans Map Viewer, seules les valeurs des enregistrements répondant aux critères de filtre seront calculées.
- Lorsque vous écrivez des expressions SQL, Calculate Field (Calculer un champ) fonctionne uniquement avec les noms de champ, et non avec les alias de champ. La liste Champs présente tous les noms de champ disponibles pour les calculs. Vous pouvez filtrer cette liste en fonction des types de champ Chaîne, Numérique et Date.
- Si vous placez le pointeur de la souris sur un nom de champ dans la liste Champs, l'alias de champ et le type de champ apparaissent.
- Si vous cliquez sur un nom de champ dans la liste Champs, le champ est ajouté à l'expression.
- Vous ne pouvez pas calculer de valeurs de champ dans des copies de couches d’entités hébergées, des couches d’entités hébergées associées à des couches de tuiles, des couches d’entités spatio-temporelles hébergées ou des vues créées à partir de couches d’entités spatio-temporelles hébergées.
- Seules les requêtes SQL standardisées sont prises en charge lors du calcul de valeurs de champ.
- Vous ne pouvez pas utiliser la fonction MOD numérique sur les champs doubles. Définissez le champ sur une valeur entière, comme indiqué dans l’exemple.
Référence des expressions SQL standardisées (SQL-92)
Lorsque vous rédigez une expression SQL pour calculer des valeurs de champ, utilisez une requête SQL standardisée. Cette section fournit la liste des opérateurs et des fonctions SQL que vous pouvez utiliser pour réaliser des calculs SQL dans le portail ArcGIS Enterprise.
Une fois votre expression SQL créée, cliquez sur le bouton Calculate (Calculer). En cas d’erreur, un message d’erreur apparaît au bas de la boîte de dialogue. Corrigez la syntaxe de l’expression et relancez le calcul.
Opérateurs
Dans la boîte de dialogue Calculate Field (Calculer un champ), vous pouvez générer des expressions SQL simples à l’aide d’opérateurs tels que plus, moins, multiplier et diviser. Voici des exemples et des conseils d’utilisation de ces opérateurs :
- Pour multiplier toutes les valeurs dans un champ numérique nommé SAMPLE par 100.0, saisissez l'expression SAMPLE * 100.0.
- Pour mener à bien des équations plus complexes, vous pouvez utiliser les parenthèses afin de préciser l'ordre des calculs, par exemple SAMPLE * (BASELINE - 40).
- Les opérateurs mathématiques ne fonctionnent pas avec les champs de type chaîne. Vous devez utiliser les fonctions de chaîne décrites dans la section Fonctions de chaîne.
- Si vous calculez un champ de type double sur un champ de type entier, la fonction CAST peut être automatiquement ajoutée à votre expression. Par exemple, si vous calculez un champ double nommé POP sur un champ entier nommé SAMPLE, l'expression apparaît sous la forme CAST(SAMPLE AS FLOAT). Ne supprimez pas la fonction CAST. Voir la section Fonctions numériques ci-dessous pour en savoir plus sur la fonction CAST.
- Pour inclure une apostrophe dans la chaîne, utilisez deux guillemets simples pour encadrer l'apostrophe. Par exemple, 'Nightingale''s'. N'utilisez pas de guillemets doubles.
Fonctions
Outre les expressions simples qui utilisent des opérateurs, vous pouvez également utiliser des fonctions pour générer des expressions SQL. Les fonctions peuvent s'utiliser avec les noms de champ, les littéraux et d'autres fonctions. Supposons par exemple que vous deviez calculer un champ double devant être TOTALPOP divisé par POP18. Si une entité possède un POP18 égal à zéro, le calcul génère une erreur de division par zéro. Pour éviter cette situation, utilisez la fonction NULLIF décrite ci-dessous. L'expression serait TOTALPOP / NULLIF(POP18, 0).
Les fonctions acceptent les arguments. Dans les tables ci-dessous, tout argument peut être comme suit :
- Un nom de champ, tant que le type de champ correspond au type d'argument (chaîne, nombre ou date).
- Un littéral, tel que ’Sailboat’ (une chaîne entourée de guillemets simples), le nombre 5 ou une date au format MM/JJ/AAAA hh:mm:ss, avec guillemets simples d’encadrement.
- Une fonction qui renvoie une valeur du type approprié (chaîne, nombre ou date). Par exemple, FLOOR(POWER(SAMP_ERR, 0.5)) renvoie le plus grand entier qui est inférieur ou égal à la racine carrée de SAMP_ERR.
A des fins d'illustration, les exemples donnés dans la colonne de description des tables suivantes utilisent principalement des arguments littéraux. Vous pouvez remplacer un nom de champ ou une autre fonction pour ces arguments.
Fonctions de date
Plusieurs calculs peuvent être effectués sur les champs de date. Par exemple, vous pouvez ajouter ou soustraire du temps d'un champ de date ou calculer la différence entre deux champs de date.
Avant d’utiliser des champs de date, tenez compte de ces points importants.
Vous pouvez utiliser toute combinaison de champs de date et de nombre et des littéraux lors du calcul des champs de date. Lorsque vous utilisez les valeurs littérales de date, vous devez utiliser les formats de date compatibles avec SQL.
Les fonctions de date suivantes sont disponibles :
Fonction | Description |
---|---|
CURRENT_DATE | Renvoie la date actuelle en heure UTC. Ce que vous voyez dans le client dépend du client que vous utilisez. Sur le site web du portail, les dates s’affichent dans le fuseau horaire de votre navigateur. L’exemple suivant renvoie toutes les valeurs du champ inspection_date dont la date est ultérieure à la date d’aujourd’hui : inspection_date > CURRENT_DATE |
CURRENT_TIMESTAMP | Renvoie la date et l'heure UTC actuelles (heures, minutes, secondes). Ce que vous voyez dans le client dépend du client que vous utilisez. Sur le site web du portail, l’heure s’affiche dans l’heure locale de votre navigateur. Dans cet exemple, toutes les valeurs d’horodatage antérieures à la date d’aujourd’hui et à l’heure actuelle (en UTC) sont renvoyées pour le champ appointments : appointments < CURRENT_TIMESTAMP |
EXTRACT(<unit> FROM '<date>') | Renvoie une partie unique (<unit>) de la <date> spécifiée. Les valeurs <unit> possibles incluent, sans s’y limiter, l’année, le mois, le jour, l’heure et la minute. Voici quelques exemples :
|
Fonctions numériques
Fonction | Description |
---|---|
ABS(<number>) | Renvoie la valeur absolue (positive) du nombre que vous spécifiez. |
CEILING(<number>) | Renvoie le plus petit nombre entier supérieur ou égal au nombre spécifié. Exemple
|
COS(<number>) | Renvoie le cosinus trigonométrique de <number>, qui est censé être un angle en radians. |
CAST(<nombre>AS FLOAT | INT) | Convertit un nombre en un type différent. FLOAT convertit le nombre spécifié en une valeur double et INT le convertit en un nombre entier. |
FLOOR(<number>) | Renvoie le plus grand nombre entier qui est inférieur ou égal au nombre spécifié. Exemple
|
LN(<number>,<decimal_place>) | Logarithme naturel du nombre spécifié. |
LOG(<number>,<decimal_place>) | Logarithme de base 10 du nombre spécifié. |
MOD(<number>, <n>) | Renvoie le reste une fois le dividende (<nombre>) divisé par le diviseur <n>. <n> et <nombre> doivent tous les deux être de type entier. Voici quelques exemples :
|
NULLIF(<number>, <value>) | Renvoie null si le nombre spécifié est égal à la valeur spécifiée. NULLIF est fréquemment utilisé pour éviter les erreurs de division par zéro en définissant <value> sur 0. Dès qu'un calcul rencontre une valeur de champ null dans un de ses arguments, le résultat du calcul est null. Supposons par exemple que vous deviez calculer un champ double devant être TOTALPOP divisé par POP18. Si une entité possède une valeur POP18 égale à zéro, le calcul génère une erreur de division par zéro. Vous pouvez créer un filtre pour masquer les enregistrements où POP18 est égal à zéro, puis réaliser votre calcul. Il est plus rapide d'utiliser NULLIF.
|
POWER(<number> , <y>) | Renvoie la valeur du nombre spécifié élevée à la puissance indiquée (<y>). |
ROUND(<number> , <length>) | Arrondit le nombre que vous spécifiez à la longueur spécifiée. Si la <length> est un nombre positif, le nombre est arrondi à la position décimale spécifiée par la <length>. Lorsque la <length> est un nombre négatif, le <number> spécifié est arrondi à gauche de la séparation décimale. Exemples
|
SIN(<number>) | Renvoie le sinus trigonométrique du <number> spécifié, qui est censé être un angle en radians. |
TAN(<number>) | Renvoie la tangente du <number> spécifié, qui est censé être un angle en radians. |
TRUNC(<number>,<decimal_place>) | Tronque le <number> à la <decimal_place> spécifiée. Une <decimal_place> tronque à la position décimale spécifiée. Lorsque la <decimal_place> est un nombre négatif, le <number> est arrondi à gauche de la séparation décimale. Exemples
|
Fonctions de chaîne
Fonction | Description |
---|---|
CHAR_LENGTH(<string>) | Renvoie le nombre de caractères dans la chaîne spécifiée. Le résultat est un entier. Exemple
|
CONCAT(<string1>, <string2>) | Concatène deux valeurs de chaîne. Deux chaînes uniquement peuvent être fournies. Pour concaténer plus de deux chaînes, imbriquez plusieurs fonctions CONCAT consécutives, comme illustré ci-dessous. Exemples
Les valeurs Null sont converties en chaîne vide. |
POSITION(<substring> in <string>) | Renvoie la position de la première occurrence de la sous-chaîne spécifiée dans la chaîne que vous spécifiez. Si la sous-chaîne spécifiée est introuvable, le résultat est 0. Exemples
|
SUBSTRING(<string>, <start>, <length>) | Renvoie une partie d’une valeur de chaîne ; <start> est un index entier qui indique l’endroit où les caractères renvoyés débutent et <length> désigne le nombre de caractères à renvoyer. Exemples
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | Renvoie une chaîne dans laquelle tous les espaces de début ou de fin sont supprimés de la chaîne que vous spécifiez. Exemple
Notez que le second argument correspond à deux guillemets simples séparés par un espace. |
UPPER(<string>) | Renvoie une chaîne où tous les caractères sont convertis en majuscules. Exemple
|
LOWER(<string>) | Renvoie une chaîne où tous les caractères sont convertis en minuscules. Exemple
|
Vous avez un commentaire à formuler concernant cette rubrique ?