¡Volvemos con los jueves de post! Después de un pequeño parón veraniego y una adaptación escolar, volvemos a la carga con los jueves de post.
Seguimos con los flujos de tareas translíticos. Si no habéis podido revisar los post anteriores sobre los flujos translíticos, os dejo por aquí los enlaces para que los podáis repasar:
Flujos de tareas translíticos (I)
Flujos de tareas translíticos (II)
¡Volvemos con los jueves de post! Después de un pequeño parón veraniego y una adaptación escolar, volver a la carga.
Para ello, vamos a nuestro dataflow Gen2, y en la parte inferior derecha, dónde configuramos el destino de nuestros datos, nos posicionamos sobre el destino y se nos abre el siguiente menú contextual:
En el que podemos ver que nos indica que el método de actualización es “Reemplazar”, por tanto todos los datos que introduzcamos desde Power BI se nos van a borrar por los datos que vengan de nuestra SQL On-premise. ¿Esto está bien? Es decir, ¿tiene sentido? Como todo, depende de la manera de como quieras que funcione y el objetivo. Para este caso, no queremos que los reemplace, sino que los tenga en cuenta. Para ello hacemos clic en la rueda de configuración:
Y se nos abre la siguiente ventana en la que nos solicita la conexión a utilizar:
Una vez realizada la conexión, seleccionamos si queremos una nueva tabla o insertar los datos sobre una tabla ya existente. Seleccionamos sobre una tabla ya existente y luego seleccionamos la tabla deseada:
Y ahora es dónde nos da la opción de qué hacer con los nuevos datos, si anexarlos a los ya existentes o reemplazar los existentes con los nuevos datos.
Seleccionamos Anexar y ya tenemos configurado nuestro flujo de datos para que nos anexe los datos y no nos reemplace los datos existentes. En principio, parece que ya tenemos nuestro modelo robusto y listo para ponerlo en marcha. Vamos a verlo.
Para ello, vamos a la base de datos y consultamos la información que tenemos dentro de la tabla DimChannel y es la siguiente:
Vemos que tenemos 5 registros únicos. Bien, ahora el usuario, considera que necesita insertar un nuevo canal en la tabla, el 06 cuyo nombre es App Móvil:
Pero resulta que, en el proceso de actualización de la base de datos de origen, se carga el mismo valor (acordaros que el control de ChannelKey sólo lo tenemos implementado para los datos que vienen desde Power BI)
Y nos llega la siguiente información al dataflow:
Si os fijáis bien, tenemos el mismo registro de la anexión de los dos orígenes, pero difieren en la columna de ChannelDescription (acordaros que por detrás SQL Database genera su propio ID para evitar campos duplicados en su base de datos, pero no en nuestro informe de BI). Bien, ahora tenemos una problemática, ¿cómo podemos solucionarlo? Una opción válida sería prohibiendo al usuario introducir datos desde Power BI, cosa la cual los DBAs estarían a favor. Pero no es la opción que vamos ha realizar, sino que vamos a controlar las insercciones desde origen en la SQL Database y vamos a quedarnos únicamente con los datos que interesen. ¿Cómo? Creando una columna en la que registremos si la columna ha sido insertada desde origen o desde Power BI, y en función del resultado, seleccionaremos una u otra.
Para ello, una manera en la que podemos proceder es que en el Dataflow de carga de los datos desde Power BI, generamos una columna personalizada “OrigenPowerBI” con valor igual a 1. Esto significará que todo valor que enviemos desde Power BI, se almacenará con un 1, de la siguiente manera:
Ahora si anexamos nuestros datos de origen y con los datos almacenados en el SQL Database de Fabric, tenemos lo siguiente:
Como podemos ver, lo datos provenientes de Power BI tienen un 1 y los de origen están en null. Estos los vamos a reemplazar por 0. Y obtenemos como resultado:
Ahora lo que podemos hacer es quitar los duplicados de la tabla, y obtenemos lo siguiente como resultado:
Y hasta aquí, el post de hoy. Espero que os haya gustado y os sea útil. Estar atentos a los siguientes post... que se vienen cositas como Flujos de tareas translíticos + IA... ¿Qué puede salir de ahí?
¡Nos vemos en los datos!