Dashboard en temps réel avec Power BI et Azure Stream Analytics
Durant les Techdays 2015, j’ai présenté un tableau de bord Power BI se mettant à jour en temps réel. Suite à cette présentation, j’ai eu pas mal de questions sur le sujet, et notamment des questions sur la mise en place d’un tel Dashboard.
En fait, il y a 2 manières de faire :
- Soit en utilisant l’API de Power BI : https://msdn.microsoft.com/en-us/library/dn877544
- Soit en s’appuyant sur l’architecture lambda et plus précisément sur Azure Stream Analytics
Dans cet article, nous allons traiter du point numéro 2.
Afin d’avoir une vue d’ensemble de l’architecture lambda, je vais reprendre le slide que l’on a joué durant la session zomBIe des Techdays :
Le sujet d’aujourd’hui est donc la branche temps réel de l’architecture lambda et nous allons mettre en œuvre les composants suivants :
- Un Event Hub
- Stream Analytics avec une sortie vers Power BI (bientôt disponible, inscription à la preview : https://dev.powerbi.com)
- Le nouveau portail Power BI
J’utiliserai aussi un petit programme en c# pour simuler l’envoi d’information en temps réel.
Pré requis
Pour refaire l’exemple de cet article il vous faut :
- Un compte Azure
- Un accès au portail Power BI https://app.powerbi.com
- Si besoin Définir le compte permettant de se connecter au portail Power BI comme coadministrateur de votre abonnement Azure.
J’utilise le même compte pour me connecter à mon portail Azure (compte administrateur) et au portail Power BI.
Event Hub
Présentation
L’Event Hub, va être le point d’entrée des signaux dans notre architecture lambda. Event hub permet l’ingestion d’un grand nombre d’information provenant d’une grande variété d’objets. 1 000 000 d’objets peuvent publier sur un Event Hub en utilisant les protocoles HTTPS ou AMQP. Un Event Hub peut ingérer jusqu’à un million de messages par seconde.
Création d’un Event Hub
Pour paramétrer un Event HUB, connectez-vous au portail Azure.
Cliquez sur le bouton “ + ” en bas à gauche de l’écran, puis sélectionnez “Services d’application”, “Service Bus”, puis “Hub d’évènements”.
Puis cliquez sur “Création personnalisée”
Dans la fenêtre “Créer un hub d’évènements”, renseignez les différents champs. Dans la liste déroulante “Espace de noms” sélectionnez “Créer un espace de noms”. Cela permet de faire apparaître le champ “Nom de l’espace de noms”. Dans ce champ, renseignez l’espace de nom de votre Event Hub. Ci-dessous une copie d’écran :
Passez à l’étape numéro 2 en cliquant sur la flèche en bas à droite. Définissez le nombre de partition (compris entre 8 et 32), ainsi que le nombre de jour de rétention des messages. Pour plus d’information, vous pouvez consulter cet article : https://msdn.microsoft.com/fr-fr/library/azure/dn836025.aspx
Validez la création de l’Event Hub en cliquant sur le bouton de validation en bas à droite de la fenêtre.
Au bout de quelques secondes, votre Event Hub sera créé.
Paramétrage d’un Event Hub
Nous allons paramétrer notre Event Hub. Cliquez sur le “nom de l’espace de noms” que l’on vient de créer (dans cet exemple “FranckMercier-ns”), puis cliquez sur “Hubs d’évènements”. Dans la colonne “Nom”, cliquez sur votre Event Hub (ici “franckmercier”)
Dans la fenêtre de l’Event Hub, cliquez sur “Configurer”. Sous la section “Stratégies d’accès partagé”, définissez les stratégies d’accès à votre Event Hub. Ici, je vais créer une stratégie dont le nom est “FranmerPolicy” et dont l’autorisation est “Gérer”.
Cliquez sur “Enregistrer”
En bas de la fenêtre, apparaît alors les clés d’accès.
Notre Event hub est prêt. Nous allons maintenant créer et paramétrer un service pour consommer les évènements sortant de notre Event Hub. Ce service est Azure Stream Analytics.
Azure Stream Analytics
Stream Analytics est un moteur de traitement d'événements qui permet de récupérer des informations à partir de tous types d'appareils. Stream Analytics inclut l'intégration immédiate aux concentrateurs d'événements (Event Hub) afin d'ingérer des millions d'événements par seconde. Ensemble, les concentrateurs d'événements et Stream Analytics vous permettent de traiter de gros volumes de données et de prendre des décisions en temps réel.
Création d’un service Azure Stream Analytics
A partir du portail Azure, cliquez sur le bouton “ + ” en bas à gauche de la fenêtre. Sélectionnez “Services de données”, “Stream Analytics”, “Création Rapide”. Renseignez les différents champs, puis cliquez sur “Créer une tâche Stream Analytics”.
Au bout de quelques secondes, mon service Azure Stream Analytics a bien été créé :
Paramétrage du Service Azure Stream Analytics
Maintenant que notre service Azure Stream Analytics a été créé, nous allons le paramétrer pour recevoir les informations provenant de notre Event Hub (puis éventuellement les transformer), pour les envoyer ensuite vers un portail Power BI.
Paramétrage d’une entrée
Cliquez sur le nom de votre service Azure Stream Analytics (“franmer” dans cet exemple). Puis cliquez sur “Entrées”. Cliquez sur “Ajouter une entrée”.
Azure Stream Analytics a la possibilité de traiter plusieurs entrées. Ces entrées sont de 2 types :
- Une entrée de flux de données (Event Hub)
- Une entrée de données de référence (afin d’enrichir un flux de données, avec des données statiques (provenant d’un fichier JSON par exemple))
Pour cet exemple, nous allons choisir l’entrée “Flux de données”. Cliquez sur la flèche en bas à droite.
Nous allons sélectionnez “Concentrateur d’évènements” (Event Hub). Cliquez sur la flèche en bas à droite.
Dans le champ Alias d’entrée, renseignez le nom que vous souhaitez donner à votre entrée dans le service Azure Stream Analytics (ici, j’ai donné le nom “Input”)
Dans la liste déroulante “Abonnement”, il y a une option intéressante qui vous permet d’aller connecter Azure Steam Analytics sur un Event Hub se trouvant dans un autre abonnement Azure. Pour cette démonstration, nous allons sélectionner “Utiliser le concentrateur d’évènements de l’abonnement actuel”.
Ci-dessous une copie d’écran de mon paramétrage. Sélectionnez les informations liées à votre Event Hub. Dans le champ “Nom de la stratégie de concentrateur d’évènements”, faîtes attention à bien choisir la stratégie que l’on a défini lors du paramétrage de l’Event Hub (“FranmerPolicy” dans mon exemple).
Passez à l’étape numéro 4.
Dans la dernière étape nous allons choisir les paramètres de sérialisation. Nous avons le choix entre “Avro”, “CSV” ou “JSON”. Nous allons sélectionner JSON, car le programme que je vais utiliser envoi des informations dans le format JSON. Cliquez sur la coche en bas à droite pour terminer le paramétrage de l’entrée.
Après validation, vous devez obtenir ce genre de résultat.
Paramétrage d’une requête
Maintenant que nous avons défini une entrée, nous allons définir une requête pour récupérer les données. Cette requête peut être un simple “select” ou une requête plus complexe permettant de transformer les données ou réaliser des opérations sur des fenêtres de temps (faire une moyenne toutes les 5 secondes).
Cliquez sur “Requête” pour définir la requête de traitement des données. Notez que le langage utilisé est très proche du T-SQL. Pour cet exemple, je réalise juste un sélect de tous les champs qui sont présents dans l’entrée de mon service :
SELECT MyTime, SucetteID, Produit, Vente, TotalVente, objectif FROM Input
Cliquez sur “Enregistrer”, et confirmez l’enregistrement.
Paramétrage de la sortie
Nous allons maintenant définir la sortie de notre service vers un portail Power BI. (Il se peut que cette fonctionnalité ne soit pas encore disponible au moment où vous lirez cet article, mais cela ne saurait tarder à arriver).
Cliquez sur “Sorties”, puis sur “Ajouter une sortie”.
La liste des sorties disponibles s’affiche à l’écran.
Avant d’aller plus loin, ouvrez dans un autre onglet de voter navigateur Web votre portail Power BI via l’adresse https://app.powerbi.com. Connectez-vous avec le même compte que celui que vous utilisez actuellement pour paramétrer Azure Stream Analytics. 5il se peut que ce comportement évolue, mais c’est celui que j’ai actuellement avec la version preview).
Sélectionnez “Power BI” puis passez à l’étape d’après.
Sélectionnez “Autorisez maintenant”.
La fenêtre suivante va apparaître quelques instants :
Définissez dans la fenêtre “Ajouter une sortie Microsoft Power BI” le nom de la base de données ainsi que le nom de la table. Si la table existe déjà côté Power BI, elle sera remplacée par la nouvelle. Validez vos modifications.
Vous devez obtenir une nouvelle sortie pour votre service Azure Stream Analytics.
Il ne nous reste plus qu’à démarrer le service. En bas de la page, cliquez sur le bouton démarrer.
Sélectionnez “Heure de démarrage de la tâche” puis validez.
Simuler l’injection de données
Bon tout ça c’est bien beau, mais maintenant, comment on envoie les données.
Pour ce faire, j’ai utilisé un petit programme en c# qui permet de simuler l’envoi de données, mais surtout il permet de voir comment se connecter à un Event hub pour justement lui envoyer les données.
Dans un premier temps, dans mon fichier “Program.cs”, j’ai le code suivant. Dans la partie en rouge, il faut remplacer les valeurs par celle de votre Event Hub.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging;
using Newtonsoft.Json;
using Microsoft.ServiceBus;
namespace Sucettes
{
class Program
{
static void Main(string[] args)
{
//Définition des variables
//Variables pour l'event hub
string eventHubName = FranckMercier"";
string eventHubNamespace = "FranckMercier-ns";
string sharedAccessPolicyName = "FranmerPolicy";
string sharedAccessPolicyKey = "Y++SUDhybyDVIKXfwN+FZUIVSxK7vjOaFQphW5v3tsA=";
Random MyRandom = new Random();
//Initialisation du serice bus
var settings = new MessagingFactorySettings()
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sharedAccessPolicyName, sharedAccessPolicyKey),
TransportType = TransportType.Amqp
};
var factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", eventHubNamespace, ""), settings);
EventHubClient client = factory.CreateEventHubClient(eventHubName);
List<Task> tasks = new List<Task>();
//Création d'une variable liste pour stocker mes objets ventes
List<Ventes> MyVentes = new List<Ventes>();
List<string> ListeSucettes = new List<string>();
ListeSucettes.Add("Tourbillon");
ListeSucettes.Add("Festive");
ListeSucettes.Add("Canne");
ListeSucettes.Add("Love");
ListeSucettes.Add("Sensuelle");
for (int i = 0; i < ListeSucettes.Count; i++)
{
MyVentes.Add(new Ventes(i, DateTime.UtcNow, ListeSucettes[i], 0,0,2000000));
}
while (!Console.KeyAvailable)
{
for (int j = 0; j < 5; j++)
{
MyVentes[j].Vente = MyRandom.Next(0, 9);
MyVentes[j].MyTime = DateTime.UtcNow;
MyVentes[j].TotalVente = MyVentes[j].TotalVente + MyVentes[j].Vente;
var Vente = MyVentes[j];
// Serialize to JSON
var serializedString = JsonConvert.SerializeObject(Vente);
Console.WriteLine(serializedString);
EventData data = new EventData(Encoding.UTF8.GetBytes(serializedString))
{
PartitionKey = Vente.SucetteID.ToString()
};
// Send the metric to Event Hub
tasks.Add(client.SendAsync(data));
}
Thread.Sleep(1500);
}
}
}
}
Ce programme appelle une classe Vente.cs qui définit la structure de mes ventes :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sucettes
{
public class Ventes
{
public DateTime MyTime { get; set; }
public int SucetteID { get; set; }
public string Produit { get; set; }
public int Vente { get; set; }
public int TotalVente { get; set; }
public int objectif { get; set; }
public Ventes(int mId, DateTime mDate, string mProduit, int mVente,int mTotalVente, int mObjectif)
{
this.Produit = mProduit;
this.Vente = mVente;
this.SucetteID = mId;
this.MyTime = mDate;
this.TotalVente = mTotalVente;
this.objectif = mObjectif;
}
}
}
Lors de l’exécution du programme, voici un exemple des données envoyées à l’Event Hub :
Le code se trouve ici : https://1drv.ms/1Erx7hf
Utilisation de l’application
Dans le dossier, il y a aussi un fichier IoT.zip qui est en fait directement l’application avec un fichier de configuration.
Une fois le fichier IoT.zip récupéré, décompressez-le. Vous devez vous retrouver avec les fichiers suivants :
Localisez le fichier “Test.exe.config” , puis ouvrez le avec un éditeur de texte. En haut du fichier, renseignez les informations de votre Event Hub.
Sauvegardez vos modifications. puis double-cliquez sur le fichier “Test.exe” pour envoyer les évènements à votre Event Hub.
Exécutez le programme “Test.exe” pour vérifier le bon fonctionnement.
Récupérer les données dans le portail Power BI
Maintenant, connectez-vous au portail Power BI via l’adresse https://app.powerbi.com.
Dans le volet de gauche, dans la partie “DataSet”, une nouvelle source de données, “Sucettes” vient d’apparaître. Elle est reconnaissable avec le petit astérix vert.
A droite de la source de données, cliquez sur les 3 petits points puis sur “Explore”.
Vous arrivez donc dans la partie de création de rapports. Power BI vous permet donc, à partir d’une source de données, et en mode Web, de créer vos rapports en sélectionnant les différentes dimensions et mesures de votre source de données. Dans l’exemple ci-dessous, j’ai créé une jauge représentant les ventes par rapport à un objectif.
Une fois la gauge créée, je peux l’épingler sur mon Dashboard Ventes (le Dashboard Ventes est celui sélectionné pour recevoir les différents éléments du rapport).
Sauvegardez votre rapport en cliquant sur “Save”, puis cliquez sur le nom du Dashboard. Ici, le Dashboard utilisé est le Dashboard “Ventes”.
Comme le rapport est “branché” sur une source de données alimentée en temps réel via Azure Stream Analytics, les données de la gauge sont mis à jour en temps réel. Sauf que là pour le voir dans un article blog, ce n’est pas terrible :) !!
Alors j’ai fait une petite vidéo :)
https://www.youtube.com/watch?v=3mRudSv1IjY&feature=youtu.be
Surveillance du service Azure Stream Analytics
Le service Azure Stream Analytics, fournit aussi un tableau de bord de supervision ainsi que la possibilité de pouvoir consulter les journaux d’évènements liés au service. Ce qui peut être bien utile pour comprendre ce qui se passe (surtout quand ça ne fonctionne pas :)).
Dans votre service Azure Stream Analytics, cliquez sur “Tableau de bord” afin de voir les évènements liés à votre service (vous pouvez aussi cliquer sur “Surveiller”, juste à côté de “Tableau de bord”).
Dans le tableau de bord, vous avez par défaut les indicateurs courants de supervision du service ainsi qu’un accès au journal des opérations. Cliquez sur le lien “journaux des opérations”, pour ouvrir la fenêtre de gestion des services.
Dans la fenêtre “Services de gestion”, vous pouvez voir les évènements liés à votre service Azure Stream Analytics.
Vous avez maintenant toutes les billes pour réaliser de beaux rapports Power BI avec des sources de données temps réel :) !!
Sessions de formation gratuites :
-
- Microsoft Virtual Academy : https://www.microsoftvirtualacademy.com/
Pour tester Windows Server 2012, Windows 8, SQL Server 2012 et SQL Server 2014 CTP2, vous pouvez télécharger gratuitement la version d’évaluation disponible sous la forme :
Windows Server 2012 :
-
- d'une image ISO : https://aka.ms/jeveuxwindows2012
- d'un fichier VHD avec un système préinstallé : https://aka.ms/jeveuxwindows2012
SQL Server 2012 :
Evaluation SQL Server 2014 CTP2 :
Evaluation Power BI :
Testez Azure gratuitement pendant un mois :
Comments
- Anonymous
January 01, 2003
D'après ce blog : http://blogs.technet.com/b/powerbisupport/archive/2015/02/06/power-bi-sign-up-walkthrough.aspx
ce n'est pas encore possible. J'ai quand même refait un test et ça n' pas bougé.Il faut un compte d'entreprise ou du type domaine.onmicrosoft.com. J'ai fait des tests avec mon compte Hotmail et j'obtiens le message : "Assurez-vous d'avoir correctement saisi le nom de domaine de votre organisation. A suivre donc... - Anonymous
March 21, 2015
Cela ouvre des possibilités extraordinaires !
Pour se loguer à PowerBI, il faut absolument un compte d'entreprise (et donc Office 365 ?). Cela ne semble pas fonctionner avec mon Microsoft account (@hotmail.com) alors que je suis bien admin de plusieurs tenant Azure.
Tu confirmes ? - Anonymous
May 30, 2015
A l’instar de Microsoft HDInsight, Microsoft Power Bi n’échappe pas à la dynamique de constante évolution