En las pasadas entregas (parte 1parte 2) de esta serie, Query Editor fue la herramienta de Power BI que ocupó por completo nuestra atención, mostrándonos la forma de construir las tablas de un modelo a partir de las funcionalidades de extracción, transformación y carga (ETL) que posee.

Una vez concluida la creación de las tablas, en el presente artículo continuaremos nuestra tarea de desarrollo del modelo de datos, utilizando en esta ocasión los diseñadores de Power BI más directamente relacionados con el motor de Power Pivot: Data y Relationships, encargados de la elaboración de medidas, jerarquías y relaciones entre las tablas del modelo. También pasaremos de forma breve por el diseñador Report, tan solo para comprobar los valores de las medidas generadas en la tabla de datos, puesto que un próximo artículo estará dedicado en exclusiva a dicho diseñador.

 

Diseñador Data. Introducción

Finalizado el trabajo de preparación de tablas desde el Query Editor nos situaremos en el diseñador Data, que entre otras operaciones, utilizaremos para crear las medidas del modelo mediante expresiones escritas en DAX, el lenguaje de consultas del motor de Power Pivot integrado en Power BI, así como para formatear los valores de las columnas y crear jerarquías en las tablas.

La siguiente figura muestra una visión general de este diseñador, con una zona central dedicada a la visualización de la tabla seleccionada en el panel Fields situado a la derecha, y las principales opciones de trabajo en la pestaña de menú Modeling.

 

Diseñador Data. Medida de recuento de población

Como ya hemos indicado, desde este diseñador crearemos la medida principal del modelo, a la que daremos el nombre de PoblacionTotal (para simplificar, evitaremos el uso de tilde y otros caracteres especiales en los nombres de las medidas), y cuyo objetivo consistirá en hacer un recuento de los individuos que componen el Padrón de habitantes que estamos analizando.

Para ello seleccionaremos la tabla PoblacionPadron, y haremos clic en la opción de menú New Measure, del grupo Calculations, pestaña Modeling; que nos posicionará en la barra de fórmulas de la tabla, donde escribiremos la siguiente expresión DAX.


PoblacionTotal = COUNTROWS(PoblacionPadron)

 

 

Como ya habremos adivinado, en la anterior expresión, la función COUNTROWS se encarga de contar las filas de la tabla PoblacionPadron que pasamos como parámetro, para obtener la cifra total de habitantes.

Seguidamente daremos formato a la medida añadiendo un carácter separador de millar, que seleccionaremos en la pestaña de menú Modeling, grupo Formatting, opción Thousands separator.

 

Diseñador Report. Operaciones elementales en el uso de controles

Para comprobar el funcionamiento de la medida que acabamos de crear nos desplazaremos al diseñador Report, cuya finalidad consiste en construir una representación gráfica de la información existente en el modelo de datos, a través de los objetos visuales contenidos en su paleta de controles.

 

Como norma general, los pasos empleados para añadir al diseñador Report un control con un mínimo de funcionalidad son básicamente los siguientes:

(1) Seleccionar el control en la paleta del panel Visualizations.

(2) La anterior acción sitúa una copia del control en el área de diseño.

(3) Seleccionar entre los campos del panel Fields la medida(s) que queremos representar gráficamente, y situarla en las propiedades de la sección Fields del control.

(4) Dependiendo de la potencia y riqueza visual del control, utilizar alguna de las propiedades de la sección Format para mejorar su apariencia.

 

Diseñador Report. Visualización de resultados

En este primer acercamiento al diseñador de informes de Power BI no vamos a crear una presentación muy compleja ni elaborada, tan solo necesitamos verificar que el recuento de la tabla de datos es correcto a través de un control visual.

Para la demostración utilizaremos el control Card, cuyo funcionamiento consiste en una sencilla visualización del valor de una medida.

 

Una vez seleccionado el control en el panel Visualizations, haremos clic en la tabla PoblacionPadron del panel Fields para desplegar sus elementos (campos, medidas, jerarquías) y marcar la casilla de la medida PoblacionTotal, la cual pasará automáticamente a la propiedad Fields del control, perteneciente a la sección del mismo nombre, dentro del panel Visualizations. Como resultado, el control mostrará el valor de la medida utilizando un formato numérico abreviado.

 

Para mostrar el valor de la medida con el formato de número completo, haremos clic en la sección Format del panel Visualizations, y dentro del apartado Data label, cambiaremos el valor de la propiedad Display units de Auto a None.

 

Prueba de control de la medida

Para asegurarnos de que la cifra del número de individuos es correcta, vamos a volver al Query Editor haciendo clic en la opción de menú Edit Queries, grupo External data, pestaña Home. Una vez allí, en la tabla PoblacionPadron, seleccionaremos la opción de menú Count Rows, del grupo Table, pestaña Transform, que también realizará un recuento de los registros de la tabla, devolviendo el mismo valor (sin formatear) que la medida utilizada en el diseñador Report.

 

Terminada esta comprobación, borraremos la operación de recuento de la lista Applied Steps, en el panel Query Settings, y cerraremos la ventana del Query Editor, aplicando los cambios para volver al diseñador de informes.

 

Las tablas necesitan relaciones

El hecho de que la anterior prueba rápida de verificación del valor de la medida haya dado el valor esperado, no significa, en absoluto, que el trabajo de preparación del modelo haya concluido. Como evidencia de ello, si añadimos al diseñador del panel Report un control, en el que además de la medida PoblacionTotal, intervengan campos de cualquier otra tabla del modelo, los resultados no serán los deseados.

Como ejemplo, vamos a agregar una nueva página al archivo pbix con el que estamos trabajando, haciendo clic en el botón New Page situado en la parte inferior de la ventana de Power BI. En esta página añadiremos un control de tipo Stacked column chart, para medir la cantidad de habitantes por tramos de edad, mostrando la representación de cada tramo en una columna. Una vez colocado el control en la zona de diseño, seleccionaremos la medida PoblacionTotal, que quedará asignada a la propiedad Value de la sección Fields. En la tabla Edad elegiremos el campo EdadDecenal, que se asignará a la propiedad Axis; como resultado, el control debería mostrar las columnas correspondientes a cada rango de edad con tamaños diferentes, reflejando así la cantidad de personas existentes por rango.

 

Sin embargo este no es el comportamiento obtenido, ya que el control muestra todas las columnas con el mismo tamaño, sin reflejar correctamente la población por cada grupo de edad, lo cual es síntoma de algún tipo de carencia en los apartados de configuración del modelo.

El origen de este problema radica en la falta de relaciones entre la tabla de datos y las de búsqueda del modelo, puesto que sin una relación entre las tablas PoblacionPadron y Edad, el motor de Power Pivot desconoce la cantidad de población que debe asignar a cada grupo de edad, y por consiguiente, el control no se dibuja correctamente.

 

Diseñador Relationships. Creación de relaciones

Para solucionar el problema planteado en el anterior apartado nos situaremos en el diseñador Relationships, que como indica su nombre, tiene la finalidad de establecer las relaciones entre ambos tipos de tabla del modelo: datos y búsqueda, a fin de que la representación visual de los datos desde un informe de Power BI, refleje correctamente la información que se desea transmitir al usuario.

Dentro del área de trabajo de este diseñador vemos un esquema de las tablas que componen el modelo de datos. Si debido a su cantidad no estuvieran todas a la vista, podemos ajustar su tamaño haciendo clic en el botón Fit to screen o los controles Zoom, situados en la parte inferior.

 

También podemos arrastrar las tablas para situarlas más adecuadamente, conforme a las relaciones que necesitemos crear.

A continuación procederemos a crear la relación entre PoblacionPadron y Edad, para lo cual seleccionaremos la columna EdadID en la tabla PoblacionPadron, y la arrastraremos hasta la columna del mismo nombre en la tabla Edad, quedando establecida la relación con una cardinalidad de muchos a uno, como vemos en la siguiente figura.

 

Si hacemos doble clic en la línea que representa la relación, se abrirá la ventana Edit relationship, mediante la que podremos ver sus características.

 

Al retornar al diseñador Report, el control Stacked column chart reflejará ahora la información adecuadamente; si bien el orden de los rangos de edad no será totalmente correcto, lo cual solucionaremos en la próxima entrega dedicada al desarrollo de informes con el diseñador Report.

 

La siguiente lista muestra el resto de relaciones que deberemos establecer entre la tabla PoblacionPadron y las demás tablas, para que los controles que incorporemos a nuestros informes, cuadros de mando, etc., muestren adecuadamente los cálculos de las métricas del modelo.

 

Aplicadas estas relaciones, el diseñador se mostraría como vemos en la siguiente figura.

 

De forma alternativa, también podemos gestionar las relaciones del modelo desde la ventana Manage Relationships, accesible desde la opción de menú del mismo nombre, situada en la pestaña Home, grupo Relationships.

 

Diseñador Data. Creación de jerarquías

Una jerarquía es un elemento, que una vez definido en una tabla del modelo, nos va a permitir analizar su información a través de niveles, que representan diversas categorías de datos relacionadas dentro de dicha tabla. Como ejemplo, vamos a crear una jerarquía basada en la tabla MunicipioPaisNacimiento, que estará compuesta por tres niveles: país, provincia y municipio.

En primer lugar nos situaremos en el diseñador Data, y en el panel Fields desplegaremos la lista de campos de la tabla MunicipioPaisNacimiento. A continuación haremos clic derecho en el campo PaisNacimiento, eligiendo la opción New hierarchy.

 

Esta acción creará una jerarquía con el nombre predeterminado PaisNacimiento Hierarchy. Como siguiente paso, arrastraremos sucesivamente los campos ProvinciaNacimiento y MunicipioNacimiento hasta soltarlos dentro del nombre de la jerarquía, quedando ahora compuesta por los tres niveles anteriormente mencionados.

 

Para terminar cambiaremos el nombre, tanto de la jerarquía (PaisProvinciaMunicipio) como de sus niveles (Pais, Provincia y Municipio), haciendo clic derecho en cada elemento y eligiendo la opción Rename.

 

Indicadores demográficos de estructura

Además de la medida que realiza el recuento de individuos, el análisis demográfico emplea una serie de indicadores adicionales, cuya finalidad consiste en reflejar la distribución de la población mediante las variables de sexo y edad; son los llamados Indicadores de Estructura Demográfica.

Partiendo de tres grandes grupos de edad, con los intervalos 0-14, 15-64 y 65+ (65 y más años), los indicadores de estructura miden aspectos tales como la proporción de un determinado grupo sobre el total de la población; la relación de las agrupaciones de mayores o jóvenes con respecto a los adultos; y la razón entre mayores y jóvenes.

Los procesos de cambio demográfico experimentados en determinadas poblaciones (baja fecundidad, alta esperanza de vida, etc.) han provocado que, además de la agrupación tradicional indicada en el anterior párrafo, algunos organismos como Eurostat utilicen una segunda agrupación basada en los intervalos 0-19, 20-59 y 60+ (60 y más años). La siguiente figura muestra estos dos tipos de agrupación etaria.

 

Para los ejemplos mostrados en el presente artículo utilizaremos la primera de las agrupaciones mencionadas.

Como base documental para la creación de estos indicadores (medidas) hemos utilizado la ayuda de la aplicación Epidat, herramienta de análisis epidemiológico y estadístico, disponible en el sitio web de la Consejería de Sanidad de la Xunta de Galicia. En los próximos apartados se describen brevemente las medidas a crear relacionadas con estos indicadores, así como las expresiones DAX empleadas en su construcción.

 

Indicadores demográficos de estructura. Cantidad de población por grupo de edad

Comenzaremos por la creación de las tres medidas que representan el número de habitantes por cada grupo de edad (jóvenes, adultos y mayores). Al igual que ya hicimos anteriormente con la medida PoblacionTotal, volveremos a situarnos en la tabla PoblacionPadron del panel Fields, y seleccionaremos la opción de menú New Measure, para crear las medidas PoblacionJovenes, PoblacionAdultos y PoblacionMayores, cuyo código fuente vemos a continuación.


PoblacionJovenes = CALCULATE(
[PoblacionTotal],
Edad[EdadID] >= 0 && Edad[EdadID] <= 14
)

 

PoblacionAdultos = CALCULATE(
[PoblacionTotal],
Edad[EdadID] >= 15 && Edad[EdadID] <= 64
)

 

PoblacionMayores = CALCULATE(
[PoblacionTotal],
Edad[EdadID] >= 65
)

 

La función CALCULATE, empleada para la creación de estas medidas, evalúa la expresión pasada como primer parámetro (medida PoblacionTotal de la tabla PoblacionPadron) modificando su contexto de evaluación original mediante el uso de expresiones de filtro (selección de intervalos sobre la columna EdadID de la tabla Edad con operadores DAX) situadas en el segundo y sucesivos parámetros.

Siguiendo la recomendación de la hoja de referencia disponible en PowerPivotPro, al escribir el código de una medida dentro de la cual tengamos que hacer referencia a otra medida creada con anterioridad, para dicha medida ya existente solo usaremos su nombre sin anteponer el nombre de la tabla.

Para comprobar los valores que acabamos de crear volveremos al diseñador Report, y en una nueva página agregaremos un control Multi-row card, que nos facilitará la visualización simultánea de varias medidas al incluirlas en su propiedad Fields.

 

Indicadores demográficos de estructura. Proporciones sobre el total de población

Este tipo de indicador calcula el porcentaje que representa cada grupo de edad (jóvenes, adultos y mayores) con respecto al total de la población; por lo que tendremos que crear tres medidas, una por cada grupo. Para su obtención emplearemos la función DIVIDE, como vemos en el siguiente bloque de código, donde la medida del grupo de población correspondiente actúa como numerador, y la población total como denominador.


ProporcionJovenes = DIVIDE([PoblacionJovenes], [PoblacionTotal])

 

ProporcionAdultos = DIVIDE([PoblacionAdultos], [PoblacionTotal])

 

ProporcionMayores = DIVIDE([PoblacionMayores], [PoblacionTotal])

 

Adicionalmente, formatearemos cada una de estas medidas como porcentaje con 2 decimales.

Y utilizaremos igualmente un control Multi-row card para visualizar sus valores.

 

Indicadores demográficos de estructura. Índices de dependencia

Se trata de indicadores que establecen una relación entre los grupos de población joven y/o mayor (numerador) con respecto al grupo de adultos (denominador), por lo que utilizaremos las siguientes expresiones para calcularlos.


IndiceDependenciaJovenes = DIVIDE([PoblacionJovenes], [PoblacionAdultos])

 

IndiceDependenciaMayores = DIVIDE([PoblacionMayores], [PoblacionAdultos])

 

 

Indicadores demográficos de estructura. Índices de envejecimiento

Y finalizamos el cálculo de indicadores con esta medida, que permite observar el proceso de envejecimiento de la población a través de la razón entre la población de mayores y jóvenes utilizando la siguiente fórmula.


IndiceEnvejecimiento = DIVIDE([PoblacionMayores], [PoblacionJovenes])

 

 

Conclusiones

Y con la creación de los indicadores demográficos finalizamos el presente artículo, en el que hemos mostrado el papel que desempeñan los diseñadores Data y Relationships en el proceso de desarrollo de un sistema de información con Power BI, concretamente en el apartado de creación del modelo de datos, mediante la elaboración de las métricas, relaciones y jerarquías, que en un próximo artículo utilizaremos como elementos de análisis durante la creación de informes desde el diseñador Report.

 

Agradecimientos

Quisiera expresar mi agradecimiento a María Dolores Esteban Vasallo y Ricard Gènova Maleras, integrantes del Servicio de Informes de Salud y Estudios (Subdirección de Epidemiología, Dirección General de Salud Pública, Consejería de Sanidad. CM) por la ayuda prestada en el diseño de las métricas del modelo de datos, la selección de la fuente de datos utilizada como base para la elaboración del presente artículo, así como una inestimable tarea de revisión del mismo.

 

Enlaces de Interés

Blog de Power BI: https://powerbi.microsoft.com/es-es/blog/tag/power-query/

Power Query: https://support.office.com/en-us/article/Introduction-to-Microsoft-Power-Query-for-Excel-6E92E2F4-2079-4E1F-BAD5-89F6269CD605

PowerPivotPro (Rob Collie): https://powerpivotpro.com/

Excelguru (Ken Puls): https://www.excelguru.ca/blog/

DataChant: https://datachant.com/

Excelerator BI: https://exceleratorbi.com.au/exceleratorblog/