Enunciado de la práctica 4
Este ejercicio nos ofrece la oportunidad de explotar el modelo de datos incorporados directamente desde Power Pivot o desde Power Query para analizar los mismos con tablas dinámicas avanzadas, creando columnas calculadas, medidas y KPI's, mediante el uso de las funciones del lenguaje DAX.
Para la realización de esta práctica deberás descargar y descomprimir el siguiente archivo:
Tareas a realizar
Activar complemento PowerPivot
- Explorar pestaña
Explorar administrador de PowerPivot
- Pestañas (Inicio, Diseñar, Opciones avanzadas)
- Vistas (Datos, Diagrama, Área de cálculo)
- Barra de fórmulas
- Selector de campos
- Asistente para funciones
Importar datos al modelo de datos (modo 1)
(desde Power Query)
(con ruta dinámica)
- Crear un libro vacío Almacen1.xlsx y guardar en la carpeta de trabajo donde están los otros datos.
- Crear una tabla Ruta con la función CELDA("nombrearchivo")
- Nombrar la hoja como Ruta (no es imprescindible, pero ayudará a identificarla)
- Añadir la tabla al Power Query
- En el editor de consultas:
- Rastrear desagrupando datos para obtener el dato del directorio.
- Crear una consulta con los datos del libro Productos.xlsx
- Crear solo conexion y agregar al modelo de datos
- Crear una consulta con los datos del archivo de texto Movimientos.txt
- Crear solo conexion y agregar al modelo de datos
- Editar la consulta Ruta.
- El editor gráfico no deja cambiar el nombre del paso Origen, así que hay que abrir el editor avanzado.
- Reemplazar Origen por RutaOrigen
- Copiar las dos lineas entre "let" y "in"
- Editar consulta Productos con editor avanzado
- Pegar las dos líneas copiadas después de "let" y antes del paso "Origen"
- Añadir una coma al final
- Reemplazar la ruta absoluta dentro de FileContents por (Ruta & "Productos.xlsx")
- Repetir para la consulta Movimientos, pero en este caso cambiando la ruta por (Ruta & "Movimientos.txt")
- Comprobación:
- Guardar y Cerrar Almacen1.xlsx
- MOVER los archivos Productos.xlsx, Movimientos.txt y Almacen1.xlsx a otra ubicación
- Abrir Almacen1.xlsx en la nueva ubicación y comprobar que la actualización no da error de Origen de datos.
- Volver a MOVER a la carpeta de trabajo original
Importar datos al modelo de datos (modo 2)
(sin usar Power Query)
- Crear un libro vacío Almacen2.xlsx y guardar en la carpeta de trabajo donde están los otros datos.
- Abrir el administrador de Power Pivot
- importar hoja productos.xlsx (Inicio > Obtener datos externos)
- comprobar posibilidad de filtrar previa a la obtención de datos.
- importar movimientos.txt
- comprobar posibilidad de filtrar previa a la obtención de datos.
- Comprobar que al mover la carpeta de datos, las conexiones dan error.
- Resolver desde el administrador de Power Pivot en Inicio > Obtener datos externos > Conexiones existentes
Establecer relaciones entre tablas
- En el libro Almacen1.xlsx acceder al administrador de Power Pivot
- Activar la vista de diagrama
- Relacionar Productos con Movimientos por la columna IdProducto
- Cerrar el administrador de Power Pivot
Tablas dinámicas avanzadas
- En Almacen1.xlsx crear una tabla dinámica desde el modelo de datos en una nueva hoja de cálculo
- Nombrar la hoja como TD1
- Nombrar la tabla dinámica como ProductoFecha
- Ver el diseño de los campos de tabla (múltiples tablas)
- Crear la tabla a partir de:
- Filas: NombreProducto y Fecha
- Columnas: E/S
- Sumar Unidades
- Observar la jerarquía de fechas.
- Añadir segmentación de datos por NombreProducto
- Crear otra tabla dinámica en la misma hoja de cálculo
- Nombrar la tabla dinamica como FechaProducto
- Filas: Fecha, NombreProducto
- Columnas: E/S
- Suma de Unidades
- Establecer conexión de filtro para ambas tablas dinámicas. Se puede hacer tanto desde las opciones de tabla dinámica como desde las de la segmentación de datos.
- En otra hoja de nombre TD2 crear otra tabla dinámica
- Nombre tabla dinámica RecuentoDistinto
- Filas: Fecha
- Valores Movimientos->IdProducto (recuento) y Movimientos->IdProducto (recuento distinto)
Ocultar campos en la vista del cliente
- En el administrador de Power Pivot
- ocultar IdProducto de la tabla Productos (vista de datos o vista diagrama)
- ocultar IdMovimiento de la tabla Movimientos (vista de datos o vista diagrama)
- Alternar visualización de campos ocultos: Inicio > Ver > Mostrar oculto
- En Excel comprobar que ya no se muestra el campo en el diseño de tablas dinámicas
Creación de columnas calculadas
- En el administrador de Power Pivot
- Observar en la tabla Movimientos como se han calculado automáticamente dos columnas nuevas: Fecha (índice de meses) y Fecha (mes).
- En la tabla Productos crear columna StockInicial como PrecioUnidad * UnidadesEnExistencia
- Cambiar tipo datos Moneda. "Intentar" hacer lo mismo con PrecioUnidad.
La función RELATED
- En la tabla Movimientos crear columna ImporteVenta como Unidades * PrecioUnidad (de la tabla Productos). Dará error, pues hay que usar la función RELATED
- Resulta: =[Unidades]*RELATED(Productos[PrecioUnidad])
- Nombre columna: ImporteVenta, tipo Moneda.
Creación de medidas
- Examinar las medidas implícitas (generadas por la tabla dinámica):
Opciones avanzadas > Mostrar las medidas implícitas - Mostrar y ocultar Área de cálculo. Dejarla mostrada
- Situarse bajo la columna ImporteVenta, y pulsar Inicio > Cálculos > Autosuma. Automáticamente se crea una medida explícita: Suma de ImporteVenta:=sum([ImporteVenta])
- También se puede escribir directamente seleccionando cualquier celda del área de cálculo y escribiendo la misma fórmula en la barra de fórmulas.
- Ver como aparece en el diseño de la tabla dinámica
- Añadir a la tabla dinámica TD2 de las dos maneras: implícita y explícita. Igual resultado.
- En Excel, ver PowerPivot > Medidas > Administrar
- En PowerPivot, observar como se muestran las medidas en la Vista de diagrama
- en Excel crear la medida TotalStockInicial como suma de Productos[StockInicial]
(hacerlo fuera de una tabla dinámica si no queremos que el campo se incluya automáticamente en los valores de la misma)
Crear KPI's
- En una nueva hoja TD3, crear una nueva tabla dinámica que muestre:
- En filas: NombreProducto
- En valores: StockInicial
- Denominamos a la tabla dinámica: EjemploKPI
- Podríamos aplicar un formato condicional de iconos sobre la columna, pero podemos crear un KPI.
- Crear un KPI basado en la medida TotalStockInicial (se puede hacer desde la pestaña PowerPivot o en la ventana del propio administrador del mismo)
- como destino Valor absoluto: 3000 (podría ser una medida previamente creada)
- Observar el diseño de la lista de campos: Valor, Objetivo y Estado.
- Activar los tres campos y comprobar su funcionamiento en la tabla dinámica.
Introducción a las funciones DAX
(El contexto en el modelo de datos)
- Añadir a TD3 otra vez el campo StockInicial y mostrarlo como porcentaje sobre total de la columna.
- Muestra el porcentaje que representa el valor de inventario de cada producte sobre el total.
- Añadir una segmentación de datos por NombreProducto
- Al filtrar el porcentaje no muestra la realidad sino el % sobre el total de los productos filtrados.
CALCULATE
(para modificar el contexto de filtro en una medida de PowerPivot)
- En el administrador PowerPivot, tabla Productos, explorar la función CALCULATE y modificar la fórmula de StockInicial como sigue:
TotalStockInicial:=CALCULATE(sum(Productos[StockInicial]);ALL(Productos)) - Añadir una medida:
- %StockSobreTotal:=sum(Productos[StockInicial])/[TotalStockInicial]
- Quitar el KPI TotalStockInicial (ya no tiene sentido como KPI)
- Crear el KPI %StockSobreTotal refiriendo Valor absoluto como 0,05
- En la tabla dinámica de TD3, quitar los valores de TotalStockInicial y añadir los de %StockSobreTotal
- Las medidas en Power Pivot son mucho más efectivas y certeras que los campos calculados de las tablas dinámicas corrientes. Se puede comprobar calculando el IMC medio por población de la hoja contactos.xlsx (falta detallar pasos)
SUMX (y AVERAGEX, etc)
- En la tabla Movimientos tenemos una columna calculada Importe Venta . Veamos como podemos crear una medida que nos facilite el mismo cálculo sin necesidad de crear una columna calculada. ¡Será más eficiente!
- En el área de cálculo de la tabla Movimientos introducir la expresión:
Suma de ImporteVenta2:=Movimientos[Unidades]*RELATED(Productos[PrecioUnidad]).
Dará error porque le falta el contexto de fila del que sí disponía en la columna calculada. - Corregirla de la siguiente manera:
Suma de ImporteVenta2:=SUMX(Movimientos;Movimientos[Unidades]*RELATED(Productos[PrecioUnidad])) - Añadirla al diseño de la tabla dinámica de la hoja TD2 y ahora tendremos el mismo resultado calculado de tres maneras diferentes:
- Medida implícita creada al arrastrar la columna calculada al área de valores del diseño de la tabla dinámica.
- Medida explícita creada haciendo referencia a la columna calculada.
- Medida explicita a paritr de los valores base, sin necesidad de columna calculada previa.
- Para crear medidas con cálculos que se deban efectuar para cada fila, hay que usar las funciones de agregado habituales, pero acabadas en X: SUMX, AVERAGEX, MAXX, MINX, COUNTX, COUNTAX, etc.
DIVIDE
- Para evitar errores de división por cero (Power Pivor muestra 'infinito'), usar:
=DIVIDE(numerador; denominador)
FILTER
Ya vimos que las funciones SUMX, COUNTX, AVERAGEX y similares, evalúan una expresión fila a fila dentro de una tabla, como en un hipotético cálculo:
Importe:=SUMX(VENTAS;[UNIDADES]*[PRECIO])
Observemos que el primer argumento es una tabla.
Pues bien, la función FILTER precisamente nos devuelve una tabla filtrada que podemos pasar como argumento a SUMX.
FUNCIONES DE INTELIGENCIA DE TIEMPO
- Buena práctica: crear las medidas en una tabla independiente. Para crear una tabla en blanco, copiar una celda vacía de Excel y pegar en PowerPivot. Añadir ahí todas las medidas y ocultar la columna en las herramientas cliente.
- Crear tabla de calendario. ¡Imprescindible!. Esto permitirá utilizar calendarios personales con datos como: año académico, año fiscal, nombres de meses en otro idioma, etc.
- Ejemplos (hacer en la BD Neptuno):
- Fecha Primer Pedido:=FIRSTDATE(Pedidos[FechaPedido])
- Fecha Último Pedido:=LASTDATE(Pedidos[FechaPedido])
- Fin de Año:=ENDOFYEAR(Pedidos[FechaPedido];"08-31")
- Fin de Mes:=ENDOFMONTH(Pedidos[FechaPedido])
- Importe Venta:=sumx('Detalles de pedidos';[Cantidad]*[PrecioUnidad])
- Importe Venta Año Anterior:=CALCULATE([Importe Venta];SAMEPERIODLASTYEAR(Calendario[Date]))
- Total Ventas Año Anterior:=calculate([Importe Venta];PREVIOUSYEAR(Calendario[Date];"08-31"))
- Variacion:=[Importe Venta]-[Importe Venta Año Anterior]
- % incremento:=divide([Variacion];[Importe Venta Año Anterior])
- Acumulado Año Actual:=CALCULATE([Importe Venta];DATESYTD(Calendario[Date];"08-31"))
- Acumulado Año Anterior:=calculate([Acumulado Año Actual];SAMEPERIODLASTYEAR(Calendario[Date]))