Azure Data Factory : Actualiser un modèle Azure Analysis Services et Power BI sans code grâce au MSI !!

Aujourd’hui, nous allons voir comment demander à un modèle Power BI déployé dans le service ou dans Azure Analysis Services (AAS) de se mettre à jour directement via Azure Data Factory (ADF).

Dans les deux cas (Power BI ou AAS) nous allons utiliser le MSI (Managed Service Identity) de ADF qui va surtout permettre à ADF de réaliser directement des actions via les API des services Power BI ou AAS sans passer par un outil tiers comme Azure Automation, Azure Function ou Azure Logic App. Le MSI est un mode d’identification d’Azure qui va donner à votre ressource ADF un identité propre dans l’Azure Active Directory. Nous l’avions d’ailleurs déjà utilisé dans mon article ici dans lequel la ressource ADF se connectait directement à Azure Key Vault pour récupérer la valeur d’un secret.

Plus d’info sur le MSI : https://docs.microsoft.com/fr-fr/azure/active-directory/managed-identities-azure-resources/overview

Pour récupérer les informations d’identité de la ressource ADF, vous pouvez notamment passer par le portail Azure dans les paramètres de la ressource ADF :

fmkf0Pg5IU

Ou dans l’AAD en recherchant le nom de votre ADF dans la rubrique entreprise application :

ABcpsgNMMG

Power BI

Bien sûr, il est possible de mettre en place une planification automatique dans Power BI pour qu’un modèle se mette-à-jour à une fréquence définie (tous les jours à 9h, 2 fois par jour le lundi, mardi…)… Le problème c’est que cela n’est pas synchronisé avec les traitements de chargement de données en amont. Et si par exemple ces traitements de chargement se terminent un jour à 9h10 au lieu de 8h, le Power BI se mettra à jour avec des données incohérentes !

charlo

On va donc utiliser cette méthode pour ordonnancer les traitements et être sûr que notre dataset Power BI sera mis à jour après les chargements de données sources.

Pour donner les droits à ADF de rafraichir le dataset Power BI, il va falloir activer la fonctionnalité “Autoriser les principaux de services à utiliser les API Power BI” dans le portail d’administration Power BI : cf. étape 3 –> https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embed-service-principal#step-3—enable-the-power-bi-service-admin-settings.

Je recommande d’activer cette fonctionnalité que pour un groupe AAD spécifique et de mettre les administrateurs techniques et les identités des ADF dedans, cela évitera aux utilisateurs lambda de faire des bêtises !

sbN4hYgJgt

Une fois que c’est fait, toutes les identités de l’AAD seront visibles dans Power BI et il faut alors ajouter l’ADF en administrateur du workspace contenant le dataset :

chrome_Suq7BHo8cq

Maintenant dans ADF vous allez pouvoir créer un activité Web avec pour paramètres :

  1. URL : l’url de votre dataset https://api.powerbi.com/v1.0/myorg/groups/<groupid>/datasets/<datasetid>/refreshes
    en remplaçant <groupid> par l‘id du workspace et <datasetid> par
    l’id du dataset. Pour les retrouver vous pouvez vous rendre sur les paramètres du dataset dans le portail Power BI et les récupérer dans l’url : https://app.powerbi.com/groups/<groupid>/settings/datasets/<datasetid>
  2. Method : POST
  3. Body : { « notifyOption »: « NoNotification » }
  4. Authentication : MSI
  5. Resource : https://analysis.windows.net/powerbi/api

58VwOTbTqx

Plus d’info sur l’API de refresh de dataset Power BI ici : https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/refreshdatasetingroup

Azure Analysis Services

Pour AAS c’est un peu le même principe, il faut d’abord autoriser l’ADF à mettre à jour un modèle de l’instance AAS. Pour cela, nous allons nous connecter à l’instance AAS via SQL Server Management Studio avec un compte administrateur, faire un clic droit sur l’instance et cliquer sur “Propriétés”

5ClYLXiGJB

Dans l’onglet “Sécurité” cliquer sur “Ajouter…”, dans “Entrée manuelle” entrer app:<applicationID>@<tenantID> en remplaçant l’application id et le tenant id de l’ADF (voir plus haut pour savoir comment récupérer ces 2 informations) puis cliquer sur “Ajouter” et enfin “OK”

RfZWnsen1y

Reste ensuite à créer une activité Web dans un pipeline avec pour paramètres :

  1. URL : l’url de votre modèle AAS https://<region>.asazure.windows.net/servers/<servername>/models/<modelname>/refreshes en remplaçant <servername> par le nom du serveur AAS, <region> par la région de l’instance AAS (westeurope…) et <modelname> par le nom du modèle AAS à mettre à jour. Pour les retrouver vous pouvez vous rendre sur le portail Azure et tout sera visible sur la page de votre ressource AAS.
  2. Method : POST
  3. Body : {type : « full », maxParallelism : 10}
  4. Authentication : MSI
  5. Resource : https://<region>.asazure.windows.net en remplaçant <region> par la région de votre ressource AAS (westeurope…)

t42cee86Kh

Plus d’info sur l’api de refresh AAS ici : https://docs.microsoft.com/fr-fr/azure/analysis-services/analysis-services-async-refresh

Attention ces méthodes sont asynchrones : on donne l’ordre de lancer des rafraichissements et on attend pas la fin, donc les pipelines ADF s’arrêteront avant la fin des rafraichissements. Nous verrons éventuellement dans un prochain article comment surveiller les statuts des rafraichissements avec ADF … A suivre !

FIN !

FADATA

Fabien Adato est Consultant Data et BI chez AZEO. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 pour y assurer le poste de Consultant DATA / BI, autour des technologies Microsoft SQL Server, Power BI et Azure Cortana Intelligence.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *