[SimplePBI] Obtener dataflows sin conexión a un dataset

Hace tiempo que me vengo encontrando en la comunidad con una pregunta que se hace cada vez más frecuento. ¿Como ver que dataflows creados no fueron conectados posteriormente a un dataset?. También le llaman dataflows huerfanos.

Normalmente las personas revisan el linaje view, sin embargo eso solo permite ver una sola area de trabajo. Entonces la respuesta termina siendo "tenes que usar la API aprender sobre varios tiros dinstitos para generar un script que lo valide. 

Este artículo será un deep dive o breakdown para analizar como la librería SimplePBI consiguió obtener los dataflows huerfanos en un método dentro de la clase Admin.

Lo primero que voy a aclarar es que este post no va a explicar como autenticar contra la la API de Power Bi. Puede encontrar mucho de eso por internet o revisar algun script de mi github para anlizarlo. Vamos a partir de la premisa que tenemos un bearer token listo con permisos de Administrador.

El modo de llegar a reconocer estos dataflows nace con un request que identifica dataflows linkeados a un dataset de una area de trabajo en particular.

image

Este request que forma parte de la categoría admin podrá ayudarnos a descartar dataflows puesto que esos si están linkeados. El request tiene una limitante. No puede ejecutarse más de 200 veces por hora. Esto quiere decir que solo podremos obtener una respuesta directa y pronta si tenemos menos de 200 areas de trabajo con dataflows en nuestra organización. Sabiendo de la existencia de este request vamos a formar el path para obtener los huérfanos.

El proceso consta de la siguiente manera:

image

Principalmente necesitamos reducir las areas de trabajo al mínimo por el limitante. Entonces solo formaremos una lista buscando areas de trabajo colaborativas que tengan creado dataflows adentro. 

Por otro lado necesitaremos una lista de todos los dataflows en la organización para poder comparar aquellos linkeados con la totalidad.

Finalmente, tras buscar todos los dataflows linkeados en esos grupos obtendremos los que tienen padres para poder asi ejecutar una condición NOT IN determinando cuales dataflows de la lista total no estan en la lista de los linkeados.

Si queremos analizar el código independiente fuera de la librería podemos analizar este script en mi github.

De ese modo podemos obtener la respuesta del request en una lista de dataflows sin un dataset linkeados o también llamados huérfanos.