Introducción
Todas las fórmulas en ActivityInfo se evalúan en un contexto.
Al añadir un campo calculado en ActivityInfo, las fórmulas se evalúan en el contexto del registro. Esto significa que la fórmula se evalúa, o calcula, para cada registro en el formulario.
Por ejemplo, si tiene un formulario con dos campos de cantidad, Niñas y Niños, puede añadir un campo calculado "Total" que tenga la fórmula Niñas + Niños.
En este caso, la fórmula se evalúa para cada registro.
Nombre | Niñas | Niños | Niñas + Niños | Niñas/Niños |
---|---|---|---|---|
Haji Sadig | 40 | 35 | 75 | 1.142857 |
Kirby Elementary | 10 | 50 | 60 | 0.200000 |
Sin embargo, para las medidas calculadas, empezamos sin un contexto. Por esta razón, tenemos que proporcionar explícitamente tanto el id del formulario como el id del campo al que queremos hacer referencia. Por ejemplo, si quisiéramos el número total de niños, podríamos escribir:
SUMX(c21geplcowbxdn2, Boys)
Esto da el mismo resultado que arrastrar el campo Niños al panel de Medidas en el diseñador de Tablas Dinámicas y seleccionar la agregación SUM.
Si queremos encontrar la proporción del número de niñas con respecto al de niños, podemos escribir:
SUMX(c21geplcowbxdn2, Girls) / SUMX(c21geplcowbxdn2, Boys)
La fórmula anterior primero suma el número de niñas, luego suma el número de niños y finalmente divide las dos sumas. Para la tabla anterior, esto nos da 50 / 85 = 0.59
Tenga en cuenta que esto es diferente del campo calculado en la tabla anterior: allí primero dividimos las niñas por los niños. Si añade este campo calculado a la tabla dinámica, se calculará la suma o el promedio de las proporciones, no la proporción de las sumas.
Contexto de fila
En los ejemplos anteriores, agregamos los valores de un único campo. En otros casos, es posible que desee sumar o promediar un cálculo en cada fila. Para agregar un cálculo de uno o más campos en lugar de un único campo, puede utilizar la función AVERAGEX:
AVERAGEX(c21geplcowbxdn2, Boys + Girls)
En la fórmula anterior, el uso de la función AVERAGEX cambia el contexto, y la expresión Boys + Girls
se calcula para cada registro, y luego se promedia, al igual que un campo calculado.
De hecho, la fórmula con AVERAGEX es equivalente a la siguiente:
AVERAGEX(c21geplcowbxdn2, Total)
Donde Total
es un campo calculado definido en el formulario Escuelas con la fórmula Boys + Girls
.
Contexto de filtro
Por supuesto, en la mayoría de los casos no nos interesa un único número. En nuestro ejemplo de las escuelas, podríamos querer ver la proporción de género por provincia o por tipo de escuela. Si su tabla de escuelas incluye un campo para Provincia y Tipo, entonces podría querer crear una matriz con la proporción de género por Provincia y Tipo:
Pública | Privada | |
---|---|---|
Norte | 1.2 | 0.8 |
Sur | 1.1 | 0.7 |
En este caso, la medida calculada se evalúa cuatro veces, una por cada celda. Para cada celda, reevaluamos la fórmula con un nuevo contexto de filtro.
Al utilizar tablas dinámicas, puede usar la interfaz de usuario para arrastrar y soltar campos como dimensiones de fila y columna, lo que crea el contexto de filtro implícito. Sin embargo, también puede cambiar el contexto de filtro utilizando la función CALCULATE(). Los valores en la tabla dinámica anterior serían los mismos que los de las siguientes cuatro fórmulas:
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")
También puede utilizar la función CALCULATE()
para cambiar el contexto de filtro que ya se ha aplicado, ya sea por una expresión CALCULATE que lo englobe o por la interfaz de usuario.
Por ejemplo, si queremos encontrar el porcentaje del total de nuestras estudiantes en cada tipo y ubicación de escuela, podemos usar la función ALL para eliminar cualquier filtro heredado.
Podría escribir la medida calculada:
SUMX(schools, Girls) / CALCULATE(SUMX(schools, Girls), ALL(schools))
Ahora, cualquier filtro aplicado en nuestra matriz se aplicará al numerador, pero será eliminado por el denominador, produciendo una tabla como:
Pública | Privada | |
---|---|---|
Norte | 40% | 20% |
Sur | 25% | 15% |
La tabla anterior nos muestra que el 40% de las estudiantes se encuentran en escuelas Públicas en el Norte, mientras que solo el 15% de las niñas están en escuelas privadas en el Sur.
Calcular tablas
Todas las fórmulas anteriores calculan un único número. En algunos casos, sin embargo, es necesario trabajar con tablas completas.
Por ejemplo, es posible que desee saber cuántas regiones tienen una mayoría de estudiantes de sexo femenino.
En este caso, podemos calcular una nueva tabla a partir de nuestro formulario Escuelas que sume los niños y las niñas en cada Región.
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys))
El resultado de la función SUMMARIZE() no es un único número, sino una tabla entera.
Sin embargo, todavía tenemos que calcular un único número a partir de esta tabla. Podemos hacerlo combinando la función SUMMARIZE con la función SUMX:
SUMX(
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)),
GT > BT)
El resultado de esta expresión es 1.
A medida que las transformaciones de tablas se vuelven más complejas, las expresiones muy anidadas pueden ser difíciles de leer. Para que sus fórmulas sean más legibles, puede utilizar el operador de tubería (pipe). El operador de tubería toma el resultado de una expresión y lo pasa como primer argumento a otra llamada de función. Por ejemplo, puede reescribir la fórmula anterior como:
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)) |>
SUMX(GT > BT)
Esta fórmula nos da el número de regiones con poblaciones estudiantiles mayoritariamente femeninas.
Formularios y Tablas
En la introducción anterior, nos hemos referido a "tablas" y "columnas". Sin embargo, es posible que esté más familiarizado con los "formularios" de ActivityInfo.
Aunque todos los "formularios" de ActivityInfo son "tablas" a efectos de las medidas calculadas, no todas las tablas son formularios.
Los formularios de ActivityInfo tienen muchas propiedades relacionadas con la recopilación de datos, como reglas de validación y relevancia, además de campos calculados cuyos valores se derivan de otros campos. Los formularios también tienen "campos" como encabezados de sección y subformularios que ayudan a organizar la entrada de datos, pero que en realidad no tienen un valor. Los formularios de ActivityInfo se rellenan con registros, que siempre tienen un identificador interno (_id
) y un historial completo de cambios.
En el contexto de las medidas calculadas, un Formulario de ActivityInfo se trata como una tabla, sus registros se convierten en filas y sus campos se convierten en columnas.