# data[].attributes.body
Las tablas de hechos son: Ventas y Presupuestos.

# data[].attributes.body
Define su Granularidad (máximo nivel de detalle).

Define sus Claves Externas.

Define sus Medidas.

# data[].attributes.headline
2. Diseña cada una de las Tablas de Dimensiones

# data[].attributes.subject
2. Diseña cada una de las Tablas de Dimensiones

# data[].attributes.body
Define la Clave Principal.

Define una columna por cada una de las características a analizar (atributos).

# data[].attributes.headline
¿Cuál es el importe vendido de la categoría “Bebidas” en “Aguilas” en “mayo de 2025”?

# data[].attributes.subject
¿Cuál es el importe vendido de la categoría “Bebidas” en “Aguilas” en “mayo de 2025”?

# data[].attributes.body
Importe vendido, se obtiene de la Tabla de Hechos de ventas, sumando los valores de la columna “ImporteVenta”.

Siempre obtenemos lo que queremos medir de los hechos ocurridos.

Ahora segmentamos y filtramos ese “ImporteVendido”, sólo para la categoría “Bebidas” (está en la dimensión “Producto”), sólo en “Aguilas” (está en la dimensión “Tienda”) y en “mayo de 2025” (está en la dimensión “Fecha”)

# data[].attributes.body
La empresa tiene instalada una aplicación de TPV (Terminal Punto de Venta) donde están recopilando todas las ventas que se están produciendo

La empresa está muy limitada a la hora de saber cómo van sus ventas, más allá de conocer la recaudación diaria.

Necesitan una solución analítica que responda a todas esas preguntas que se hacen en el día a día, ya que poder responderlas les permitiría tomar mejores decisiones.

# data[].attributes.body
“Abrir Power BI y comenzar a cargar datos sin haber diseñado previamente el modelo es como subirte a tu vehículo y comenzar a conducir sin saber a qué destino vas”

# data[].attributes.body
Las bases y metodología son fundamentales para crear soluciones de BI robustas y sacar el máximo rendimiento a la herramienta.

# data[].attributes.body
Power BI es una solución de Business Intelligence & Analytics.

# data[].attributes.body
Despues de diseñar el modelo de datos, por cada tabla, identifica y anota todos los pasos que debes dar para convertir tus datos de origen en información almacenada en un Modelo en Estrella.

Una vez tengas todo esto, abre Power Query y hazlo realidad.

# data[].attributes.body
“Una persona que para desarrollar con Power BI, piensa primero en cómo hace las cosas en Excel y las aplica con Power BI, no trabajará nunca bien con Power BI. La mejor forma de trabajar con Power BI es aplicar los fundamentos, técnicas y métodos mejores para Power BI, sin hacer una traducción del mundo Excel al mundo Power BI.”

# data[].attributes.body
Es una solución de creación de informes que ofrece preparación de datos, visualización de datos, distribución y administración, a través de herramientas de desarrollo y una plataforma en línea.

Power BI puede escalar desde informes simples mediante un único origen de datos, hasta informes que requieren modelos de datos complejos.

Power BI permite crear informes visualmente impresionantes e interactivos para la toma de decisiones para proyectos de grupo, divisiones u organizaciones enteras.

# data[].attributes.body
Power BI Desktop (aplicación de escritorio) - Herramienta de desarrollo para los analistas de datos y otros creadores de informes.

Servicio Power BI (plataforma en línea) - Permite organizar, administrar y distribuir los informes y otros elementos de Power BI.

Power BI Mobile (aplicación móvil multiplataforma) - Permite a los consumidores ver informes en un formato optimizado para dispositivos móviles.

# data[].attributes.body
La licencia Power BI Free le permite a un usuario crear sus modelos en Power BI Desktop con todas las características de la licencia profesional, programar la actualización de datos mediante la puerta de enlace y presentar sus informes y paneles accediendo a la cuenta en el servicio online de Power BI.

Diferencias con licencia Pro:

La versión gratis no permite compartir modelos ni recibir modelos compartidos de otros usuarios.

La licencia Free tiene capacidad de almacenamiento de 1GB Vs. 10GB de la versión Pro.

No permite acceder a un grupo ni a una aplicación en el servicio online.

# data[].attributes.body
Power BI Desktop es el corazón de Power BI, es donde se realizan las tareas más importantes de un modelo como son la preparación de un modelo estrella o copo de nieve el cual permite obtener el máximo beneficio para la creación de informes consistentes así como facilitar el uso del lenguaje DAX (Data Analysis Expression).

# data[].attributes.body
Es la relación que existe entre los campos que usaremos como filtros, llamadas en el modelo dimensiones, incluida la dimensión de tiempo y los eventos o tablas de hechos que contienen las filas con las columnas de los valores y los campos que se relacionan con las dimensiones.

# data[].attributes.body
Una vez creado el modelo, se deben preparar los cálculos en Dax para utilizarlos en los informes, así como ocultar las celdas que no vamos a utilizar en el lienzo o zona de creación de informes.

# data[].attributes.body
Dar formato a las visualizaciones.

Crear tablas directamente en Power BI Desktop para crear nuevas columnas o medidas calculadas.

Crear roles de seguridad.

Crear columnas adicionales mediante grupos.

Crear parámetros.

Crear botones.

Hacer visualizaciones desde preguntas y respuestas.

Crear links entre páginas para obtener más detalles de los atributos.

Crear marcadores.

Importar visualizaciones.

Ampliar de tamaño del lienzo.

Realizar auditoría del modelo mediante tablas calculadas.

Facilitar la creación de filtros mediante la sincronización de filtros.

Obtener Kpi´s sobre las tablas, columnas y filas.

Adicionar información complementaria a las visualizaciones.

Definir las interacciones entre las visualizaciones.

Crear visualizaciones que permitan explorar en profundidad o hacer drilldown.

Preparar la visualización de los informes para los dispositivos moviles.

# data[].attributes.body
Se dispone de un conjunto de visualizaciones que se componen de visualizaciones gráficas, tablas, mapas y KPI´s, entre otros.

# data[].attributes.body
La otra instancia del entorno de Power BI tiene que ver con el editor de Power Query que permite acceder a los datos en sus diversos orígenes, auditar las columnas y hacer una serie de tareas para preparar la o las tablas que usaremos en la instancia de Power BI Desktop.

# data[].attributes.headline
ETL: extraer, transformar y cargar (load)

# data[].attributes.subject
ETL: extraer, transformar y cargar (load)

# data[].attributes.body
Se revisa que las columnas no contengan errores, campos vacíos, nulos o duplicados para que al utilizarlos, los filtros y gráficos estén consistentes y no muestren esos valores.

Cada una de las acciones aplicadas sobre las consultas y sobre cada una de las columnas quedan en el editor de power query como pasos aplicados y que se volverán a aplicar a los nuevos datos, permitiendo tener un modelo auditado y consistente en el tiempo.

# data[].attributes.body
Configurar opciones de carga de datos, formatos y relaciones, entre otras.

Eliminar columnas.

Dar formato a cada columna.

Auditar errores de formato en las columnas.

Reemplazar campos vacíos y nulos.

Crear columnas de índice para facilitar la auditoría.

Dividir columnas.

Unir columnas.

Adicionar columnas calculadas.

Obtener diferencias entre campos de fechas.

Unir tablas o consultas.

Combinar y anexar tablas o consultas.

Dinamizar las tablas de hechos.

# data[].attributes.body
Es el conjunto de estrategias, tecnologías y metodologías que te permiten transformar los datos en información relevante y de calidad, a partir de la cual inferimos el conocimiento para tomar mejores decisiones en nuestros negocios.

# data[].attributes.body
Es un ecosistema y conjunto de herramientas de BI & Analytics de Microsoft, basadas en la nube.

# data[].attributes.body
Herramienta ETL (Extract, Transform and Load), con la que puedes conectar datos de distintas fuentes para obtener, transformar y cargar los datos que necesites en tus modelos.

Es el punto de unión entre los datos que necesitas y que se encuentran en diversas fuentes y su almacenamiento en un modelo de datos en Power BI

# data[].attributes.body
Base de datos analítica en memoria que te permitirá almacenar la información que necesitas y acceder a ella de forma rápida y eficiente gracias a su lenguaje de consultas DAX.

# data[].attributes.body
Herramienta muy fácil de usar y muy intuitiva para crear informes interactivos.

Es la parte visible, la que te permitirá, mediante las diferentes visualizaciones, dar respuestas de forma rápida, clara y concisa a tus preguntas de negocio.

# data[].attributes.body
Opción que permite publicar tus soluciones realizadas con Power BI Desktop en la nube para poder compartirlas con el resto de tu organización.

# data[].attributes.body
Power BI no es un sustituto de Excel, más bien se complementan perfectamente.

# data[].attributes.headline
Trabajar con Excel vs trabajar con Power BI

# data[].attributes.subject
Trabajar con Excel vs trabajar con Power BI

# data[].attributes.body
Es natural cuando llevas tiempo trabajando con Excel, que al utilizar Power BI sigas las mismas pautas, la misma forma de trabajar, pero es importante comprender que aun cuando son dos herramientas similares que forman parte de Microsoft Office y de que con ambas puedes crear informes, presentar y analizar datos; son muy diferentes.

# data[].attributes.body
1. Toma de requisitos y batería de preguntas de negocio.

2. Diseño del modelo de datos en estrella y boceto de los informes a realizar.

3. Acceder, transformar, limpiar y cargar los datos, mediante Power Query, para conseguir la estructura de tablas diseñada en el paso anterior.

4. Optimizar el modelo de datos.

5. Crear los cálculos DAX necesarios para responder a esas preguntas de negocio.

6. Diseñar y crear los informes necesarios.

7. Compartir y colaborar mediante el servicio de Power BI en la nube.

# data[].attributes.body
¿Cuánto he vendido?

Por tienda

Estado

País

Diaria

Semanal

Mensual

Anual

En SSanta

En vacaciones

¿Qué productos son los que más se venden?

¿Se comportan igual en todas las Tiendas?

¿Se venden igual todos los meses o tienen picos en los que suben?

Utilidad de cada producto.

¿Cuáles son los productos que más utilidad dejan?

¿Obtengo el mismo beneficio en las diferentes tiendas para un mismo producto?

Tengo objetivos de ventas por cada Tienda de la cadena

¿Estoy cumpliendo mis objetivos mes a mes?

¿Cuánto me estoy desviando?

En global, ¿cómo está cumpliendo esos objetivos cada Tienda?

¿Qué tiendas van mejor o peor con respecto a esos objetivos?

Quiero comparar mis ventas actuales con las de los meses y años anteriores, para tener una referencia de si voy mejor o peor

¿Cuánto han subido o bajado mis ventas con respecto al mes anterior?

¿Con respecto al año anterior?

¿Puedo hacer también un comparativo trimestral?

¿Y un comparativ por semanas?

Quiero aumentar las ventas que hago a cada cliente que visita mi Tienda

¿Cuántas ventas hago al día, al mes o al año?

¿Cuánto me compra cada cliente que entra a mi Tienda? (concepto de Ticket Medio)

¿Qué diferencias hay entre unas Tiendas y otras con respecto al Ticket Medio?

¿El Ticket Medio es similar en todas mis tiendas?

¿El Ticket Medio se comporta similar todos los meses del año?

También quiero hacer más comparativos

Ventas y margen

Ventas de un mes con respecto al anterior

Ventas de un mes con respecto al mismo mes del año anterior, ya que mi negocio es estacional y tiene picos y valles

Ventas desde el inicio del año, para ver como aumentan de forma progresiva

Poder comparar esas ventas desde inicio de año entre varios años

Y, por último, quiero analizar mis ventas por productos, teniendo en cuenta las Categorías (o Familias) en las que los tengo clasificados

Cuáles son las categorías que más vendo.

Cuáles son los productos más vendidos de cada categoría

Cómo se comportan las ventas de una categoría a lo largo de los meses, quiero conocer los picos y valles de cada categoría en concreto

# data[].attributes.body
Es el conjunto de técnicas, métodos y fundamentos que nos permitirán diseñar una estructura, en forma de tablas, en la que almacenaremos la información para que responda de forma rápida y eficiente a nuestras preguntas de negocio.

# data[].attributes.body
Aunque podemos tener multitud de orígenes de datos diferentes, a partir de los cuales queremos analizar información y tomar decisiones, los vamos a agrupar en tres grandes bloques:

Sistemas transaccionales (ERP, CRM, TPV, etc.) y bases de datos relaciones normalizadas (SQL).

Ficheros (Excel, texto, csv, etc.).

Bases de datos semiestructuradas, no estructuradas y otras fuentes.

# data[].attributes.headline
Sistemas transaccionales (ERP, CRM,  TPV, etc.)  y bases de datos relaciones normalizadas (SQL)

# data[].attributes.subject
Sistemas transaccionales (ERP, CRM,  TPV, etc.)  y bases de datos relaciones normalizadas (SQL)

# data[].attributes.body
Un sistema transaccional está diseñado para automatizar procesos realizados por las empresas.

Sus bases de datos están diseñadas para que muchos usuarios escriban simultáneamente en ellos (inserten, modifiquen, eliminen) y consulten los datos almacenados.

Muchos usuarios trabajan con ellos de forma concurrente, leen y escriben en su base de datos continuamente.

Para que su rendimiento sea óptimo, sus tablas se diseñan siguiendo técnicas de normalización de bases de datos.

Las formas normales son conjuntos de criterios que se utilizan para optimizar estas estructuras.

Las bases de datos altamente normalizadas (3FN o superior), tienen gran cantidad de tablas, siendo frecuente que una aplicación cuente con centenares de ellas.

Si tu origen de datos es una base de datos relacional (SQL), es muy importante que hables con el departamento o proveedor que la gestiona para que te den acceso de sólo lectura a la base de datos y que te faciliten documentación y soporte para entender y localizar cuáles son las tablas y columnas que necesitas y qué hay en cada una de ellas.

Estas estructuras de almacenamiento no son muy eficientes para los sistemas analíticos de soporte a la toma de decisiones, como los que vamos a construir con Power BI. Estos sistemas están diseñados para que haya muchas lecturas y escrituras concurrentes. Mientras que una solución de BI, está diseñada para que haya un solo proceso de carga que se ejecuta periódicamente (habitualmente por las noches) y muchas lecturas de información histórica simultáneas.

# data[].attributes.body
Son archivos que tienen muchas filas y muchas columnas con información variada que necesitas para tus análisis. Estos archivos traen principalmente formatod de texto, CSV (valores separados por comas) o Excel. Se pueden obtener desde las aplicaciones, utilizando las consultas de información que suelen tener un botón “Exportar a…” Excel o archivo, solicitandolos al departamento de TI o a proveedores.  Estos ficheros suelen tener toda la información que necesitamos mezclada.

Excel tiene ciertas limitaciones:

Las Tablas Dinámicas sólo pueden obtener información de un rango de celdas, es decir, de una sola estructura de tabla.

Estas estructuras de almacenamiento, con todo lo que necesitas mezclado en ellas, no son aptos para los sistemas analíticos de soporte a la toma de decisiones, como los que vamos a construir con Power BI.   Por tanto, simplemente las características y funcionalidades de Excel y Power BI son muy diferentes. Y lo que es óptimo para Excel no lo es para Power BI y viceversa.

# data[].attributes.body
Es muy frecuente encontrarnos con soluciones de BI departamentales que se abordan de forma independiente.

Efectivamente, las empresas están organizadas por departamentos, pero los datos se deben estructurar por “Procesos de Negocio”.

# data[].attributes.body
Se debe hablar con “todos” los departamentos que necesitan tomar decisiones en base a la información de ventas. Una primera toma de requisitos básica.

Decidir en qué orden abordar cada uno de los cuadros de mando.

Se crería una sola base de datos para el proceso de negocio de ventas, donde se iría integrando toda la información que necesitan los diferentes departamentos.

Para abordar el segundo proyecto, nunca crearemos una base de datos independiente, sino que agregaremos a la base de datos del proceso de negocio de ventas, la información adicional que no nos había pedido el departamento Comercial, pero que sí necesita el departamento de Facturación. Y así sucesivamente.

Si el nuevo departamento nos pide que calculemos un indicador de forma diferente, deberemos tener una reunión con ambos departamentos y gerencia en la que se decida una forma única de cálculo para dicho indicador, que será la que se utilizará en la Empresa.

# data[].attributes.body
Una vez finalizados todos los proyectos, tendríamos un cuadro de mando específico para cada departamento, pero una sola base de datos con toda la información del proceso de negocio de “Ventas” integrada.

# data[].attributes.body
Los cuadros de mando son específicos para cada departamento, cada uno tiene sus KPIs, y su punto de vista desde el cual analizar la información, pero la base de datos analítica de la que obtendrán la información debe ser única y estructurarse por “Procesos de Negocio”, no por departamentos.

# data[].attributes.body
El primer paso que necesitamos dar es seleccionar el “Proceso de Negocio” que queremos analizar.

En nuestro caso hemos optado por el proceso de negocio de “Ventas”.

# data[].attributes.headline
2. Hablar con cada uno de los departamentos y personas que necesitan analizar información de ventas

# data[].attributes.subject
2. Hablar con cada uno de los departamentos y personas que necesitan analizar información de ventas

# data[].attributes.body
El siguiente paso, es hablar con cada uno de los departamentos y personas que necesitan analizar información de ventas y pedirles que cada miembro del equipo prepare sus preguntas. Es fundamental que gerencia esté presente como nexo entre todos los departamentos implicados y como decisor ante discrepancias entre departamentos.

A más implicación de todos, mejor solución tendrás en tu empresa.

NOTA: si estás creando una solución que sólo será utilizada por ti y por tu equipo, trata de que también intervengan y se impliquen todas las personas que van a utilizar la solución.

# data[].attributes.body
Una vez recopiladas y consensuadas dichas preguntas, es cuando iniciamos la parte de diseño de la solución de base de datos que sea capaz de responderlas.

Tenemos que identificar dos grandes bloques de información:

Identificar la información relativa a la historia de lo ocurrido y decidir con qué nivel de detalle la necesitamos.

Identificar cada uno de los puntos de vista desde los que necesito analizarla.

Ejemplo: analizaremos las ventas al máximo nivel de detalle disponible en la aplicación TPV, es decir, bajaremos al detalle de cada línea de cada ticket emitido: Cliente, Fecha, Tienda, Producto y Empleado.

# data[].attributes.body
¿A quién he vendido? -> Cliente

¿Cuándo? -> Fecha

¿Dónde?-> Tienda

¿Qué he vendido?-> Producto

¿Quién vendió?-> Empleado

Vamos a bajar lo anterior a un siguiente nivel más detallado.

En nuestro caso, hemos decidido medir inicialmente:

PVP

Importe vendido

Descuento aplicado

Costo asignado a cada venta

Beneficio obtenido (venta – costo), tanto neto como porcentual

Por cada uno de los puntos de vista, necesitamos identificar todos los atributos o características por las que queremos segmentar y filtrar la información:

Cliente: código, nombre, edad, tipo, datos geográficos (código postal, ciudad, provincia, región, país, zona), salario, riesgo, …

Fecha: día, mes, año, trimestre, día de la semana, es festivo…

Tienda: código, nombre, superficie en m2, empleados, datos geográficos (código postal, ciudad, país, zona)), tamaño, tipo de tienda …

Producto: código, descripción, tipo, subtipo, grupo, ubicación, familia, subfamilia, tamaño, color… -          Empleado: código, nombre, apellidos, edad, salario, departamento, sección, grupo…

# data[].attributes.body
Cuantos más indicadores, más puntos de vista desde los que analizar y más atributos (o características) por las que segmentar, más ricas y poderosas serán las analíticas que podremos realizar.

# data[].attributes.body
Para responder a cualquier pregunta de nuestro negocio necesitamos siempre:

- Algo que medir

- Describir lo que estamos midiendo

- Filtrar la información

- Agrupar la información

# data[].attributes.body
Todo proyecto de Business Intelligence debe iniciar con la toma de requisitos que debe incluir una batería de “Preguntas de Negocio” que la solución de Power BI debe resolver (mínimo 50).

Estas preguntas nos serán muy útiles, tanto para validar el modelo de datos como para utilizar las mejores técnicas de visualización para responderlas, así como para agruparlas en diferentes informes y cuadros de mando de forma óptima.

Equivocarnos aquí suele tener las peores consecuencias.

# data[].attributes.body
Dedica tiempo a trabajar en el documento y escribir tus preguntas de negocio.

Escribe todas las preguntas que se te ocurran, aunque te parezcan básicas, complejas, extrañas, poco habituales, etc. Escríbelas todas, todas, todas.

Activa tu mente para que esté pendiente de recopilar preguntas que se te ocurran.

Si hay varias personas que tienen preguntas sobre el negocio, que cada uno haga el ejercicio de forma independiente y sin compartir con los demás hasta que esté terminado. Aparecerán muchas más preguntas que si se hace en grupo al inicio   Una vez tengas recopilados estos documentos, haz una reunión y pon en común los documentos de todos los participantes, descarta preguntas muy abiertas como: “¿Cómo vamos este año?” puede tener muchas respuestas. Céntrate en preguntas como: “¿Cuánto hemos vendido cada mes de 2025 en la tienda 005?” que sólo tienen una respuesta.

De toda esa relación, extrae las preguntas que consideran prioritarias, por cada cien, te quedas con entre 10 y 15.

# data[].attributes.body
Categorías.txt

CodPostales.txt

Localidades.txt

Productos.txt

Provincias.txt

Tiendas.txt

VentasCab.txt

VentasDet.txt

Presupuestos.xlsx

Fechas.xlsx

# data[].attributes.body
Una Tabla es una estructura independiente que nos permite almacenar información en sus filas y columnas:

-  Las Columnas son la estructura mínima de almacenamiento, su contenido debe ser único y a cada una de ellas hay que asignarle un tipo de datos adecuado, según lo que vaya a contener.

-  Las Filas representan un registro único para cada elemento almacenado.

# data[].attributes.body
Una Clave Principal es la columna (o combinación de columnas) que identifican de forma única a cada fila de una tabla.

Es muy frecuente que tengamos todo codificado en nuestras aplicaciones (código de cliente, código de producto, código de empleado, código de proveedor, etc.).

El motivo es la necesidad de tener esa clave principal en cada tabla y tener la seguridad de cuando buscamos un valor en esa tabla sólo encontraremos una fila que lo contenga.

# data[].attributes.body
Una Clave Externa es una columna (o combinación de columnas) que nos permite almacenar esos mismos valores de la clave principal, pero aquí sí que se pueden repetir tantas veces como necesitemos y su objetivo es poder relacionar las tablas donde se encuentran con las tablas que contienen las claves principales.

# data[].attributes.body
Los hechos se almacenan en Tablas de Hechos, estas tablas contienen la información necesaria para que podamos medir todo lo que necesitamos.

De aquí vamos a obtener los indicadores de negocio.

Son el punto central de cada esquema en Estrella (lo que vamos a analizar).   Contienen información histórica de cada proceso o subproceso de negocio.

# data[].attributes.body
Son estrechas (tienen pocos bytes por cada fila).

Suelen tener pocas columnas y casi todos sus datos son numéricos.

Son largas. Suelen tener muchas filas. Es frecuente que tengan cientos de miles o millones de filas.

Tienen un crecimiento periódico. Si en un año tienen 100.000 filas, es probable que en 3 años tengan el triple.

# data[].attributes.body
La Granularidad es el mayor nivel de detalle que tienen los datos de una tabla de hechos. Los dos puntos fundamentales en los que te puedes basar para definirla son:

El nivel de detalle máximo que necesitas para responder a todas las preguntas de negocio planteadas.

El nivel de detalle máximo que te ofrece tu origen de datos.

Ejemplo:

Ventas por ticket, una venta por cada ticket (sabremos la fecha y hora de la venta, el cliente, el empleado… pero no el detalle de productos que ha comprado, porque en un mismo ticket puedo comprar varios productos y no tengo ese nivel de detalle, tendría un problema si quiero segmentar por productos). Ventas detalladas, una fila por cada línea de detalle de cada ticket (aquí sí que tendría ese detalle de todos los productos vendidos, con cantidades, precios, importes, descuentos… de cada uno de ellos).

# data[].attributes.body
La Granularidad es la característica más importante del diseño de una Tabla de Hechos. Si nos equivocamos en su definición, es muy probable que tengamos que rediseñar nuestro modelo de datos, ya que ello afecta a la estructura que sostiene el modelo con todo lo que ello implica. Es como si un arquitecto necesita mover un muro de carga de un edificio, tiene muchas más implicaciones.

# data[].attributes.body
Las dimensiones se almacenan en Tablas de Dimensiones, su objetivo es poner a los hechos en contexto y exponer los diferentes puntos de vista o perspectivas desde las que necesitamos analizar la información.

Ejemplos:

Fecha

Tienda

Producto

Cliente

Empleado

Proveedor

Cuenta Contable

Almacén

Máquina

# data[].attributes.body
Son anchas (tienen muchos bytes por cada fila).

Suelen tener muchas columnas y casi todos sus datos son texto.

Son cortas. No suelen tener muchas filas. Es frecuente que tengan entre decenas y miles, rara vez tienen cientos de miles o millones de filas.

Tienen muy poco crecimiento. Es habitual que si, por ejemplo, en un año tienes 1.500 clientes, quizás al año siguiente llegues a los 1.600, pero no es habitual que cada año dupliques el número de clientes (ni de proveedores, ni de empleados…).

Una tabla de dimensión puede relacionarse con varias tablas de hechos. Podemos tener una tabla de dimensión “Tienda” y que se relaciones con la tabla de hechos de “Compras” para saber qué tienda realiza cada compra y que también se relacione con la de hechos de “Ventas”.

# data[].attributes.headline
Tablas de Dimensiones - tipos de columnas

# data[].attributes.subject
Tablas de Dimensiones - tipos de columnas

# data[].attributes.body
Clave Principal: Siempre ha de tener una clave principal a través de la que se relacionará con las tablas de hechos y validará que al buscar un elemento a través de ella devuelva una sola fila.

Características: tendrá una columna por cada una de las características por las que necesitemos segmentar la información, cuantas más tengamos, más rico será el análisis que podremos realizar.

Ejemplos:

Fecha: día, mes, trimestre, año, trimestre, día de la semana, es festivo, campaña, temporada, semana del año…

Cliente: código, nombre, ciudad, país, edad, tipo de cliente, estado civil…

Proveedor: código, nombre, ciudad, país, edad, tipo de proveedor, zona…

# data[].attributes.body
Es la más importante y común en todos los modelos analíticos.

Debe recopilar toda la información necesaria para analizar no solo en base al calendario natural, sino también por periodos fiscales, campañas, temporadas y todo lo que cada negocio necesite para hacer un exhaustivo análisis temporal.

# data[].attributes.body
Cada esquema en estrella tiene una tabla de hechos central y varias dimensiones que se representan como picos de dicha estrella.

Las tablas de hechos se representan en amarillo.

Las tablas de dimensiones en azul.

Las relaciones con una flecha apuntando de las dimensiones a los hechos.

# data[].attributes.body
El Bus Dimensional es una herramienta imprescindible en todo modelo de datos que contenga más de un esquema en estrella.

Es el que nos permite conocer de vistazo, de forma rápida y sencilla todas las relaciones que existentes entre tablas de hechos y tablas de dimensiones.

En el bus dimensional las dimensiones de representan en columnas y los hechos en filas.

# data[].attributes.body
Para aprovechar PowerBi es necesario conocer y entender los fundamentos de Businesss Intelligence.

# data[].attributes.body
Cuántas tablas y de qué tipo se necesitan para almacenar la información de forma óptima y que sea capaz de responder de forma eficiente a preguntas de negocio.

Qué columnas deben estar en una misma tabla o en tablas separadas .

Por qué un cálculo DAX no da el resultado que se esperaba.

Qué tipo de gráfico utilizar para responder mejor cada pregunta de negocio.

Qué técnicas de interacción y navegación utilizar para analizar los detalles a partir de un KPI y porqué hacerlo así.

Qué pasos dar y en qué orden para construir mejores soluciones analíticas

# data[].attributes.body
Uno de los mayores errores que se comenten al trabajar con Power BI, es cargar los datos de Excel (tal cual están), sin haber diseñado previamente un Modelo en Estrella.

Lo más grave es que funcionan, al inicio todo va genial, nos creemos que Power BI es como las tablas y gráficos dinámicos, sólo que más bonito y con más opciones de visualización, pero en cuanto necesitas incorporar varios de ellos, resolver ciertos cálculos, utilizarlos en informes para segmentar y filtrar la información que necesitas, comenzarán los problemas.

Te verás en un callejón sin salida que te obligará a comenzar de nuevo y rediseñar totalmente tu Modelo de datos.

# data[].attributes.body
El principal pilar sobre el que se va a construir una solución con Power BI, es el “modelo de datos en Estrella” que dará soporte y respuestas rápidas y eficientes a todas las preguntas que nos hagamos sobre cada uno de los procesos de negocio a analizar.

# data[].attributes.body
Clave Principal: opcionalmente y sólo si aporta valor al análisis a realizar.

Claves Externas: tantas como tablas de dimensiones haya en el esquema en estrella definido.

Se utilizan para relacionar las tablas de hechos con las tablas de dimensiones. Ejemplos: código de tienda, fecha, código de producto…

Medidas: columnas con datos numéricos a partir de los cuales vamos a obtener los indicadores y KPIs definidos en la toma de requisitos y utilizadas para responder a la batería de preguntas de negocio. Ejemplos: importe vendido, importe costo, cantidad, descuento, beneficio.

# data[].attributes.headline
3. Valida las relaciones entre Hechos y Dimensiones

# data[].attributes.subject
3. Valida las relaciones entre Hechos y Dimensiones

# data[].attributes.body
Identifica que en los hechos tienes la clave externa que te permita relacionarla con la clave principal de la dimensión.

Un par “Clave Externa – Clave Principal” por cada dimensión relacionada con los hechos (cada pico de la estrella).

Que cada par tenga asignado el mismo tipo de datos.

Que cada par tenga valores comunes en ambas tablas.

# data[].attributes.body
En Power BI todo son tablas y no hay ninguna propiedad ni lugar donde identificar si es una tabla de hechos o de dimensiones, a nivel conceptual ni de diseño.

# data[].attributes.body
El 80% de las bases de datos de Power BI no están bien modeladas ni optimizadas.

# data[].attributes.body
Es un motor de transformación y preparación de datos.

Es la herramienta que nos permite que los datos lleguen desde sus orígenes hasta la base de datos de Power BI, pudiendo realizar las transformaciones y limpiezas oportunas durante el camino.

Incluye una interfaz gráfica para obtener datos de orígenes y un editor de Power Query para aplicar transformaciones.

Con Power Query se puede realizar el procesamiento de extracción, transformación y carga (ETL) de los datos.”

# data[].attributes.body
Power Query, en su versión para Power BI, sirve para conectarnos a los diversos orígenes donde se encuentran los datos que necesitamos analizar.

Extraeremos esos datos y haremos todas las transformaciones necesarias para integrarlos y limpiarlos, y finalmente, cargarlos en nuestros modelos de datos de Power BI.

El único destino que permite Power Query en Power BI es su modelo de datos.

En definitiva, Power Query es la herramienta que nos permite materializar en Power BI los “modelos en estrella” que hemos diseñado previamente y dejar todo el proceso automatizado para repetirlo periódicamente, tantas veces como necesitemos refrescar los datos.

Aqui es donde podemos diseñar la estructura de la base de datos en Power BI: cuántas tablas tendremos, cómo se llamarán. qué columnas tiene cada tabla, cómo se llama cada una y qué tipos de datos permite almacenar.

# data[].attributes.body
Puedes acceder al Editor de Power Query de dos formas, ambas se encuentran en el menú “Inicio” de Power BI:

Con el botón “Obtener datos” crearás nuevas consultas.

Con el botón “Transformar datos” editarás las consultas existentes y podrás crear nuevas.

# data[].attributes.body
El Editor de Power Query es una ventana independiente con sus propios menús y funcionalidades.

Tiene 4 grandes bloques de información:

Bloque 1 - Consultas: donde tendrás un elemento por cada consulta (query) que hayas creado, haciendo clic sobre ella, aparecerá en el resto de los bloques y podrás trabajar sobre ella. En la imagen anterior se está trabajando sobre la consulta “Producto” que es la que aparece con el fondo gris más intenso.

Bloque 2 - Datos: puedes ver una muestra de los datos obtenidos en esa consulta tal cual quedan tras la transformación realizada en el paso actual, en la imagen anterior es “Columnas quitadas”. Es muy útil poder consultar los datos resultantes en cualquiera de los pasos realizados. También puedes ver en la parte superior la instrucción en lenguaje M generada automáticamente.

Bloque 3 – Pasos: aquí tienes cada uno de “pasos” que hemos realizado con Power Query para obtener y transformar datos. En la imagen anterior hemos dado 9 pasos para obtener y transformar los datos, obteniendo así el resultado que necesitamos en base al diseño que hemos hecho previamente de esta tabla.

Bloque 4 - Muestra: en la parte inferior nos indica información relativa a la consulta, ten en cuenta que por defecto no se leen todos los datos del origen (podrían ser millones de filas), sólo se lee una muestra compuesta por las 1000 primeras filas. También nos indica cuando se cargó esa muestra en la parte inferior derecha.

# data[].attributes.body
En toda consulta, el primer paso es conectarnos a un origen de datos.

En Power Query podemos conectarnos a cientos de fuentes de datos.

Archivo: todos los tipos de archivos (Excel, texto, csv, xml, json, carpeta, PDF, parquet, carpeta de Sharepoint).

Base de datos: los sistemas de bases de datos más comunes (SQL Server, Access, Oracle, Informix, DB2, MySQL, PostgreSQL, etc.) y otros más novedosos (SAP HANA, Amazon Redshift, Google BigQuery, etc.)

Microsoft: todas las fuentes de datos del propio fabricante están disponibles (Power Platform, Azure).

Servicios en línea: incluye una gran variedad de servicios de terceros (Salesforce, Google Analytics, Mailchimp, Marketo, Linkedin, GitHub, Asana, Zendesk, Zoho Creator, etc.).

Otras: aquí han agrupado todas las que consideran fuera de los grupos anteriores (Web, Fuente OData, Active Directory, Spark, ODBC, OLE DB, etc.).

Consulta en blanco: se abre directamente el editor de Power Query para que escribamos directamente código en Lenguaje M para conectarnos a diferentes servicios que ofrecen una API.

# data[].attributes.body
Te aparecerá una pantalla donde debes introducir el nombre del servidor, opcionalmente la base datos (aunque también puedes seleccionarla después) y el modo de conectividad, por ahora deja marcada la opción por defecto, “Importar” que leerá los datos y los importará a la base de datos de Power BI.

# data[].attributes.body
Cuando necesitas obtener datos de archivos de texto en sus diferentes formatos, entre ellos los CSV (Coma Separated Values).

Puedes acceder a cualquier tipo de archivo, separado por cualquier carácter (selecciona en la opción delimitador o incluso elije longitud fija).

Es importante que revises los 3 elementos a configurar:

1. Selecciona el “Origen de archivo” adecuado y evita importar caracteres erróneos. Si el lenguaje es español y no lo configuras adecuadamente, te encontrarás caracteres extraños en lugar de la letra “ñ” y las vocales acentuadas.

2. Selecciona el “Delimitador” correcto. Aunque lo suele hacer por defecto, comprueba que te está devolviendo exactamente las columnas que esperas y no ha troceado o unido algunas de forma incorrecta.

3. Mantén la “Detección del tipo de datos” con ese valor por defecto.

Una vez realizadas estas configuraciones de forma correcta, pulsa el botón “Aceptar” y ya tienes configurada la obtención de datos de ese fichero.

# data[].attributes.body
Excel es un origen de datos que nos vamos a encontrar con mucha frecuencia. Al ser también de Microsoft, tiene contemplado todo lo necesario para obtener sus datos. Es capaz de identficar todas las hojas de un libro y también todas las “tablas” que hay en estas hojas.

Una “tabla” en Excel es un conjunto de celdas al que hemos asignado “Formato de tabla” y le hemos asignado un nombre. Ten en cuenta que si no has cambiado el nombre que le asigna por defecto, se llamarán tabla1, tabla2, tabla3…   La recomendación es que si vas a trabajar con orígenes de datos de Excel, trabajes con tablas siempre que te sea posible. Te identificará los nombres de columnas y te evitará problemas al importar sólo el contenido de la tabla.

Selecciona las Tablas y Hojas que necesitas importar, se habilitará el botón “Cargar”, púlsalo y se importarán esos datos a tu modelo de Power BI.

# data[].attributes.body
Las transformaciones están disponibles en varios de los menús y aunque se repiten en varias pestañas del menú, actúan de forma diferente:

Menú Transformar: aplica los cambios sobre la propia columna que hacemos la transformación.

Menú Agregar Columna: deja la columna actual tal como está y crean una nueva columna con el resultado de la transformación realizada.

# data[].attributes.body
Hay otra alternativa muy útil para acceder a las transformaciones sin usar los menús de la parte superior.

Selecciona una columna (aparecerá en verde) y haz clic derecho con tu ratón sobre su nombre. Te aparecerá un menú contextual con todas las transformaciones que puedes aplicar sobre dicha columna.

# data[].attributes.body
Es muy útil cuando no necesitamos todas las columnas que vienen del origen de datos.

Debemos eliminar las que no necesitamos y no sobrecargar nuestros modelos con columnas innecesarias.

Tenemos tres opciones:

Quitar columnas: elimina las columnas seleccionadas.

Quitar otras columnas: mantiene las columnas seleccionadas y elimina el resto.

Elegir columnas: permite elegir las columnas a mostrar o descartar mediante un check .

# data[].attributes.body
Hay ocasiones en las que no necesitamos todas las filas que hay en el origen, por ejemplo, necesito las filas de un año en concreto o de una tienda en concreto.

En ese caso esta operación, que tiene una interfaz como la de Excel, nos permitirá seleccionar sólo las filas que quiero obtener. Por ejemplo, si queremos obtener sólo las ventas de la Tienda “006”, las filtraremos.

Hacemos clic en el icono que hay a la derecha de la columna y seleccionaremos sólo los valores que queremos filtrar. Como puedes ver en la imagen, no aparece la tienda “006” porque Power Query carga una muestra de 1.000 filas y si ahí no aparece, tenemos que pulsar el botón “Cargar más” para forzar una carga completa.

# data[].attributes.body
Es muy habitual, sobre todo cuando importamos archivos, que en la primera fila estén los nombres de las columnas y los datos en las filas siguientes.

Esta transformación es imprescindible para resolver este caso tan frecuente, si aplicas la transformación “Usar primera fila como encabezado” tendrás resuelto este problema

# data[].attributes.body
Es una de las transformaciones más sencillas y a su vez, más imprescindible.

Dar el nombre adecuado a todas las columnas de nuestro modelo es muy importante, ya que será el nombre que luego aparecerá en los informes.

Para cambiar el nombre de una columna hay varias alternativas:

Haz clic derecho con el ratón sobre ella y elegir opción “Cambiar nombre”.

Haz doble clic sobre ella.

Pulsa la tecla “F2” cuando la columna está marcada (fondo verde) se pone en modo edición, cambia el nombre y pulsa la tecla “Intro” para completar el cambio.

# data[].attributes.body
No siempre el dato tiene asignado el tipo óptimo en origen.

Cuando importamos archivos, el tipo de datos habitual es “texto” (aunque contenga números, fechas u otros), así que debemos asignar, columna por columna el tipo de datos óptimo.

Evita el tipo de datos “Cualquiera”.

Tipos de datos a asignar:

Número decimal: cuando necesitas almacenar 5 o más decimales.

Número decimal fijo: cuando necesitas almacenar entre 1 y 4 decimales.

Número entero: cuando sólo necesitas números enteros, es el tipo de datos numérico más óptimo en el modelo de datos.

Fecha/Hora: cuando necesitas almacenar una fecha con una hora concreta.

Fecha: si sólo necesitas almacenar la fecha.

Hora: si sólo necesitas almacenar la hora.

Duración: representa un periodo de tiempo transcurrido, convirtiéndose en número decimal cuando se carga en el modelo.

Binario: cualquier dato en formato binario, por ejemplo, imágenes, documentos, etc. Evitar en siempre que sea posible. Suele ocupar mucho espacio y aportar poco al análisis.

# data[].attributes.body
Permite eliminar valores duplicados para una columna.

Mantendrá una fila por cada valor de esa columna.

La forma más sencilla de utilizarla es hacer clic derecho con el ratón sobre la columna de la que quieras eliminar las filas con valores duplicados para ella y pulsar “Quitar duplicados”.

Mucho cuidado con esta transformación, puedes eliminar información que necesites.

# data[].attributes.body
Recorre fila a fila toda la columna y hace el reemplazo de valores que hemos indicado.

Es muy útil cuando vienen del origen caracteres erróneos o cuando queremos eliminar algunos caracteres.

# data[].attributes.body
Crea una columna cuyos valores en cada fila dependerán de los criterios y condiciones aplicadas.

Ejemplo, quiero crear una columna “Grupo” de producto en función del valor de la columna Familia:

Si Familia = 1 -> “Comestibles”

Si Familia = 2 -> “No comestibles”

Si tiene cualquier otro valor “GRUPO MAL ASIGNADO”.

# data[].attributes.body
Hay ciertos cálculos o criterios para los que no hay una transformación concreta y aquí viene en nuestra ayuda la creación de columnas personalizadas, donde tenemos total libertad para incluir la expresión (en lenguaje M) que necesitemos.

Se pueden crear expresiones de cálculo muy habituales, sabiendo que los nombres de columnas van entre corchetes [NombreColummna] y las expresiones aritméticas básicas: ( ) + - *

# data[].attributes.headline
Quitar filas superiores y Quitar filas inferiores

# data[].attributes.subject
Quitar filas superiores y Quitar filas inferiores

# data[].attributes.body
A veces nos encontramos con ciertos formatos de archivos, más orientados a la presentación de los datos como informe, y que a veces han de ser nuestra fuente de datos por no tener acceso a las bases de datos, sino sólo a estos informes.

# data[].attributes.body
Hay una casuística muy frecuente en las estructuras de nuestros orígenes de datos y es que éstos estén compuestos por una serie de columnas, digamos estáticas, y otras columnas dinámicas, que pueden ir variando a lo largo del tiempo, incluso aumentando el número de columnas.

Además, estas columnas tienen la peculiaridad de que contienen en sus filas, valores numéricos con los que necesitaremos hacer cálculos posteriormente.

Un ejemplo de lo más frecuente son archivos Excel con datos de presupuestos anuales:

A partir de ese origen, eliminamos la columna Total y la última fila, aplicando las transformaciones estudiadas anteriormente.

Pero aún nos queda un paso importante. No queremos tener una columna por cada mes, sino una columna “Mes” que cuyas filas aparezca el nombre del mes y otra columna con el “Importe Presupuestado” donde aparezca el valor correspondiente en cada fila.

Power BI, tienes tres transformaciones:

Anular dinamización de columnas: marca las columnas de Enero a Diciembre y aplícala haciendo clic derecho con el ratón sobre ellas y eligiendo dicha opción.

Anular dinamización de otras columnas: marca la columna Tienda y aplícala haciendo clic derecho con el ratón sobre ella y eligiendo dicha opción.

Anular dinamización de las columnas seleccionadas únicamente: marca las columnas de Enero a Diciembre y aplícala haciendo clic derecho con el ratón sobre ellas y eligiendo dicha opción.

Siempre que se aplique alguna de estas transformaciones, los nombres de las columnas serán:

Atributo: para la columna que ahora muestra en filas los nombres de las columnas de originarias, en nuestro ejemplo, los nombres de los meses.

Valor: para la columna que ahora muestra los datos numéricos correspondientes a cada una de ellas.

Se recomienda aplicar la transformación “Cambiar nombre” y asignarle un nombre adecuado a su contenido.

# data[].attributes.body
Es la transformación que permite fusionar datos de dos consultas en una sola, siempre que tengan una o varias columnas en común que las relacione.

Es una transformación imprescindible para construir Modelos en Estrella, donde es muy frecuente que haya un mayor número de tablas en origen de las que necesitamos en nuestro modelo.

Nos permite agregar más columnas a una consulta, procedentes de otra consulta.

# data[].attributes.body
Selecciona la consulta “Productos”.

Ve al menú “Inicio” y en la parte de la derecha selecciona la opción “Combinar consultas”.

Te aparecerá un formulario, que debes completar como se indica en la imagen.

Con esto están establecidas las relaciones entre ambas tablas, por lo que ya podemos obtener las columnas que necesitemos, gracias al botón “Expandir” .

Haz clic y selecciona las columnas que necesites combinar en tu tabla de la Dimensión Producto, en este caso: Categoría y Familia. Y pulsa el botón “Aceptar”.

# data[].attributes.body
Hay otro escenario en el que también necesitamos fusionar varias consultas en una sola, es cuando tenemos varias tablas (o archivos) segmentados en el origen. Por ejemplo:

Archivos o tablas por cada mes o año.

Archivos o tablas por cada país.

Requisito: las consultas a “Anexar” deben tener la misma estructura de datos. Es decir, las mismas columnas y en el mismo orden, ya que lo que necesitamos es obtener una tabla con la misma estructura, pero con más filas.

# data[].attributes.body
Todas las consultas que hemos creado en Power Query se carga en el modelo de datos de Power BI, llegando a la base de datos con la estructura tal cual queda tras el último paso de transformación realizado sobre ella.

Es frecuente que creemos algunas consultas de las que sólo necesitamos leer datos, pero no deseamos que aparezcan en el modelo en Power BI.

Para anular la carga de estas consultas haremos clic derecho sobre el nombre de cualquier consulta, y deshabilitaremos la carga al modelo de datos.

Podemos identificar visualmente las consultas con la carga deshabilitada porque aparecen en cursiva y si haces clic derecho con el ratón sobre ellas no aparece marcado el check citado anteriormente.

# data[].attributes.body
Por cada transformación que hemos ido creando en Power Query, se ha creado lo que se denomina un “Paso”.

Cada uno de esos pasos ha generado internamente una instrucción en Lenguaje M, tal como el grabador de macros de Excel, sin necesidad de conocer el lenguaje subyacente, va generando instrucciones automáticamente y permite que todo quede automatizado para que puedas ejecutarlo tantas veces como necesites.