Featured image of post Données en temps réel dans votre rapport Power BI avec Microsoft Fabric

Données en temps réel dans votre rapport Power BI avec Microsoft Fabric

Dans cet article je vous propose de tester l’aventure Real-time Analytics de Microsoft Fabric.

Contexte

Microsoft Fabric propose différentes perspectives de gestion de la donnée. Nous allons ici nous concentrer sur la partie temps réel.
Pour cela je vous propose le scénario suivant, nous avons des capteurs qui émettent des données régulièrement, mais pas de manière régulière. Nous voulons pouvoir créer un rapport Power BI pour observer les données en temps réel.
Pour réaliser cela, nous devrons :

  • Simuler l’envoi des données des capteurs.
  • Collecter les données.
  • Traiter les données.
  • Restituer les données dans Power BI.

Présentation de l’architecture

Voici les différentes briques d’architecture que nous allons utiliser :

  • L’envoi des données de nos capteurs sera simulé par un script PowerShell.
  • La collecte des données se fera via un Eventstream de Microsoft Fabric.
  • Le stockage des données sera réalisé" dans une base de données KQL.
  • La restitution des données se fera dans un rapport Power BI.

Le schéma d’architecture est donc le suivant : Schéma d’architecture

Présentation de nos capteurs

Pour simuler les capteurs, nous allons utiliser un simple script PowerShell qui va créer aléatoirement les messages des capteurs. Le script de création des messages des capteurs est le suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Nombre de message à envoyer
$Messages = 100
# Id des capteurs
$HardwareID = "12345", "23456", "34567","45678","67890"

# Boucle d'envoi des messages
for ($i = 0; $i -lt $Messages; $i++) {
    # Création du message à envoyer au format JSON
    $IOTFakeMessage = @{
        HardwareId = "ID-" + $HardwareID[(Get-Random -Minimum 0 -Maximum $HardwareID.Count)]
        Date       = Get-Date
        CaptorInfo = @{
            Temp = Get-Random -Minimum 20 -Maximum 28
            Hum  = Get-Random -Minimum 40 -Maximum 60
        }
    }  | ConvertTo-Json -Depth 99
    # Envoi du message dans la fenêtre PowerShell
    Write-Host $IOTFakeMessage
    # Attente avant le prochain message
    Start-Sleep -Milliseconds (Get-Random -Minimum 200 -Maximum 4000)
}

Pour que cela fonctionne, ouvrez une fenêtre PowerShell, copiez le script et appuyez sur entrée pour l’exécuter.
J’ai testé avec une version de PowerShell Core 7.
Dans cette version du script, les messages sont simplement affichés dans la fenêtre PowerShell.

Préparation de l’environnement Fabric

Création de l’espace de travail

Nous allons créer un nouvel espace de travail pour cette démonstration, comme cela vous pourrez le supprimer à la fin pour libérer les ressources utilisées.

Allez dans Espace de travail dans le panneau de gauche et sélectionnez + Nouvel espace de travail.

Création de l’espace de travail

  1. Choisissez un nom pour votre espace de travail.
  2. Choisissez un modèle de licence supportant les objets Fabric.
  3. Appuyez sur Appliquer pour créer votre espace de travail.

Une fois l’espace de travail créer un rendez-vous dedans.

Passer en mode Real-Time Analytics

  1. Dans le panneau de gauche cliquez sur l’icône des expériences Fabric, tout en bas, c’est Power BI si vous êtes entré par le portail Power BI.
  2. Sélectionnez l’expérience Fabric Real-Time Analytics.

Réouvrez l’espace de travail si vous vous retrouvez sur l’écran d’accueil.

Création de la base KQL

Nous allons maintenant procéder à la création de la base de données KQL

Création de la base KQL - étape 1

  1. Appuyez sur Nouveau
  2. Sélectionnez Base de données KQL.

Création de la base KQL - étape 2

  1. Donnez le nom DemoIOT à la base de données.
  2. Appuyez sur Créer pour créer la base.

Le traitement de création peut prendre quelques secondes.

Collecte et traitement des données

Création du traitement

Nous allons maintenant procéder à la création d’un traitement d’intégration eventstream.

Création du traitement Eventstream - étape 1

  1. Appuyez sur Nouveau
  2. Sélectionnez Eventstream.

Création du traitement Eventstream - étape 2

  1. Donnez le nom DemoIOT à l’eventstream'.
  2. Appuyez sur Créer pour créer l’eventstream'.

La fenêtre d’édition du traitement apparait, nous allons créer un point d’écoute pour nos capteurs en créant une Custom App dans la source du traitement.
Le point d’écoute est supporté par le service bus Azure.

Création du traitement Eventstream - étape 3

  1. Appuyez sur New source.
  2. Sélectionnez Custom App.
  3. Donnez le nom MesCapteurs à la custom app.
  4. Appuyez sur Create pour créer la custom app.

Nous allons maintenant copier la chaine de connexion au point d’écoute pour paramétrer nos capteurs.

Création du traitement Eventstream - étape 4

  1. Vérifiez que vous êtes sur les sources de données.
  2. Sélectionnez la source MesCapteurs.
  3. Appuyez sur l’icône d’œil sir la ligne Connection string-primary key pour afficher la chaine de connexion.
  4. Appuyez sur l’icône de copie pour copier la chaine de connexion.

Script de simulation de capteur émettant vers notre traitement

Nous allons maintenant finaliser notre script simulant nos capteurs en ajoutant l’écriture dans le Azure service bus servant de point d"écoute.
Pour cela, remplacez la chaine de caractère REMPLACER_PAR_VOTRE_CHAINE_DE_CONNEXION par la chaine de connexion copiée à l’étape précédente sur la ligne 2 du script ci-dessous.

Le script PowerShell est inspiré de l’article Azure Service Bus with PowerShell.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Votre chaine de connexion
$ConnectionString = 'REMPLACER_PAR_VOTRE_CHAINE_DE_CONNEXION'
# Nombre de message à envoyer
$Messages = 100
# Id des capteurs
$HardwareID = "12345", "23456", "34567","45678","67890"

$Pattern = 'Endpoint=(.+);SharedAccessKeyName=(.+);SharedAccessKey=(.+);EntityPath=(.+)'
([uri]$Endpoint),$PolicyName,$Key,$Queue = ($ConnectionString -replace $Pattern,'$1;$2;$3;$4') -split ';'

# Depending on your environment you may need to load the assembly System.Web
# $null = [Reflection.Assembly]::LoadWithPartialName("System.Web")

$UrlEncodedEndpoint = [System.Web.HttpUtility]::UrlEncode($Endpoint)
$Expiry = [DateTimeOffset]::Now.ToUnixTimeSeconds() + 3600

$RawSignatureString = "$UrlEncodedEndpoint`n$Expiry"

$HMAC = New-Object System.Security.Cryptography.HMACSHA256
$HMAC.Key = [Text.Encoding]::ASCII.GetBytes($Key)
$HashBytes = $HMAC.ComputeHash([Text.Encoding]::ASCII.GetBytes($RawSignatureString))
$SignatureString = [Convert]::ToBase64String($HashBytes)
$UrlEncodedSignatureString = [System.Web.HttpUtility]::UrlEncode($SignatureString)

$SASToken = "SharedAccessSignature sig=$UrlEncodedSignatureString&se=$Expiry&skn=$PolicyName&sr=$UrlEncodedEndpoint"

# Boucle d'envoi des messages
for ($i = 0; $i -lt $Messages; $i++) {
    # Création du message à envoyer au format JSON
    $IOTFakeMessage = @{
        HardwareId = "ID-" + $HardwareID[(Get-Random -Minimum 0 -Maximum $HardwareID.Count)]
        Date       = Get-Date
        CaptorInfo = @{
            Temp = Get-Random -Minimum 20 -Maximum 28
            Hum  = Get-Random -Minimum 40 -Maximum 60
        }
    }  | ConvertTo-Json -Depth 99

    # Préparation de la requête HTTP
    $Params = @{
        Uri = "https://$($Endpoint.Host)/$Queue/messages"
        ContentType = 'application/json;charset=utf-8'
        Method = 'Post'
        Body = $IOTFakeMessage
        Headers = @{
            'Authorization' = $SASToken
        }
    }

    # Envoi du message vers le service BUS
    Invoke-RestMethod @Params
    # Attente avant le prochain message
    Start-Sleep -Milliseconds (Get-Random -Minimum 200 -Maximum 4000)
}

Finalisation du traitement des données

Nous allons maintenant finaliser le traitement de données des capteurs en indiquant une destination aux données reçues.

Création du traitement Eventstream - étape 5

  1. Appuyez sur New destination.
  2. Sélectionnez KQL Database.
  3. Donnez le nom StockageMesCapteurs dans Destination name.
  4. Sélectionnez l’espace de travail.
  5. Sélectionnez la base de données KQL.
  6. Appuyez sur Create and configure pour continuer.

On paramètre la table de destination dans la base KQL : Création du traitement Eventstream - étape 6

  1. Sélectionnez Nouvelle table.
  2. Donnez le nom MesCapteurs à la table.
  3. Appuyez sur Suivant : Source pour continuer.

Lancez le script PowerShell paramétré avec votre chaine de connexion pour qu’il commence à émettre des données.

Création du traitement Eventstream - étape 7

  1. Sur l’écran Source laissez les paramètres par défaut et appuyez sur Suivant : Schéma pour continuer.

Création du traitement Eventstream - étape 8

  1. Choisissez le format de données JSON.
  2. Vous pouvez voir que des données arrivent de vos capteurs.
  3. Les données de la colonne CaptorInfo sont au format JSON, pour une analyse plus simple nous allons réaliser une transformation de données consistant à créer une colonne par valeur.
  4. Cliquez sur le symbole + pour ajouter une colonne.

Création du traitement Eventstream - étape 9

  1. Saisissez Temp dans le nom de la colonne.
  2. Appuyez sur Créer pour saisir le chemin de la source de données.
  3. Choisir Int dans Type de colonne.
  4. Entrez $.CaptorInfo.Temp dans Nouvelle source. Le symbole $ représente la racine du document JSON, nous indiquons ensuite le nom des clés amenant à la valeur qui nous intéresse.
  5. Appuyez sur OK pour ajouter la colonne.

Création du traitement Eventstream - étape 10

  1. Vous pouvez voir la valeur saisie pour la nouvelle colonie.
  2. Appuyez sur Créer pour ajouter la colonne.

Création du traitement Eventstream - étape 11

  1. Répétez l’opération pour la colonne Hum, entrez $.CaptorInfo.Hum dans Nouvelle source.
  2. Appuyez sur Créer pour ajouter la colonne.

Création du traitement Eventstream - étape 12

  1. Vous pouvez maintenant voir vos 2 nouvelles colonnes.
  2. Vous pouvez supprimer la colonne CaptorInfo. Appuyez sur le chevron vers le bas et sélectionnez Delete column.
  3. Appuyez sur Suivant : Récapitulatif pour continuer.

Création du traitement Eventstream - étape 13

  1. Vous avez fini de configurer la destination, appuyer sur Fermer.

Votre traitement d’intégration ressemble à cela : Création du traitement Eventstream - fin

Restitution des données

Pour la restitution des données, nous allons utiliser les assistants disponibles au niveau de la base de données KQL.

Ouverture de la base de données KQL

  1. Rendez-vous dans votre espace de travail est cliqué sur la base de données KQL.

Création du rapport Power BI

Création du rapport Power BI - étape 1

  1. Vous pouvez voir la base de données KQL que l’on a créée.
  2. Appuyez sur la table MesCapteurs pour la sélectionner.
  3. Appuyer sur les 3 points au niveau du nom de la table pour ouvrir le menu contextuel.
  4. Sélectionnez Générer un rapport Power BI.

L’extraction des données via une requête KQL est faite automatiquement par l’assistant. Une fenêtre de création de rapport Power BI apparait. Le jeu de données associé à ce rapport correspond aux données de notre table.

Création du rapport Power BI - étape 2

  1. Ajouter un visuel Graphique en courbe dans votre rapport et positionnez-le pour recouvrir la zone de dessin.
  2. Dans Données vous retrouvez les champs de votre table extraits par une requête KQL.
  3. Positionez les champs sur le graphique :
    • Mettre Date dans Axe X.
    • Mettre Hum et Temp dans Axe Y.
    • Mettre HardwareId dans Petits multiples.
  4. Votre graphe doit ressembler à cela.
  5. Si aucune donnée n’est présente, relancer le script PowerShell et appuyer sur le bouton Actualiser du rapport.

Création du rapport Power BI - étape 3

  1. Cliquez dans la zone sous les pointillés pour accéder aux paramétrages de la page du rapport Power BI.
  2. Rendez-vous dans l’onglet de mise en forme.
  3. Activez Actualisation de la page en basculant le bouton et cliquez sur le texte pour ouvrir le panneau de configuration.
  4. Paramétrez votre page pour une actualisation automatique toutes les 10 secondes.

Dans le menu fichier, appuyez sur Enregistrer.

Création du rapport Power BI - fin

  1. Donnez un nom à votre rapport.
  2. Sélectionnez l’espace de travail.
  3. Appuyez sur Continuer pour publier le rapport.

Vous pouvez maintenant fermer la fenêtre Power BI.

Test du rapport Power BIPower BI

Retournez dans l’espace de travail où vous avez sauvegardé le rapport Power BI et ouvrez-le.

Rapport Power BI

  1. Vous pouvez voir ici vos données qui vont se rafraichir automatiquement si le script PowerShell s’exécute.
  2. Vous pouvez ajouter un filtre sur les 10 dernières minutes de données pour ne pas voir les données des tests précédents.
  3. Si le rafraichissement ne se fait pas vous pouvez le forcer via le bouton Actualiser.

Lors de mes expérimentations, le rafraichissement automatique du rapport Power BI était plutôt chaotique. Le rafraichissement par le bouton Actualiser rafraichissait bien les données donc c’est la partie Power BI qui ne se comporte pas tout à fait comme attendu.

Conclusion

Dans ce scénario je simule des capteurs d’IOT, mais vous pouvez utiliser cette technique pour n’importe quel type de données. Par exemple vous pouvez monitorer vos scripts PowerShell en envoyant directement des données à la base KQL.

Merci de votre attention.

comments powered by Disqus
Généré avec Hugo
Thème Stack conçu par Jimmy