Skip to content

franmer2/AzurePurviewFullPBILineage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Obtenir un linéage Power BI complet dans Azure Purview

Azure Purview possède un connecteur pour scanner les assets Power BI qui se trouvent aussi bien dans les espaces de travail personnel ou collaboratif. Azure Purview est aussi capable de récupérer le linéage existant dans Power BI service pour le rendre disponible au sein d'Azure Purview Studio. De plus Azure Purview possède aussi le linéage des autres assets qui servent parfois à la création des datasets de Power BI. Il manque cependant le lien entre ces deux linéages permettant d'avoir une vision globale des mouvements et transformations de données, de la source au tableau de bord Power BI, afin d'obtenir une vision similaire à celle ci-dessous :

PBIFullLineage

Au passage, Merci à Will Johnson pour son aide !

Pré requis

Scénario

Après avoir scanné nos sources de données, et si nos mouvements de données sont orchestrés soient via ADF ou Azure Synapse Pipeline, nous avons nativement 2 linéages :

Un linéage représentant les assets Power BI: Lineage1

Un linéage qui part de la source, le lac de données, et qui termine dans une base de données Azure SQL Database comme illustré ci-dessous. Le but pour moi, est de lier les 2 assets représentés en rouge au dataset Power BI pour compléter le linéage

Lineage2

Le script

Pour compléter le linéage, nous allons utiliser le script python ci-dessous.

Mais avant, nous allons avoir besoins des informations suivantes :

  • le "Fuly qualified name" de nos assets Azure SQL. Ci-dessous, un exemple pour un des assets Azure SQL :

AzureSQLAssetFQN

Les informations du "Fuly qualified name" de l'asset Power BI. Et oui! Pour les datasets Power BI, il y a une feinte 😅. Dans le "Fuly qualified name", il faut remplacer datasets par datasetprocesses !

PowerBIDatasetFQNInfo

Dans le script ci-dessous remplacer les valeurs en fonction de votre environnement. Pour la variable name ce n'est ni plus ni moins que le nom de l'asset (dans le cas illustré ici, je peux utiliser le nom TicketReportTable), même si vous pouvez mettre le nom que vous souhaitez.

import json
import os
from pyapacheatlas.auth import ServicePrincipalAuthentication
from pyapacheatlas.core import PurviewClient, AtlasEntity, AtlasProcess
from pyapacheatlas.core.util import GuidTracker

if __name__ == "__main__":
    purview_Account_Name = "<YourAzurePurviewAccountName>"
    oauth = ServicePrincipalAuthentication(
        client_id="<Your Client ID>",
        tenant_id="<Your Tenant ID>",    
        client_secret="<Your Secret>"
    )
    client = PurviewClient(
        account_name=purview_Account_Name,
        authentication=oauth
    )
    gt = GuidTracker()
    
    # Variables for the Azure Purview asset / process on which you want to add a link    
    LINEAGE_TO_CHANGE_QUALIFIED_NAME = "https://app.powerbi.com/groups/<YOUR GROUP ID>/datasetprocesses/<YOUR DATASET ID>"    
    LINEAGE_TO_CHANGE_NAME = "FabrikamEntertainment_TicketReport"    
    LINEAGE_TO_CHANGE_TYPE = "powerbi_dataset_process"    
    
    # Get a "dummy process" that will be uploade    
    dummy_existing_process = AtlasProcess(
        name=LINEAGE_TO_CHANGE_NAME,
        typeName=LINEAGE_TO_CHANGE_TYPE,
        qualified_name=LINEAGE_TO_CHANGE_QUALIFIED_NAME,
        inputs=None,  # Set to None so no update will occur        
        outputs=None,  # We will update this with set_outputs below        
        guid=gt.get_guid()
    )
    
    # Create reference to inputs to be added. 
    # Specify name, typename, and qualified_name, leave guid as None    
    # Leaving guid as None (in PyApacheAtals 0.5.0 and above) will convert into an Atlas Header    
    # and you don't need to include them in the batch update        
    customer_table = AtlasEntity(
        name="<YOUR ASSET NAME>",
        typeName="azure_sql_table",
        qualified_name="<YOUR FULY QUALIFIED NAME>"    
        )
    report_table = AtlasEntity(
        name="<YOUR ASSET NAME>",
        typeName="azure_sql_table",
        qualified_name="<YOUR FULY QUALIFIED NAME>"    
        )
    
    # Add the inputs    
    dummy_existing_process.inputs = [customer_table, report_table]
    
    # Upload the dummy existing proces to replace the input lineage    
    complex_results = client.upload_entities(batch=[dummy_existing_process])
    print(json.dumps(complex_results, indent=2))

Ci-dessous une copie d'écran de mon script dans Visual Studio Code :

VSCode

Après exécution du code, vous deviez un beau linéage complet comme illustré ci-dessous :

PBIFullLineage

Une courte vidéo est disponible ici

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published