Introduction
Toutes les formules dans ActivityInfo sont évaluées dans un contexte.
Lorsque vous ajoutez un champ calculé dans ActivityInfo, les formules sont évaluées dans le contexte de l'enregistrement. Cela signifie que la formule est évaluée, ou calculée, pour chaque enregistrement du formulaire.
Par exemple, si vous avez un formulaire avec deux champs de quantité Filles et Garçons, vous pouvez ajouter un champ calculé « Total » qui a la formule Filles + Garçons.
Dans ce cas, la formule est évaluée pour chaque enregistrement.
Nom | Filles | Garçons | Filles + Garçons | Filles/Garçons |
---|---|---|---|---|
Haji Sadig | 40 | 35 | 75 | 1,142857 |
Kirby Elementary | 10 | 50 | 60 | 0,200000 |
Pour les mesures calculées, cependant, nous commençons sans contexte. Pour cette raison, nous devons fournir explicitement à la fois l'identifiant du formulaire et l'identifiant du champ que nous voulons référencer. Par exemple, si nous voulions le nombre total de garçons, nous pourrions écrire :
SUMX(c21geplcowbxdn2, Boys)
Cela donne le même résultat que de faire glisser le champ Garçons dans le volet Mesures du concepteur de tableau croisé dynamique et de sélectionner l'agrégation SUM.
Si nous voulons trouver le ratio du nombre de filles par rapport au nombre de garçons, nous pouvons écrire :
SUMX(c21geplcowbxdn2, Girls) / SUMX(c21geplcowbxdn2, Boys)
La formule ci-dessus additionne d'abord le nombre de filles, puis le nombre de garçons, et enfin divise les deux sommes. Pour le tableau ci-dessus, cela nous donne 50 / 85 = 0,59
Notez que ceci est différent du champ calculé dans le tableau ci-dessus : là, nous divisons d'abord les filles par les garçons. Si vous ajoutez ce champ calculé au tableau croisé dynamique, la somme ou la moyenne des ratios sera calculée, et non le ratio des sommes.
Contexte de ligne
Dans les exemples ci-dessus, nous avons agrégé les valeurs d'un seul champ. Dans d'autres cas, vous pourriez vouloir additionner ou faire la moyenne d'un calcul sur chaque ligne. Pour agréger un calcul d'un ou plusieurs champs plutôt qu'un seul champ, vous pouvez utiliser la fonction AVERAGEX :
AVERAGEX(c21geplcowbxdn2, Boys + Girls)
Dans la formule ci-dessus, l'utilisation de la fonction AVERAGEX modifie le contexte, et l'expression Boys + Girls
est calculée pour chaque enregistrement, puis ensuite moyennée, tout comme un champ calculé.
En fait, la formule avec AVERAGEX est équivalente à la suivante :
AVERAGEX(c21geplcowbxdn2, Total)
Où Total
est un champ calculé défini dans le formulaire Écoles avec la formule Boys + Girls
.
Contexte de filtre
Bien sûr, dans la plupart des cas, nous ne nous intéressons pas seulement à un seul nombre. Dans notre exemple des écoles ci-dessus, nous pourrions vouloir voir le ratio de genre par province, ou par type d'écoles. Si votre tableau des écoles inclut un champ pour la Province et le Type, alors vous pourriez vouloir créer une matrice avec le ratio de genre par Province et Type :
Publique | Privée | |
---|---|---|
Nord | 1,2 | 0,8 |
Sud | 1,1 | 0,7 |
Dans ce cas, la mesure calculée est évaluée quatre fois, une fois pour chaque cellule. Pour chaque cellule, nous réévaluons la formule avec un nouveau contexte de filtre.
Lorsque vous utilisez des tableaux croisés dynamiques, vous pouvez utiliser l'interface utilisateur pour glisser-déposer des champs comme dimensions de ligne et de colonne, ce qui crée le contexte de filtre implicite. Cependant, vous pouvez également modifier le contexte de filtre en utilisant la fonction CALCULATE(). Les valeurs dans le tableau croisé dynamique ci-dessus seraient les mêmes que les quatre formules suivantes :
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "North",
schools.Type == "Private")
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "North",
schools.Type == "Public")
CALCULATE( SUMX(schools, Girls) / SUM(schools, Boys),
schools.Province == "South",
schools.Type == "Private")
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "South",
schools.Type == "Public")
Vous pouvez également utiliser la fonction CALCULATE()
pour modifier le contexte de filtre qui a déjà été appliqué, soit par une expression CALCULATE englobante, soit par l'interface utilisateur.
Par exemple, si nous voulons trouver le pourcentage de notre total d'étudiantes dans chaque type et emplacement d'école, nous pouvons utiliser la fonction ALL pour effacer tous les filtres hérités.
Vous pourriez écrire la mesure calculée :
SUMX(schools, Girls) / CALCULATE(SUMX(schools, Girls), ALL(schools))
Maintenant, tous les filtres appliqués dans notre matrice s'appliqueront au numérateur, mais seront effacés par le dénominateur, ce qui donnera un tableau comme celui-ci :
Publique | Privée | |
---|---|---|
Nord | 40% | 20% |
Sud | 25% | 15% |
Le tableau ci-dessus nous montre que 40 % des étudiantes se trouvent dans des écoles publiques du Nord, tandis que seulement 15 % des filles sont dans des écoles privées du Sud.
Calcul de tableaux
Toutes les formules ci-dessus calculent un seul nombre. Dans certains cas, cependant, il est nécessaire de travailler avec des tableaux entiers.
Par exemple, vous pourriez vouloir savoir combien de régions ont une majorité d'étudiantes.
Dans ce cas, nous pouvons calculer un nouveau tableau à partir de notre formulaire Écoles qui additionne les garçons et les filles pour chaque Région.
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys))
Le résultat de la fonction SUMMARIZE() n'est pas un seul nombre, mais un tableau entier.
Cependant, nous devons encore calculer un seul nombre à partir de ce tableau. Nous pouvons le faire en combinant la fonction SUMMARIZE avec la fonction SUMX :
SUMX(
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)),
GT > BT)
Le résultat de cette expression est 1.
À mesure que les transformations de tableaux deviennent plus complexes, les expressions fortement imbriquées peuvent devenir difficiles à lire. Pour rendre vos formules plus lisibles, vous pouvez utiliser l'opérateur pipe. L'opérateur pipe prend le résultat d'une expression et le transmet comme premier argument à un autre appel de fonction. Par exemple, vous pouvez réécrire la formule ci-dessus comme suit :
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)) |>
SUMX(GT > BT)
Cette formule nous donne le nombre de régions où la population étudiante est majoritairement féminine.
Formulaires et Tableaux
Dans l'introduction ci-dessus, nous avons parlé de « tableaux » et de « colonnes ». Cependant, vous êtes peut-être plus familier avec les « formulaires » d'ActivityInfo.
Bien que tous les « formulaires » d'ActivityInfo soient des « tableaux » aux fins des mesures calculées, tous les tableaux ne sont pas des formulaires.
Les formulaires ActivityInfo ont de nombreuses propriétés liées à la collecte de données, telles que les règles de validation et de pertinence, en plus des champs calculés dont les valeurs sont dérivées d'autres champs. Les formulaires ont également des « champs » comme des en-têtes de section et des sous-formulaires qui aident à organiser la saisie des données, mais qui n'ont pas de valeur réelle. Les formulaires ActivityInfo sont peuplés par des enregistrements, qui ont toujours un identifiant interne (_id
) et un historique complet des modifications.
Dans le contexte des mesures calculées, un formulaire ActivityInfo est traité comme un tableau, ses enregistrements deviennent des lignes et ses champs deviennent des colonnes.