Le Post Infeeny

Les articles des consultants et experts Infeeny

Archives Mensuelles: janvier 2014

Tutorial Power Query

Tutorial Power Query

Image

Contexte

L’objectif de ce tutorial est de pouvoir analyser et croiser toutes les informations concernant:

  • La ponctualité des TGV
  • L’information Transilien (les équipements, les services qui sont proposés dans les gares desservies par le Transilien)
  • Le nombre de voyageurs moyen par gare

Maquette

A l’issu de cet atelier nous obtiendrons une maquette semblable à celle ci-dessous :

Image

Dans ce scenario, nous utiliserons plusieurs requêtes(QUERY) afin de charger des données issues de différentes sources (csv, dossier, web) et réaliserons quelques transformations.

NB : toutes les formules utilisées dans ce tutorial sont codées en langage M, spécifique à Power Query.

QUERY 1 (Gare) : Chargement des données à partir d’un fichier csv

Dans cette requête nous utiliserons les transformations suivantes : « Source csv », « Use First Row As Headers », « Custom Colunm », « Replace Values », « data type ».

Pour charger les données à partir d’un fichier csv, je vous invite à suivre les étapes suivantes :

Dans Power Query :

  • Sélectionnez « From File »  ->  « From CSV » dans « Get External Data »
  • Sélectionnez ensuite le fichier  « Liste des gares de voyageurs du RFN avec coordonnées et adresses postales.csv »

Image

  • Activez « Formula Bar »

Image

  • Modifiez la source afin d’avoir un bon format de données en 1252 et un split par « ; » de type = Csv.Document(File.Contents(« C:\Users\Administrator\Documents\Source SNCF\Liste des gares de voyageurs du RFN avec coordonnées et adresses postales.csv »), null, « ; » , null, 1252)

 

cliquez sur « Use First Row As Headers » afin d’utiliser la première ligne comme en-tête.

Image

Pour créer une colonne calculée réalisant une concaténation :

  • Faites clics  droits -> Insert Custom Colunm

Image

  • Saisissez la formule suivante : Text.Combine({« 87 »,[UIC]})  afin de faire une concaténation du « 87 » et le code UIC pour faciliter le merge avec d’autre table

Image

Pour modifier les types de données :

  • Sélectionnez la colonne « Code UIC »  -> « Data Type » et choisissez le type Number

Image

Sur la colonne « Nom de la gare », remplacez le «-» par un espace afin d’améliorer le mapping avec les fichiers de ponctualité. Pour cela :

  • Utilisez « Replace Values » sur la colonne Région, remplacez la valeur « -CA » par «  Cote d’Azur »

Image

  • Validez les transformations et renommez « Query » par « Gare ».

Résultat attendu :

Image

QUERY 2 (Ponctualité) : Chargement des données à partir d’un dossier

Dans cette requête nous utiliserons : « Source dossier », « Split Column », « Use First Row As Headers », « Custom Colunm », « Transform », « data type », « Calcul de Ratio ».

Parmi les avantages de Power Query, il y a la possibilité de charger un dossier sans avoir besoin d’utiliser une boucle :

Dans Power Query :

  • Sélectionnez « From File » -> « From Folder » dans « Get External Data »
  • Sélectionnez ensuite le Dossier  « Source Ponctualite» (A voir avec le formateur pour le chemin).

Image

  • Parcourez le dossier « Source Ponctualite».

Image

  • Cliquez sur les doubles flèches dans la case « Content » afin de regrouper toutes les données des différents fichiers.

Image

Image

Afin de Splitter les différentes colonnes :

  • Cliquez sur « Split Column » -> « By Delimiter »

Image

  • Sélectionnez le « ; » comme  séparateur de colonne

Image

Image

Pour utiliser la première ligne comme en-tête :

  • Cliquez sur « Use First Row As Headers »

Image

  • Faites un filtre sur la colonne « Départ » afin de retirer la valeur « Départ » qui représentait la ligne d’en-tête de chaque fichier.
  • Pour les colonnes « Nb de circulations » et « Nb trains en retard à l’arrivée », remplacez les blancs par 0 (comme dans la QUERY 1) puis changez le format en « Number »
  • Afin de matcher avec la table « Gare », utilisez la fonction « Transform » puis « Capitalize Each Word » sur les colonnes « Départ » et « Arrivée ».

Image

  • Remplacez les « – » par des espaces sur ces deux colonnes.

Pour calculer le ratio du nombre de retards par rapport au nombre de circulations :

  • Insérez une nouvelle colonne
  • Saisissez la formule suivante :

if [Nb de circulations] = 0 then 0 else [# »Nb trains en retard à l’arrivée »]/[Nb de circulations]

Image

  • Renommez cette colonne « Ratio retard » et changez son format en « Number »
  • Validez et renommez la Query « Ponctualité TGV ».

Résultat Attendu :

Image

QUERY 3 (Equipement des gares) : Chargement des données à partir d’une page web

Dans cette requête, nous allons mettre en pratique les composants suivants : « Source web », « Split Column », « Use First Row As Headers », « data type ».

Dans Power Query :

  • Sélectionnez « From Web»

Image

ImageImage

Afin de Splitter les différentes colonnes :

  • Cliquez sur « Split Column » -> « By Delimiter »

Pour utiliser la première ligne comme en-tête :

  • Cliquez sur « Use First Row As Headers »

Faites les transformations qui suivent afin d’améliorer la correspondance avec les autres fichiers

  • Filtrez sur la colonne « Nombre de bornes d’appel » en retirant la valeur « Nombre de bornes d’Appel ».
  • Changez le format de la colonne « Code UIC » et « Nombre de bornes d’appel » en « Number ».
  • Supprimez la colonne « Gare ».
  • Validez et renommez la query « borne ».

Résultat attendu :

Image

QUERY 4 : Chargement des données à partir d’une page web et calcul des ratios

Dans cette requête, nous utiliserons les mêmes composants que dans la précédente mais avec le « Calcul des Ratios » en plus.

Dans Power Query :

  • Sélectionnez « From Web»
  • Rentrez l’adresse suivante :

http://files.transilien.com/hackdays/voyageurs_montant_en_gare.csv

Afin de Splitter les différentes colonnes

  • Cliquez sur « Split Column » -> « By Delimiter »

Pour utiliser la première ligne comme en-tête :

  • Cliquez sur « Use First Row As Headers »
  • Supprimez la colonne « Gare ».

Calcul des ratios :

Pour calculer le ratio permettant d’avoir le nombre de voyageurs minimum avec le code :

  • Insérez une nouvelle colonne
  • Saisissez la formule suivante :

 if [Nombre de voyageurs montant] = « entre  5000 et 15000 » then 5000 else if [Nombre de voyageurs montant] = « entre  1000 et 5000 » then 1000 else  if [Nombre de voyageurs montant] = « entre  300 et 1000 » then 300 else  if [Nombre de voyageurs montant] = « moins de 300 » then 0 else  if [Nombre de voyageurs montant] = « plus de 15000 » then 15000 else  0

  • Faites la même chose  pour la colonne « Nb Voyageurs Max » :

if [Nombre de voyageurs montant] = « entre  5000 et 15000 » then 15000 else if [Nombre de voyageurs montant] = « entre  1000 et 5000 » then 5000 else  if [Nombre de voyageurs montant] = « entre  300 et 1000 » then 1000 else  if [Nombre de voyageurs montant] = « moins de 300 » then 300 else  if [Nombre de voyageurs montant] = « plus de 15000 » then 15000 else  0

  • Idem pour la colonne « Nb Voyageurs Moyen » :

([Nb Voyageurs Min]+[Nb Voyageurs Max])/2

  • Supprimez la colonne « Nombre de voyageurs montant », modifiez le format des colonnes restantes en « Number ».
  • Validez et renommez la Query « Voyageurs ».

Résultat attendu :

Image

QUERY 5 : Chargement des données à partir d’une page web

Dans cette requête nous utiliserons : « Source web », « Use First Row As Headers », « un split par « ; »  », « Filtrer », « Replace Values ».

Dans Power Query :

Modifiez la source afin d’avoir un bon format de données en 1252 et un split par « ; » de type

  • Modifiez le format de la source

=Csv.Document(Web.Contents(« http://files.transilien.com/gare/gare_20120319.csv »),null, »; »,null,1252)

  • Mettez la première ligne en en-tête avec « Use First Row As Headers ».
  • Pour chaque colonne correspondant à des mesures (exemple : nb d’abris à vélo) ainsi que le code UIC, remplacez les blancs par 0 puis modifiez le format en « Number ». Pour le « CAB Passage Elargi contrôlé », remplacez « Pas de CAB » par 0.
  • Il est possible de filtrer sur la colonne « gare non SNCF » et de ne garder que les 0, c’est-à-dire seulement les gares SNCF.
  • Supprimez alors toutes les colonnes mises à part le code UIC et les mesures.
  •  Validez et renommez la Query « Equipement ».

Résultat attendu :

Image

QUERY 6 : Merge de plusieurs sources

Dans cette requête nous allons faire une jointure entre deux fichiers différents pour cela nous allons utiliser le Merge qui est l’équivalent d’INNER JOIN.

Dans Power Query :

  • Appuyez sur « Merge »  

Image

  • Sélectionnez  la table « Equipement » et le champ « Code UIC complet ».
  • Faites la jointure avec la table « Borne » sur le code UIC en cochant la case « Only include matching rows ».

Une nouvelle Query est créée avec la table « Equipement » contenant une nouvelle colonne « NewColumn ».

  • Appuyez sur Expand
  • Cochez le nombre de bornes d’appel.

Image

  • Une fois la colonne ajoutée, validez.

Résultat attendu :

Image

QUERY 7 : Merge de Query voyageurs avec la Query

Dans cette requête, nous allons faire une jointure entre deux fichiers différents. Pour cela, nous allons utiliser le Merge qui est l’équivalent d’INNER JOIN.

Dans Power Query :

  • Faites une nouvelle jointure « Merge » en sélectionnant la table précédemment créée ainsi que la table « Voyageurs » (toujours sur le code UIC).
  •  Cochez de nouveau la case « Only include matching rows » avant validation.
  • Faites un Expand et cochez le « Nb Voyageurs Min », « Nb Voyageurs Max » et « Nb Voyageurs Moyen ».
  • Validez et renommez la query « Transilien ».

Résultat attendu :

Image

Les « QUERY » sont maintenant créées et peuvent être intégrées au Data Model.

  • Cliquez  sur « Load to Data Model » pour les intégrer  et être utilisées afin de créer des rapports sous PowerView.

Laila TABII

MCNEXT au Techdays 2014

Cartouche01

Comme chaque année MCNEXT est présent aux Techdays, la grande conférence organisée par Microsoft à Paris. Cette année MCNEXT sponsorise le badge que tout le monde portera autour de coup .

En plus des 2 stands (l’un général, l’autre dédié à Windows 8), vous pourrez aussi nous retrouver sur le stand
d’Intel.

MCNEXT anime cette année 5 Sessions :

Le Web mobile avec ASP.Net MVC et jQuery Mobile avec Guillaume Leborgne et Francois Guillot

Applications d’entreprise avec Windows 8.1 avec Guillaume Leborgne et John Thiriet

Vers des applications modernes : retour d’expérience avec Guillaume Leborgne

Portable Class Library et Nuget : Le Combo gagnant avec Edwige SeminaraAudrey Petit (Microsoft) et Sébastien Mornas (Microsoft)

Avec Power BI, engagez le dialogue avec votre CRM avec Sébatien Madar et Siavash Veyssi

Entity Framework, générer ses entités dans une assembly séparée en Database first

Pourquoi séparer ses entités ?

Depuis la version 5 d’Entity Framework il est possible de générer des entités POCO (Plain Old CLR Object) avec une approche « Database First ». C’est-à-dire qu’elles n’héritent plus de la classe “ObjectContext” comme dans les versions antérieures. Elles sont libres de toute logique de persistance et ne contiennent que de la logique métier simple.
Dans nos architectures techniques, les POCO sont souvent utilisés de façon transverse et permettent d’assurer un couplage faible entre nos composants. Ils servent principalement à transférer les données métiers entre les différentes couches de l’application.

Il est donc intéressant de maintenir ses entités dans leurs propres assembly, bien isolées de l’implémentation de la persistance (souvent des repositories). Le fichier edmx qui décrit comment le modèle objet est mappé avec le modèle physique de la base de données restera quant à lui avec l’implémentation de la couche de persistance, puisqu’il génère le DbContext permettant d’interagir avec la base de données.

Passons à la pratique et voyons comment générer les entités dans une assembly différente de l’edmx.

Procédure

Après avoir créé un edmx, nous retrouvons un fichier « *Model.tt » dans l’arbre de l’explorateur de solution :

ModelTemplate

Ce fichier est le template T4 qui génère les classes des entités à partir du modèle décrit dans l’edmx.

Vous pouvez déplacer le fichier « *Model.tt » dans le projet de l’assembly qui contiendra les POCOs. Si vous n’y arrivez pas directement depuis l’explorateur de solution de Visual Studio, vous pouvez déplacer le fichier avec l’explorateur Windows puis réintégrer le fichier dans le projet.

Après l’opération, vous devriez avoir ceci :

Deplacement_ModelTemplate

Maintenant que le template T4 se trouve au bon endroit, nous devons modifier la référence vers l’edmx pour qu’il puisse générer les POCOs de votre modèle. Pour cela, vous devez modifier la ligne 5 dans le fichier « *Model.tt » :

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@   output extension=".cs"#><#

const string inputFile = @"..\..\Shop.Dal\ShopModel.edmx";
var textTransform = DynamicTextTransformation.Create(this);

N’oubliez pas de référencer l’assembly contenant les POCOs sur le projet de l’edmx afin qu’il puisse compiler.

Si le projet ne compile pas, c’est sûrement qu’il manque un « using » dans le fichier « *.Context.tt ». Vous pouvez l’ajouter à la ligne 46 comme ci-dessous :

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using Entities = Shop.Business.Entity;

La procédure est maintenant terminée, néanmoins n’oubliez pas qu’après la mise à jour de votre edmx, il vous faudra déclencher manuellement la génération de vos POCOs en exécutant « Run custom tool » après un clic droit sur le fichier « *Model.tt ».

70-467 – Designing Business Intelligence Solutions with Microsoft SQL Server 2012 – Novembre 2013

La préparation

Comme pour l’examen 70-466, il n’existe pas de training kit officiel. Le programme couvre de l’infrastructure aux différentes couches BI ( SSAS, SSRS, SSIS, MDS/DQS, intégration à SharePoint,… ). Etant intéressé par l’infrastructure, j’ai pu pratiquer Always On et la réplication mais pas dans le cadre de production.  Je ne peux donc que conseiller d’étudier les aspects d’authentification et de délégation et les aspects d’architecture lié à la BI.

L’examen

A peine une pause et j’enchainais sur cet examen que je redoutais et je ne fût pas déçu. Cet examen comporte 2 études de cas avec 10 questions chacun et 30 autres questions.

Les « case study » décrivent l’architecture d’une société et les options envisagées pour la faire évoluer ( cas d’une migration à 2012) et les problèmes rencontrés. Les questions sont assez large, de la validation de choix d’architecture à la résolution de problème en passant par les bonne pratiques. Les questions sont assez difficiles.

Les 30 questions suivantes sont aussi difficiles et sont assez larges sur les sujets de cet examen.

Au final, le MCSE est acquis et le soulagement fût total au moment de valider mon examen.

70-466 – Implementing Data Models and Reports with Microsoft SQL Server 2012 – Novembre 2013

La préparation

J’ai passé les certifications liées au MCSA en me basant sur les excellent training kit, mon expérience et divers sites pouvant répondre à mes questions. Mais lorsque je me suis décidé à passer mon MCSE Business Intelligence, j’ai été surpris de ne pas trouver de training-kit officiel sur ce sujet.
En parcourant le programme de cet examen, trois parties se distinguent: l’administration multidimensionnel ( SSAS et SSRS), le tabulaire.
Pour le multidimensionnel, je me suis basé sur les le training kit 70-448. Concernant le tabulaire, j’ai regardé et pratiqué beaucoup de tutoriels ne pratiquant pas en mission ce nouveau mode.

L’examen

Ayant une forte expérience sur la partie multi-dimensionnel, j’abordais cet examen confiant. Lorsque l’on a un doute, il faut souvent se dire, quelle serait la réponse dans l’esprit Microsoft. En découvrant les 50 questions, l’examen est très complet avec comme d’habitude les questions à choix multiples sur 4 sujets différent, les drag& drop à mettre dans le bon sens.
L’examen s’étant bien déroulé et enchainant le 70-467, ma joie de réussite fut courte.

[N° certif] – [Nom certif] – [Date passage]

Retour d’infos sur les certifs : ressenti, niveau de complexité…
Mettre une ou deux questions (pas d’exactitude) qui vous a paru complexe, commenter à postériori le sujet comme un mini-article technique.
Attention ce n’est pas un Dump (Questions / réponses interdit)

Windows Phone 8 – Déploiement d’applications d’entreprise

Windows Phone 8 offre la possibilité de déployer vos applications d’entreprises sans passer par le store. Ce type de déploiement nécessite néanmoins un peu de préparation.
Préparation

Tout d’abord assurez-vous d’avoir le SDK Windows Phone 8 d’installé sur votre machine. S’il n’est pas présent vous pourrez le télécharger et l’installer sur le lien suivant :
https://dev.windowsphone.com/downloadsdk

Achat du certificat Symantec

Afin de pouvoir déployer des applications d’entreprise hors store il faut au préalable que votre entreprise achète un certificat particulier auprès de Symantec en utilisant le lien suivant :
https://products.websecurity.symantec.com/orders/enrollment/microsoftCert.do
Une fois que l’achat aura été validé vous recevrez plusieurs certificats dont au format pfx.

Génération du jeton de déploiement (Application Enrollment Token ou EAT)

Grace au fichier pfx nous allons pouvoir générer un fichier d’extension eatx. Ce fichier devra être installé sur tous les téléphones où vous souhaiterez déployer votre application d’entreprise. C’est en effet lui qui fait le lien entre votre compte entreprise et les téléphones qui peuvent utiliser vos applications.
Pour générer ce fichier il faut ouvrir une invite de commande en mode administrateur :
 
SearchDeveloperCommandPrompt

Ensuite exécutez les lignes de commandes suivantes :

cd %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\AETGenerator
AETGenerator.exe “CheminVersLeFichierPFX.pfx” VotreMotDePasseIci

Cette dernière ligne de commande génère divers fichiers dont le fichier eatx dont nous allons nous servir pour chiffer le xap de notre application d’entreprise.

Chiffrement du xap

Dans le SDK Windows Phone il existe un script PowerShell permettant de chiffrer le xap en utilisant le fichier eatx précédemment généré.
Avant d’exécuter ce script il faut que votre poste dispose de l’autorisation nécessaire pour exécuter les scripts PowerShell. Pour l’autoriser il faut lancer PowerShell en mode administrateur et exécuter la commande suivante :

Set-ExecutionPolicy Unrestricted

Il faut aussi les certificats au format cer aient été installés sur la machine. Dans le cas de MCNEXT nous disposons de deux certificats à installer :
– Symantec_Enterprise_Mobile_Root_for_Microsoft.cer
– Symantec_Enterprise_Mobile_CA_for_Microsoft_Cert.cer
Le premier est à installer dans les autorités de certification racine et le second dans les autorités de certification intermédiaire.
Voir les captures d’écrans ci-après pour importer le premier certificat.

Ce diaporama nécessite JavaScript.

Le poste étant dorénavant prêt il n’y a plus qu’à exécuter le script PowerShell qui va chiffrer le xap. Pour cela il faut lancer une invite de commande PowerShell en mode administrateur et executer les commandes suivantes en remplacant les chemins et les mots de passe par ce qui convient :

cd “C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile”
.\BuildMDILXap.ps1" -xapfilename "CheminVersLeXap.xap" –pfxfilename "CheminversLeCertificatSuivant\Symantec_Enterprise_Mobile_Cert_for_MCNEXT.pfx" –password VotreMotDePasse

Le nouveau xap est généré dans le même dossier que le xap source et est du même nom avec l’ajout du suffixe _new (exemple MonApp.xap donne MonApp_new.xap).

Déploiement du xap

Il existe diverses manières de déployer un xap d’entreprise. Vous pouvez l’envoyer par mail ou le mettre à disposition sur un site internet ou intranet. Vous pouvez aussi choisir de développer un Hub d’entreprise qui contiendra la liste de toute vos applications et proposera à vos utilisateurs une expérience ce rapprochant du store Windows Phone. Un Hub d’entreprise étant une application comme une autre vous pouvez également vouloir afficher des news sur la société etc… Si cette méthode vous intéresse je vous invite à aller visiter la page suivante :
http://www.windowsphone.com/fr-FR/business/custom-hub
Dans le cadre de cet article néanmoins nous allons nous en tenir au déploiement basique par mail.
Avant de déployer le xap il faut avoir installé le fichier eatx précédemment généré sur le téléphone. Par soucis de simplicité il peut être intéressant de grouper l’envoi du fichier eatx et du xap dans le même mail par exemple :

DeployMail1

En cliquant sur le fichier AET.aetx en pièce jointe la popup suivante s’ouvre proposant d’ajouter le compte entreprise :

DeployMail2

Il ne reste plus qu’à cliquer sur le xap en pièce jointe pour l’installer :

DeployMail3

Vous ne recevrez aucune information concernant le succès ou l’échec de l’installation. Il n’y a plus qu’à aller voir dans la liste des applications si l’application est présente et se lance correctement. Si oui, félicitations vous savez maintenant déployer des xap pour votre flotte d’entreprise !