Obtener datos con Power BI¶
Ejercicio power-bi-get-data-annex.pdf · PDF
Has pasado esta unidad dentro de una sola herramienta. Conectaste Superset a una base de datos, le hiciste preguntas en SQL y guardaste las respuestas como datasets y tablas. Entonces llegas a tus prácticas en una empresa y nadie allí ha oído hablar de Superset. "Usamos Power BI", te dicen, y te dan un portátil con Windows.
¿Empiezas de cero? No. Las fuentes son las mismas seis. Una base de datos sigue pidiendo host, puerto, base de datos, usuario y contraseña. Un CSV sigue teniendo un separador. Lo que cambia es dónde acaban los datos una vez que los has traído, y esa única diferencia explica casi todo lo demás de la herramienta.
En la última página conservaste tu trabajo de dos maneras: una receta (una consulta guardada) o un táper (filas almacenadas). Ten presente esa cocina. La pregunta de hoy es: ¿esta herramienta guarda la receta o el táper?
Qué aprenderás
- Decir qué es Power BI Desktop y en qué se diferencia de una herramienta que funciona en un servidor
- Encontrar un conector en la ventana Get data y decir a qué tipo de fuente llega
- Cargar un archivo CSV y una tabla de PostgreSQL en Power BI, con los mismos ajustes de conexión que usaste en Superset
- Explicar la diferencia entre Import y DirectQuery, y elegir uno para un caso dado
- Comparar dónde acaban los datos en Superset y en Power BI
- Evitar la trampa: creer que "en vivo" siempre es mejor que una copia
Una herramienta sin servidor en medio¶
Power BI es la familia de herramientas de Microsoft para convertir datos en gráficos e informes. Power BI Desktop es el programa que instalas en un ordenador para construir esos informes.
Microsoft lanzó Power BI al público general el 24 de julio de 2015, el mismo año en que nació Superset en Airbnb. Es un producto comercial: una empresa es su dueña y vende servicios a su alrededor. Power BI Desktop en sí es una descarga gratuita, con una pega: solo funciona en Windows. No hay versión para Linux ni para macOS.
La gran diferencia está en la fontanería. Compara los dos esquemas:
flowchart TB
subgraph SUP ["<b>Superset</b>: un servidor en medio"]
direction LR
B1["Tu navegador"] --> S["Superset<br>en un servidor"] --> D1[("PostgreSQL")]
end
subgraph PBI ["<b>Power BI Desktop</b>: todo en tu PC"]
direction LR
P["Power BI Desktop<br>en tu PC con Windows"] --> D2[("PostgreSQL")]
P --> F["<b>Archivo .pbix</b><br>(la nevera)"]
end
En Superset, la conexión se configura una vez, en el servidor, y todo el mundo consulta a través de ella. En Power BI Desktop no hay servidor en medio: el programa se ejecuta en tu PC, se conecta desde tu PC y guarda el resultado en un archivo de tu PC.
Un archivo
.pbixes un informe de Power BI guardado en disco: sus gráficos, la descripción de dónde vienen sus datos y, muy a menudo, una copia de los datos.
Recuerda ese archivo. En la cocina de hoy, es la nevera.
Un muro de conectores¶
En Power BI Desktop, toda fuente empieza en el mismo botón: Home → Get data. Elige More... y se abre la ventana Get Data con una larga lista de fuentes, agrupadas por categorías: File, Database, Online Services y otras.
Un conector es la pieza de una herramienta que sabe hablar con un tipo de fuente.
Es la misma idea que el driver de Conectar Superset a una base de datos, con un formulario delante. Repasa la lista y reconocerás viejos amigos de Fuentes de datos:
| Conector | Categoría | La fuente a la que llega | Ya hiciste esto en Superset cuando... |
|---|---|---|---|
| Text/CSV | File | Un archivo CSV | ...subiste pokemon_df.csv |
| PostgreSQL database | Database | Un servidor PostgreSQL | ...usaste la conexión Dades classe |
| Excel workbook | File | Un archivo .xlsx |
|
| JSON | File | Un archivo JSON | |
| Web | Other | Una dirección web, incluida una API | ...no pudiste: Superset necesitaba antes un script |
Los mismos seis tipos de fuente de siempre. Solo los botones son nuevos.
Power BI cambia cada mes
Microsoft actualiza Power BI Desktop cada mes, y las etiquetas se mueven. Si un menú de tu pantalla no coincide palabra por palabra con esta página, busca el nombre más parecido. Las ideas de aquí (conector, Import, DirectQuery) no cambian.
Tres maneras de entrar¶
Vas a traer los Pokémon a Power BI tres veces: desde un archivo, desde la base de datos como copia y desde la base de datos en vivo.
Desde un archivo¶
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Home → Get data → Text/CSV, elige pokemon_df.csv, Open |
Una vista previa de la tabla |
| 2 | Antes de pulsar nada, lee las tres casillas de la parte superior | File Origin (la codificación), Delimiter (Comma) y Data Type Detection (Based on first 200 rows) |
| 3 | Load | El panel Data de la derecha muestra pokemon_df |
| 4 | Abre la Table view (icono de la barra izquierda) y busca charmander |
949 filas. Mira su celda type_2. |
Mira otra vez el paso 2. Esas tres casillas son las mismas tres comprobaciones que aprendiste a hacer en un editor de texto: codificación, separador y qué tipo de valor contiene cada columna. Power BI adivina las tres por ti. Una suposición puede ser errónea.
Cuidado: \"es el mismo archivo, así que las dos herramientas leen lo mismo\"
No exactamente. Nuestro CSV escribe un valor ausente como las dos letras NA.
| Subida a Superset | Power BI | |
|---|---|---|
El type_2 de Charmander |
NULL: una celda vacía |
El texto NA |
Hay más. Power BI decide qué tipo de valor contiene cada columna mirando solo las primeras 200 filas, a menos que cambies la casilla Data Type Detection. En la columna generation_id, el primer NA está en la fila 803, mucho después de esas 200 filas. Así que Power BI decide que la columna es numérica, y luego se encuentra con 147 celdas que no son números. Ve a ver qué hizo con ellas.
Los mismos ingredientes, dos cocineros, dos platos. Mira siempre lo que la herramienta ha hecho con tu archivo antes de fiarte de un recuento.
Desde la base de datos, como copia¶
Ahora la misma conexión que conoces de Superset, con otra forma. Necesitas la tabla pokemon_by_generation que creaste en Datasets y destino.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Home → Get data → More... → Database → PostgreSQL database → Connect | Una ventana con dos casillas: Server y Database |
| 2 | Server: el host de tu base de datos. Database: su nombre. | Ambos te los dan en clase |
| 3 | Data Connectivity mode: elige Import, luego OK | Una ventana que pregunta quién eres |
| 4 | A la izquierda elige Database (no Windows), escribe tu nombre de usuario y contraseña, Connect | Una advertencia de que la conexión no está cifrada |
| 5 | Lee la advertencia, luego OK | El Navigator: la lista de tablas que puedes leer |
| 6 | Marca public.generations y public.pokemon_by_generation, luego Load |
Las dos tablas en el panel Data; cada una tiene 8 filas |
| 7 | File → Save as, ponle el nombre pokemon_import.pbix |
Un archivo en tu disco |
¿Adónde fueron los cinco ajustes?
| Ajuste | En el formulario de Superset | En la ventana PostgreSQL de Power BI |
|---|---|---|
| Host | Host | Server |
| Puerto | Port | En ningún sitio, si es el habitual 5432. Si no, se añade al servidor como host:puerto. |
| Base de datos | Database name | Database |
| Usuario y contraseña | Username, Password | La ventana siguiente, en la pestaña Database |
| Driver | Instalado en el servidor de Superset (psycopg2) |
Incluido en Power BI Desktop |
Cinco ajustes y un traductor, exactamente como antes. Si la casilla Server te da problemas, recuerda qué es un host: el nombre o la dirección de una máquina. Sin http:// delante, y no el puerto 8088 de Superset. Esa puerta pertenece a la página web de Superset, no a PostgreSQL.
Qué significa la advertencia de cifrado
El cifrado (encryption) embarulla lo que viaja por la red para que solo los dos extremos puedan leerlo. Power BI te avisa de que esta conexión no está embarullada: tu contraseña y tus datos cruzan la red en forma legible. En una red cerrada de aula es aceptable. En la red de una empresa real o por internet, no lo es, y la base de datos debería configurarse para aceptar conexiones cifradas.
Desde la base de datos, en vivo¶
Una vez más, cambiando una sola casilla.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | File → New: un segundo informe vacío | |
| 2 | Repite los pasos 1 a 5 de arriba, pero elige DirectQuery en lugar de Import | El Navigator otra vez |
| 3 | Marca solo public.pokemon_by_generation, luego Load |
La tabla en el panel Data |
| 4 | En el panel Data marca region y n_pokemon |
Power BI dibuja un gráfico de las ocho regiones. Unova es la más alta, con 156; Galar tiene 0. |
| 5 | Mira la barra izquierda y la esquina inferior derecha de la ventana | La Table view ha desaparecido, y la barra de estado nombra el modo de almacenamiento |
¿Por qué ha desaparecido la Table view? Porque no hay ninguna tabla que ver. En DirectQuery, Power BI no guarda filas. Cada gráfico que dibujas, cada casilla que marcas, envía una consulta nueva a la base de datos.
Import o DirectQuery: táper o receta¶
Esa casilla, Data Connectivity mode, es la elección más importante de esta página.
Import copia los datos dentro del informe. DirectQuery deja los datos en la base de datos y pregunta de nuevo cada vez que un gráfico los necesita.
En la cocina:
- Import es el táper. Cocinaste una vez y guardaste el resultado. La nevera es el archivo
.pbix. - DirectQuery es la receta. No se guarda nada. Cada gráfico vuelve a hacer el pedido a la cocina.
| Import (táper) | DirectQuery (receta) | |
|---|---|---|
| Dónde viven los datos | Una copia dentro del archivo .pbix |
En la base de datos de origen; no se copia nada |
| Velocidad | Rápido: los gráficos leen la copia | Tan rápido como responda la base de datos a cada consulta |
| Frescura | Tal como estaban la última vez que pulsaste Refresh | Actual: cada gráfico pregunta al origen |
| Funciona con | Todos los conectores: archivos, web, bases de datos | Solo algunos conectores, sobre todo bases de datos. No Text/CSV. |
| Ojo con | Las tablas grandes dan archivos grandes. No se puede pasar a DirectQuery más tarde. | Una consulta que devuelva más de un millón de filas falla. Se puede pasar a Import, sin vuelta atrás. |
¿Y Superset? ¿A cuál de los dos se parece? A DirectQuery. Superset nunca guarda tus filas: cada gráfico envía una consulta a la base de datos. Esa fue la primera idea de Conectar Superset a una base de datos, y ahora tiene nombre en otra herramienta.
Cuidado: \"DirectQuery es mejor, es en vivo\"
Suena mejor. Es más lento y más limitado. La propia documentación de Microsoft dice que uses Import por defecto, y que vayas más allá solo cuando algo te obligue: datos demasiado grandes para copiarlos, o que cambian demasiado deprisa para que una copia sirva.
¿Un CSV de 949 filas que nunca cambia? Import, obviamente: un archivo solo se puede importar, y la copia es minúscula. ¿Una base de datos de ventas con filas nuevas cada minuto, mostrada en una pantalla de la tienda? Ese es un caso para DirectQuery.
Cuidado: \"Power BI está conectado a mi CSV\"
Leyó el archivo una vez y guardó una copia. Edita el CSV después y el informe no se enterará, hasta que alguien pulse Refresh. Un táper no se rellena solo.
Una API en una sola ventana¶
Recuerda lo que costó traer 20 Pokémon de la PokéAPI a Superset: un script de Python, un archivo CSV y una subida. Superset solo habla con bases de datos, así que la API tenía que extraerse y cargarse primero.
Power BI tiene un conector para eso.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Get data → Web, deja Basic, pega https://pokeapi.co/api/v2/pokemon?limit=20, OK |
Una ventana que pregunta cómo iniciar sesión |
| 2 | Elige Anonymous, luego Connect | Se abre el Power Query Editor con el JSON ya leído: count, next, previous y results mostrado como una List |
| 3 | Haz clic en results, convierte la lista en una tabla y expándela |
20 filas, con las columnas name y url |
Sin script. ¿Está entonces resuelto el problema de la API? Sé honesto con lo que has conseguido:
| Sigue siendo tu problema | Por qué |
|---|---|
| Solo llegó la página 1 | La API reparte su lista en páginas. El campo next contiene la dirección de la página siguiente, y nadie la ha pedido. |
| Los detalles están en otro sitio | Las estadísticas de cada Pokémon viven en su propia dirección: la columna url. Son 20 preguntas más que hacer. |
| Es otra vez un táper | El conector Web importa. El informe muestra la API tal como estaba cuando la cargaste. |
Lo que añade Power BI es que el paso de aplanar (convertir JSON anidado en filas y columnas) se hace con clics en lugar de con código. Esos clics tienen nombre, Power Query, y una página propia en la unidad siguiente: Power Query.
Superset y Power BI, lado a lado¶
Todo lo de esta página en una sola tabla.
| Superset | Power BI Desktop | |
|---|---|---|
| Quién lo hace | Un proyecto de código abierto de la Apache Software Foundation | Microsoft, un producto comercial |
| Dónde funciona | En un servidor; lo usas desde un navegador | En tu PC con Windows |
| PostgreSQL | Una conexión compartida, configurada una vez. Driver instalado en el servidor. | Cada informe se conecta por sí mismo. Driver incluido en el programa. |
| Un archivo CSV | Subido a la base de datos: se convierte en una tabla que todos pueden consultar | Leído dentro del informe: una copia dentro del archivo .pbix |
| Dónde acaban los datos | En la base de datos, siempre. Superset pregunta de nuevo cada vez. | Import: una copia en el .pbix. DirectQuery: se quedan en la base de datos. |
| Una API que responde en JSON | No directamente: primero extraer, aplanar y cargar en la base de datos | El conector Web la lee; aplanas con clics. Solo Import. |
Ninguna de las dos columnas es "la buena". Un equipo que comparte una base de datos y quiere que todos vean las mismas cifras está bien servido con un servidor en medio. Una persona que explora un archivo en un portátil está bien servida con un programa que simplemente lo abre. Saber en qué situación estás es la habilidad.
Pruébalo: los mismos datos, otra herramienta¶
Necesitas un PC con Windows y Power BI Desktop, el archivo pokemon_df.csv de la página de Recursos y los datos de conexión de tu base de datos de clase.
Haz las tres rutas de esta página y luego rellena esta ficha:
| Campo | Qué escribir |
|---|---|
| Las tres casillas de la vista previa del CSV | File origin, delimiter, data type detection |
charmander, type_2 |
Qué muestra Power BI, y qué mostró Superset para la misma celda |
| Los cinco ajustes de conexión | Dónde fue cada uno en la ventana de PostgreSQL |
| La advertencia de cifrado | Una frase: ¿qué no está protegido? |
generation_id |
¿Qué hizo Power BI con las 147 celdas que dicen NA? |
| Import y DirectQuery | Dos diferencias que viste en pantalla |
¿No tienes un PC con Windows en casa? Haz la ficha con tus apuntes de clase, y responde la última pregunta con la tabla comparativa.
Ideas clave¶
- Power BI Desktop es el programa de Microsoft para construir informes. Es gratuito, funciona solo en Windows y no tiene servidor en medio: el resultado es un archivo
.pbixen tu PC. - Un conector es la versión de Power BI de un driver con un formulario delante. Las fuentes son las mismas seis de siempre, y una base de datos sigue pidiendo host, puerto, base de datos, usuario y contraseña.
- Import copia los datos dentro del
.pbix(el táper); DirectQuery los deja en la base de datos y pregunta de nuevo cada vez (la receta). - El consejo de Microsoft es Import por defecto. DirectQuery es para datos demasiado grandes o que cambian demasiado deprisa para copiarlos, y solo funciona con algunos conectores.
- Superset se comporta como DirectQuery: nunca guarda tus filas. Un CSV subido en Superset se convierte en una tabla de la base de datos; un CSV cargado en Power BI se convierte en una copia dentro del informe.
- Dos herramientas pueden leer el mismo archivo de forma distinta:
NAse convirtió enNULLen Superset y se quedó como texto en Power BI. Comprueba siempre lo que ha hecho la herramienta.
Comprobación rápida¶
1. ¿Qué es un conector en Power BI?
- El cable entre el PC y el servidor
- La pieza de la herramienta que sabe hablar con un tipo de fuente
- Una consulta guardada que Power BI ejecuta cada mañana
- El archivo donde se guarda el informe
Un conector es la misma idea que un driver, con un formulario delante: uno para Text/CSV, otro para PostgreSQL, otro para Web, y así. El archivo donde se guarda un informe es el .pbix.
2. Cargas una tabla con Import y guardas el informe. ¿Dónde están ahora las filas?
- Solo en la base de datos
- En los servidores de Microsoft
- En una copia dentro del archivo
.pbix - En ningún sitio: Power BI pregunta de nuevo a la base de datos para cada gráfico
Import es el táper: las filas se copian dentro del archivo del informe. Preguntar de nuevo a la base de datos para cada gráfico es lo que hace DirectQuery.
3. ¿Qué modo de Power BI se parece más a Superset?
- Import, porque ambos guardan una copia de los datos
- DirectQuery, porque ambos dejan los datos en la base de datos y envían una consulta cada vez
- Ninguno: Superset también guarda datos en archivos
.pbix - Ambos, según el gráfico
Superset es un cliente que nunca guarda tus filas: cada gráfico es una consulta a la base de datos. Eso es exactamente lo que hace DirectQuery en Power BI.
4. En la ventana de PostgreSQL de Power BI, ¿dónde va el host?
- En la casilla Database
- En la casilla Server
- En la casilla del nombre de usuario, después de una
@ - En ningún sitio: Power BI encuentra la base de datos por sí solo
Power BI llama Server al host. El puerto solo se añade (como host:puerto) cuando no es el habitual 5432, el nombre de la base de datos va en Database, y el usuario y la contraseña se piden en la ventana siguiente.
5. El type_2 de Charmander es NULL en Superset y el texto NA en Power BI. Ambos leen el mismo CSV. ¿Cuál es la lección?
- Una de las dos herramientas tiene un error
- La segunda herramienta dañó el archivo CSV
- Cada herramienta toma sus propias decisiones al leer un archivo, así que debes comprobar lo que ha hecho
-
NULLyNAson dos nombres para exactamente lo mismo
El archivo solo contiene las letras NA. La subida de Superset las convirtió en un valor vacío real, NULL; Power BI las conservó como texto. Un recuento de "Pokémon sin segundo tipo" se escribiría de forma distinta en cada herramienta. Los mismos ingredientes, dos cocineros.
6. ¿Por qué recomienda Microsoft Import por defecto?
- Porque DirectQuery cuesta dinero extra
- Porque Import siempre muestra los datos más recientes
- Porque los gráficos leen una copia local, así que es rápido y funciona con todos los conectores
- Porque DirectQuery no funciona con bases de datos
Import es rápido (los gráficos leen la copia) y todos los conectores lo admiten. Su precio es la frescura: los datos son tan viejos como el último Refresh. DirectQuery es el compromiso opuesto: actual, pero más lento y limitado a algunos conectores, sobre todo bases de datos.
7. La base de datos de ventas de una tienda recibe filas nuevas cada minuto y una pantalla de la tienda debe mostrar las ventas de hoy en este momento. Un profesor tiene un CSV de 949 filas que nunca cambia. Elige las dos opciones correctas.
- La pantalla de la tienda usa DirectQuery: los datos se quedan en la base de datos y cada gráfico pregunta de nuevo
- La pantalla de la tienda usa Import: una copia siempre está al día
- El CSV del profesor se importa: un archivo solo se puede importar, y una copia de 949 filas es pequeña y rápida
- El CSV del profesor usa DirectQuery para que se mantenga en vivo
Los datos que cambian demasiado deprisa para una copia son el caso de DirectQuery. Un archivo pequeño que nunca cambia es el táper perfecto, y el conector Text/CSV solo admite Import de todos modos.
Con esto se cierra la Unidad 1: sabes encontrar una fuente, entrar en ella, pedir exactamente lo que necesitas, guardar el resultado y hacerlo en dos herramientas distintas. Pero lo que has traído todavía no está limpio. Ya has visto NA, NULL y una columna que no sabía qué tipo tenía. En la unidad siguiente lo arreglas: Unidad 2 · Limpieza.