# data[].attributes.body
PowerBi brinda interacciones entre los diversos elementos visuales de una página de informe.

Las interacciones permiten que, al hacer clic en cualquier valor de cualquier elemento visual, se resalten los valores filtrados en el resto de los elementos visuales de esa misma página.

En el ejemplo se muesta cómo al hacer clic en la Categoría “Bebida”, todo el informe se filtra cambiando los datos numéricos y las gráficas, algunas de ellas resaltan los valores correspondientes al elemento filtrado, marcando el resto en una tonalidad mucho más clara.

# data[].attributes.body
los objetos Visuales que se utilizan con más frecuencia son:

Tarjetas.

Tablas (variantes: Tablas y Matrices).

Gráficos de Líneas.

Gráficos de Barras y Columnas.

Segmentadores.

# data[].attributes.body
La forma más habitual de trabajar cuando estamos creando informes en Power BI es muy similar a cómo trabajamos en Excel con Tablas Dinámicas y Gráficos Dinámicos:

Haz clic en los diferentes componentes o arrástralos al lienzo en blanco y posteriormente configura sus propiedades.

# data[].attributes.body
Elector de la vista de “Informes” y las diferentes vistas de la base de datos y los cálculos DAX.

Lienzo en el que vamos a crear, editar y posteriormente visualizar la información.

Acceso a la vista de escritorio o de móvil de una página de informes.

Pestañas para desplazarte por cada una de las Páginas del informe.

Configuración de filtros. Adicionalmente a los segmentadores y las interacciones entre los elementos visuales del informe, podemos definir y configurar filtros adicionales a nivel de un objeto visual, de una página del informe o de todas las páginas del informe.

Formato del objeto visual seleccionado. Aquí podemos configurar cada una de las propiedades del objeto visual seleccionado. En Power BI, siempre hay un objeto que tiene el foco, éste aparece resaltado (de forma similar a PowerPoint).

Compilar un objeto visual: permite agregar los datos que se van a mostrar en cada una de las partes del objeto visual.

Datos: aquí tienes disponibles todos los campos del Modelo Semántico que hemos marcado como visibles en los informes. Es decir, todas las “Columnas” y “Medidas”, agrupadas en “Tablas” y “Carpetas”.

# data[].attributes.body
En cada Página de informes, creamos diversos objetos visuales para facilitar la información solicitad y su comprensión.

Los informes son documentos interactivos que presentan datos visualmente y nos proporcionan información significativa para el análisis.

Suelen contener segmentadores, filtros, gráficos, tablas, mapas y otros elementos visuales que nos permiten explorar y comprender la información de forma más efectiva.

# data[].attributes.body
Las Tablas y los Gráficos son elementos complementarios.

Las Tablas nos aportan información muy detallada, cifras concretas, tienen datos muy precisos, incluso con decimales, suelen tener bastantes números. Están más orientadas a la lectura y a dedicar un tiempo a su revisión que a dar información significativa al primer vistazo.

Los Gráficos nos aportan información más agregada, nos transmiten mensajes sin entrar al detalle de los números concretos, resaltan diferencias, picos, anomalías, etc.

# data[].attributes.body
SUM(): Devuelve la suma de los valores de esa columna. Sintáxis: SUM( Tabla[Columna] )

MIN(): Devuelve el menor valor de esa columna. Sintáxis: MIN( Tabla[Columna] )

MAX(): Devuelve el mayor valor de esa columna. Sintáxis: MAX( Tabla[Columna] )

AVERAGE(): Devuelve el promedio (media aritmética) de los valores de esa columna. Sintáxis: AVERAGE( Tabla[Columna] )

COUNTROWS(): Devuelve el número de filas de esa tabla. Sintáxis: COUNTROUWS( Tabla )

DISTINCTCOUNT(): Devuelve el número de valores distintos que contiene esa columna. Sintáxis: DISTINCTCOUNT( Tabla[Columna] )

# data[].attributes.body
Como todo lenguaje, también permite incluir comentarios, para ello podemos utilizar dos alternativas:

// para incluir un comentario hasta el final de esa línea.

/* y / para incluir un comentario entre símbolo de inicio del comentario “/” y el símbolo de fin del comentario “*/”.

No afecta al resultado el número de espacios incluidos como separadores ni los saltos de línea que haya en un cálculo.

# data[].attributes.body
Junto con las expresiones y funciones, podemos utilizar los siguientes operadores:

Aritméticos: +suma -resta *multiplicación /división.

Comparativos: =igual <>distinto >mayor >=mayor o igual <menor <=menor o igual.

Lógicos: &&AND ||OR.

Otros: &Concatenar INIncluir si el valor está en la lista.

# data[].attributes.body
DAX es el acrónimo de Data Analytics eXpressions.

Los principales usos del lenguaje DAX son la creación cálculos en sus diferentes variantes: Tablas Calculadas, Columnas Calculadas y Medidas.

DAX es un lenguaje funcional al igual que Excel. Siempre escribimos el nombre del objeto a crear, el signo igual “=” y la expresión DAX.

Es habitual anidar varias funciones en los cálculos al igual que en Excel.

Una función puede recibir como parámetro otra función, y así sucesivamente.

# data[].attributes.body
Columnas Calculadas

Se calculan en tiempo real.

Se almacenan en la base datos.

Consumen Memoria.

No usar, salvo excepciones.

Medidas

Se calculan en tiempo de ejecución en los informes.

No se almacenan sus resultados.

Consumen procesador (CPU).

Usar siempre que sea posible.

# data[].attributes.body
Existe una variante, las llamadas Medidas Implícitas, que las podemos crear sin necesidad de escribir instrucciones en Lenguaje DAX, pero que tienen grandes limitaciones de cálculo y de uso, por lo es mejor no usarlas.

Power BI las crea automáticamente para todas las columnas numéricas del modelo.

Se pueden identificar fácilmente porque tienen un símbolo de sumatorio (agregación).

Por cada columna sobre la que Power BI cree automáticamente una medida implícita, debemos hacer una de estas dos acciones:

Ocultarla, si realmente es un dato numérico agregable sobre el que necesito hacer cálculos y crear las medidas explícitas que necesite en base a esa columna, pero nunca mostrar esa columna como tal en la vista de informes.

Quitar la función de agregación asignada, si es un dato numérico, pero no agregable, como por ejemplo el año, el número del mes y otros muchos datos que son numéricos, pero no tiene sentido hacer operaciones aritméticas sobre ellos, ya que sólo son descriptivos.

# data[].attributes.body
Debemos utilizar el icono del grupo “Cálculos” del menú “Inicio” y asignarle una expresión DAX que devuelva valores para cada una de las filas para dicha columna.

Una vez creada, sólo aparecerá el cálculo DAX, no veremos en ningún momento el resultado en el modelo porque no se almacena en memoria, sólo podremos ver sus resultados utilizándola en los informes y su valor dependerá siempre de los filtros y segmentaciones de dicho informe.

Dicho de otra forma, una Medida, puede devolver tantos valores como representaciones visuales, segmentos y filtros hagamos. Depende del contexto en el que se evalúa en cada momento.

Estas Medidas se identifican visualmente porque sobre el icono de una calculadora.

# data[].attributes.body
Son cálculos que creamos en lenguaje DAX, pero en este caso no almacenan el resultado del cálculo en memoria, sino que se calculan al momento.

Consumen procesador (CPU) de la máquina en lugar de memoria.

Cuando los utilizamos en los informes y cada vez que aplicamos cualquier filtro se vuelven a recalcular de forma dinámica a gran velocidad.

# data[].attributes.body
Son columnas que creamos en lenguaje DAX y se agregan como una columna más a nuestras tablas.

Se calculan cuando pulsamos el botón “Refrescar”, justo después de la ejecución de todas las consultas de Power Query, cuando ya disponemos de los datos necesarios actualizados para hacer esos cálculos.

Ocupan memoria, al igual que cualquier columna de las tablas, independientemente de si viene del origen.

Para crear una “Columna Calculada” en DAX debemos utilizar el icono del grupo “Cálculos” del menú “Inicio” y asignarle una expresión DAX que devuelva valores para cada una de las filas para dicha columna.

Estas Columnas Calculadas se identifican visualmente por un icono de una cuadrícula con un símbolo de sumatorio (agregación).

Si en lugar de crear una Columna Calculada con valores numéricos, creásemos una columna calculada con valores que sean no numéricos, por ejemplo, extrayendo los dos primeros caracteres del campo ticket, que contiene la serie:

Serie = LEFT( Ventas[Ticket], 2 )

El símbolo cambiaría por fx junto al símbolo de la tabla.

# data[].attributes.body
Son un tipo de tablas especiales que realmente no contienen datos, sólo son una agrupación de medidas que nos facilitan su ubicación en el modelo.

Se identifican visualmente por el símbolo de la calculadora con un encuadre sombreado en las partes superior e izquierda.

# data[].attributes.body
Para crear una tabla en DAX debemos utilizar el icono del grupo “Cálculos” del menú “Inicio” y asignarle una expresión DAX que devuelva una tabla.

Estas tablas se identifican visualmente porque sobre el icono cuadricula habitual asignado a cualquier tabla creada desde Power Query se le agrega el símbolo de la calculadora.

Al igual que las tablas creadas en Power Query, utilizan la memoria para almacenar la información que contienen. En este aspecto no hay diferencia entre una tabla creada en DAX o creada en Power Query, ambas consumen memoria para almacenarse.

# data[].attributes.body
Tablas que provienen de una consulta hecha en Power Query.

Son las tablas más frecuentes de nuestro modelo.

# data[].attributes.body
Una vez disponemos de un modelo de datos con una estructura de tablas, columnas y relaciones óptima, debemos enriquecer el modelo creando cálculos adicionales que aumenten la capacidad de análisis.

# data[].attributes.body
Son aquellas que filtran en ambas direcciones de la relación.

Debemos minimizar su uso, exclusivamente para excepciones en las que no haya otra alternativa.

Aparecen tanto en las relaciones “Uno a Uno” como en las “Muchos a Muchos”, que son los tipos que debes evitar, salvo excepciones muy concretas.

En las relaciones “Uno a muchos”, aunque puedes configurarlas, tampoco debes hacerlo, ya que agregarías complejidad y lentitud al modelo.

Las relaciones bidireccionales están ahí y son necesarias para resolver ciertos problemas muy concretos, son problemas de un nivel medio o avanzado que debes evitar en tus inicios con Power BI.

# data[].attributes.body
Crea la “Dimensión Fecha” acorde a tus requisitos y preguntas de Negocio.

Asigna los Tipos de Datos óptimos a cada columna de cada tabla y ordénala correctamente.

Aplica un formato coherente con el resultado que deben mostrar.

Crea Jerarquías para mejorar la usabilidad.

Define Relaciones correctas y óptimas Habitualmente 1->* (1-Dimensiones, *-Hechos, unidireccionales).

# data[].attributes.headline
Limitaciones de las relaciones en Power BI

# data[].attributes.subject
Limitaciones de las relaciones en Power BI

# data[].attributes.body
No se pueden crear relaciones entre dos tablas por más de un campo.

No se permiten relaciones entre dos columnas de la misma tabla.

Sólo una relación activa. Si creas varias relaciones entre dos tablas, la segunda y posteriores aparecerán como inactivas.

No se permiten referencias circulares. Es decir, no puedes relacionar la tabla1 con la tabla2, la tabla2 con la tabla3 y finalmente la tabla3 con la tabla1, da error.

Si diseñas un Modelo en Estrella óptimo, estas limitaciones serán prácticamente irrelevantes en tus proyectos y las pocas veces que aparezcan, tendrán una solución sencilla.

# data[].attributes.body
“Uno a Muchos”. La más utilizada. Por cada fila de la tabla de la parte “Uno” de la relación, se puede relacionar con muchas filas de la parte “Muchos” de dicha relación. Pero una fila de la parte “Muchos” sólo se puede relacionar con una única fila de la parte “Uno” .

“Muchos a Muchos”. Sólo para situaciones excepcionales. Una fila en una tabla se puede relacionar con muchas filas en la otra tabla de la relación y viceversa. Este tipo de relación puede causar resultados diferentes a los esperados si no tienes muy claro qué hace y dominas su comportamiento.

“Uno a Uno”. Se suele evitar haciendo un buen modelado de datos y combinando previamente las consultas de las que provienen en Power Query. Una fila en una tabla sólo se puede relacionar con una fila de la otra tabla y viceversa.

# data[].attributes.body
Las relaciones entre las tablas de un modelo de datos de Power BI son las conexiones lógicas entre dos o más tablas a través de campos comunes que nos permiten unir datos.

Gracias a ellas, podemos combinar y analizar información de diferentes tablas de forma eficiente.

Las relaciones entre tablas en Power BI afectan a la propagación de filtros a través del modelo.

Para ello aparecen unas “flechitas” en la propia relación que nos indican en qué sentido se propagan dichos filtros a través de cada relación.

En el ejemplo de la imagen, cualquier filtro que hagamos en la tabla “Fecha” se propagará a la tabla “Ventas”, utilizando sólo las filas de “Ventas” cuyas fechas hemos filtrado en la tabla “Fecha”.

Es importante tener en cuenta que para establecer relaciones entre tablas en Power BI, las tablas deben tener un campo en común. Este campo común se utiliza como la base para la relación.

# data[].attributes.body
Una Jerarquía en Power BI, es un grupo de dos o más columnas a las que asignamos un nombre.

Las jerarquías tienen tantos niveles como columnas las compongan.

Siempre que las utilicemos aparecerán en el orden de niveles establecido al crearlas.

Se pueden crear varias jerarquías en una misma tabla.

Las Jerarquías, sólo facilitan la usabilidad a la hora de crear informes. Dicho de otra forma, si no tuviésemos jerarquías, podríamos obtener el mismo resultado en nuestros informes y cuadros de mando.

Los niveles que componen una Jerarquía deben ser columnas de la misma tabla en la que la creas. No puedes crear una jerarquía con columnas de diferentes tablas.

# data[].attributes.body
Para cambiar el orden de una columna sigue estos pasos:

Haz clic sobre la columna que queremos cambiar el orden interno Pulsa la opción “Ordenar por columna”.

Aparece un desplegable que muestra todas las columnas de esa tabla.

Selecciona la columna por la que quieres que quede ordenada.

# data[].attributes.body
Por defecto, una columna se ordena por los valores que ella misma contiene.

Para cambiarlo tenemos la opción “Ordenar por columna”. Es importate hacerlo para aplicar el ordenamiento correcto de datos, por ejemplo en el caso de los meses.

# data[].attributes.body
Asigna a cada columna los tipos de datos óptimos.

Elimina columnas innecesarias para el análisis (de esas que dejas por si acaso algún día hiciesen falta).

Eliminar columna calculadas que podemos convertir en Medidas.

# data[].attributes.body
Aparece cuando no hemos asignado un tipo de datos a una columna en Power Query.

Debes evitarlo siempre.

Si te aparece, ve a Power Query y asigna el tipo de datos óptimo a esa columna.

# data[].attributes.body
Booleano “True” o “False”, que permite almacenar esos dos valores y que internamente almacena 0 para falso y 1 para verdadero.

Binario, que nos permite almacenar diversos objetos y se utiliza principalmente para almacenar fotos o documentos. Sirven para mejorar la interfaz de usuario y la usabilidad. Puedes utilizarlo, por ejemplo, para filtrar en base a la imagen en lugar de una descripción o para mostrar dichas imágenes en un informe o cuadro de mando.   El problema es que esas imágenes o documentos pueden ocupar mucho más espacio que la información en sí. No se recomienda su uso, salvo en escenarios muy concretos en los que, por ejemplo, una imagen aporte claridad al análisis que se va a realizar.

# data[].attributes.body
Permiten almacenar cualquier número, texto o carácter especial.

Puedes almacenar números, pero no podrás hacer operaciones de cálculo sobre ellos, se comportarán como texto.

También se ordenarán como texto: 1, 10, 100, 2, 3…

Hay datos que, aunque contienen números, es recomendable almacenarlos como texto, un ejemplo de ellos es el código postal, ya que queremos almacenar 03345 y no 3145 (aquí el cero por la izquierda lo queremos ver).

Se almacena en “Unicode” (2 bytes por carácter).

Permite hasta 512 MB (256 millones de caracteres).

No se puede especificar la longitud máxima por columna.

Evita que tu base de datos en Power BI tenga columnas como “observaciones”, “comentarios”, etc. Estas columnas pueden ocupar incluso el 80% del tamaño de tu base de datos.

# data[].attributes.body
Fecha y Hora: almacena valores de fechas y horas en la misma columna.

Fecha: almacena sólo la parte de la fecha.

Hora: almacena sólo la parte de la hora.

Es conveniente separar la fecha y la hora en dos columnas diferentes, una que contenga sólo la fecha y otra que contenga sólo la hora. Un año tiene 365 o 366 días, por tanto, las fechas no tendrán más de esos valores diferentes por año.

# data[].attributes.body
Número Decimal: son números en punto flotante. Pueden almacenar valores de hasta 15 dígitos, positivos y negativos, en los que el separador decimal puede colocarse en cualquier parte del número

Número Decimal Fijo: el separador decimal tiene una ubicación fija. Puede almacenar valores de hasta 19 dígitos, almacenando “siempre” 4 decimales -

Número Entero: Permite hasta 19 dígitos en la parte entera, pero no admite decimales.

utiliza el tipo de datos óptimo para cada columna numérica y conseguirás que tus datos ocupen menos espacio y que los cálculos sobre ellos tengan un mejor rendimiento:

Número Entero: si no tiene decimales.

Número Decimal Fijo: si tiene entre 1 y 4 decimales.

Número Decimal: si tiene 5 decimales o más.

# data[].attributes.body
La base de datos de Power BI es una base de datos columnar.

Tiene un almacenamiento y un comportamiento diferente al de las bases de datos relacionales.

Desde el punto de vista del almacenamiento, estas bases de datos:

Almacenan en memoria.

Utilizan una alta compresión de datos.

Almacenan la información por columnas.

Cada columna se almacena ordenada y devuelven la información en ese mismo orden.

# data[].attributes.body
Como todo sistema analítico, Power BI tiene una base de datos.

Los Modelos Semánticos son las bases de datos en memoria de Power BI, estos modelos contienen, además de datos, toda la capa lógica:

Conexiones de datos a cada uno de los orígenes de datos.

Transformaciones que obtienes, transforman, limpian y preparan los datos.

La base de datos en sí, con sus tablas y relaciones, y los datos almacenados.

Cálculos y métricas definidas en DAX .

# 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.headline
Diagrama de dependencias entre consultas

# data[].attributes.subject
Diagrama de dependencias entre consultas

# data[].attributes.body
Conforme va creciendo el número de consultas que vamos creando, es más difícil tener una visión de conjunto de todas ellas y, sobre todo, saber qué dependencias tienen unas consultas de otras.

Por ejemplo, si modificamos o eliminamos la consulta “Categorías”, esto afectará a la consulta “Producto”, ya que en uno de los pasos las hemos combinado.

Para tener una visión global de todas estas consultas y conocer rápidamente qué dependencias hay entre ellas existe el “Diagrama de dependencias entre consultas” que está disponible en el menú “Vista”, en la parte derecha.

# 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.

# 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
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
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
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
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.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 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.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
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
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
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
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
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
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 ú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 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
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
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
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
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
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
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
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
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
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
El 80% de las bases de datos de Power BI no están bien modeladas ni optimizadas.

# 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.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.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.body
Define su Granularidad (máximo nivel de detalle).

Define sus Claves Externas.

Define sus Medidas.

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

# 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
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
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
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
Power BI es una solución de Business Intelligence & Analytics.

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

# data[].attributes.body
Mediante el Lenguaje DAX, podemos crear estos tres tipos de cálculos:

Tablas Calculadas.

Columnas Calculadas.

Medidas.

# 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
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
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.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
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.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
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
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
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.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
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
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
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 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.