[SSAS] Créer un filtre pour afficher 12 mois glissants dans Excel

Une petite problématique rencontrée chez un client (un petit clin d’oeil à Samy) : on veut, dans Excel pouvoir sélectionner un mois dans un filtre, et afficher une mesure sur les 12 derniers mois glissants. La réponse simple consiste à sélectionner exactement les mois que l’on veut voir dans notre TCD/graphique. Cependant il est vrai que cette solution n’est pas très « user-friendly ».

Il s’agit bien des 12 mois que l’on veut en abscisse et non la valeur de la mesure cumulée sur ces 12 mois comme le ferait l’implémentation d’une date tool dans notre cube SSAS (cf la copie d’écran ci-dessous)

blog1

Un des soucis est que si l’on crée un set au sein de la dimension temps, on ne pourra pas l’utiliser en même temps qu’un membre de cette même dimension :

blog2.png

De plus, même si cela fonctionnait, le fait de choisir un membre de notre dimension Date filtrerait la totalité de notre cube sur ce membre : dans l’exemple précédent, on aurait uniquement que la tranche du cube du membre [Date].[Month Index].&[201507].

A la rigueur, on pourrait créer un set sur les 12 derniers mois glissants par rapport à la date du jour (MDX basé sur du NOW()), mais on perdrait le côté dynamique de la chose.

Alors comment fait-on ?

On va utiliser une dimension technique (c’est-à-dire une dimension reliée à aucun groupe de mesures) qui sera une dimension role-playing de notre dimension Date.

blog3.png

On va ensuite créer un set basé sur le CurrentMember de cette nouvelle dimension. Grâce à la fonction LINKMEMBER, on va le rattacher à la hiérarchie de la dimension originelle.

On aura ainsi un set contenant des membres de la dimension Date, filtré par un membre de notre dimension role-playing.

blog4.png

On obtient le résultat attendu : en ligne, on choisit le set nouvellement créé, et en filtre, on choisit notre role-playing dimension :

blog5.png

Evidemment, cela marche pour 12 mois glissants, mais on peut ajouter autant de regroupements que l’on veut en créant les bons sets associés.

Publié dans Analysis Services

Journées SQL Server 2015 : Azure Data Factory

Un petit article pour remercier les présents qui ont participé à notre session sur Azure Data Factory avec Thomas. Et plus généralement à toutes les personnes qui sont venues aux Journées SQL Server 2015.

Comme d’habitude, je vous mets les slides à disposition :

Session ADFvsSSIS_JSS2015

Pour aller plus loin je vous donne également les projets ADF qui correspondent aux démos que j’ai pu faire :

Big Data : DemoBigData

Machine Learning : DemoMachineLearning

Avec Thomas, on a préféré avoir une approche par l’utilisation, si vous préférez une approche par comparaison détaillée des fonctionnalités avec SSIS, je vous conseille l’excellente session de Reza Rad, qu’il a pu notamment animer au SQLRally 2015.

En conclusion de cette session, vous l’aurez compris j’espère, Azure Data Factory est un composant que j’apprécie particulièrement pour industrialiser pas mal de cas d’usage, notamment ceux en rapport avec Big Data ou le machine learning. Et même si pas mal de personnes ont tendance à considérer qu’il s’agit d’un ETL dans le cloud, je le qualifierai volontiers de EAL (Extract-Analyze-Load).

Publié dans Big Data, Communauté, Evénement, Machine learning

Réflexions autour de Polybase (SQL Server 2016)

A moins de vivre dans une grotte, vous avez pu voir (et peut-être déjà vous amuser avec) que la CTP de SQL Server 2016 était disponible.

Une des fonctionnalités que j’attendais énormément est Polybase, moteur permettant d’interroger des bases de données relationnelles et du Hadoop dans la même requête de manière transparente.

J’ai ajouté un commentaire sur l’excellent article de Charles-Henri dédié à la prise en main de l’outil, c’est ce commentaire que je vais reprendre en détaillant un peu ici.

Un peu d’histoire :

Polybase était auparavant disponible uniquement sur les appliances APS/PDW de Microsoft. Ces appliances renfermaient à la fois un serveur SQL et un cluster Hadoop. Toute la légitimité de Polybase était d’attaquer ses données de manière totalement transparente où qu’elles soient stockées.

A l’époque, nous, consultants BI, étions plutôt déçus de ne pas pouvoir jouer avec. Je ne crois pas me tromper en disant qu’en France, le marché était/est marginal et que nous n’avons/avions pas beaucoup l’occasion de le rencontrer chez des clients. De ce fait l’annonce de la disponibilité de Polybase avec SQL Server 2016 a suscité un certain intérêt.

Aujourd’hui :

Les use cases

Maintenant que c’est disponible j’ai beaucoup plus de mal à associer les business cases en face du moteur. Si l’on reste sur un contexte décisionnel, le cas d’usage principal serait de laisser une table de forte volumétrie sur le cluster Hadoop tandis que les tables de dimensions seraient sur SQL Server.

Mais je trouve ça quand même très limite niveau urbanisation des SI : qui irait stocker ses tables de faits dans un fichier Excel pendant que ses tables de dimensions sont dans une base relationnelle ? Parce que finalement, ça consiste à faire ça.

De plus pourquoi s’empêcher d’utiliser tous les composants disponibles dans Hadoop, en n’intégrant pas vos tables de dimensions à votre cluster ? Déporter des tables dans SQL Server va vous obliger à utiliser Polybase et tout jugement de valeur ou de polyvalence mis de côté, vous ne pourrez pas utiliser les dernières évolutions des différents composants (Pig, Hive, etc…)

Nouveau moteur

Le point suivant que j’ai relevé dans mon commentaire est le fait de re-développer un moteur from scratch. Alors j’étais un peu partisan car c’est une feature nouvelle sur SQL Server 2016, mais le moteur existe depuis APS/PDW. Ceci dit, ça reste jeune même à l’échelle du Big Data.

Ce qui me gêne principalement, ou m’interpelle, est le fait que Microsoft en partenariat avec Hortonworks a investi pas mal d’argent et de ressource via l’initiative Stinger ou via le développement d’HDInsight pour des avancées majeures sur Hive en terme de performance et d’optimisation. Je pense entre autres à l’utilisation du moteur Tez pour l’exécution de requête, à la vectorisation, ou le Cost Based Optimizer.

De plus Hive évolue très vite, on peut déjà l’utiliser avec Spark, etc…

Ma crainte est que Polybase n’évolue pas avec le même rythme de release. D’ailleurs n’est-il pas encore basé sur de l’exécution de code Map/Reduce (vraie question dont je n’ai pas la réponse à l’instant, mais je n’ai rien trouvé qui ne dise l’inverse), alors que toutes les avancées Big Data promettant le temps réel, ont tendance à s’en passer et à utiliser de nouveaux moteurs, pour ne profiter au final que de la partie système de fichiers distribuées.

Conclusion

Autant avec APS, je pouvais comprendre la nécessité d’un tel moteur : il permettait d’être le point d’entrée unique à nos données. De plus, les clients visés étaient forcément plutôt des personnes venant de SQL Server, c’était sympa de garder les mêmes habitudes en terme d’outil et d’écriture de requêtes.

Aujourd’hui j’ai l’impression que son avantage majeur est de pouvoir écrire son code via un seul IDE (Management Studio), ce qui semble quand même un peu léger. Surtout qu’il s’agit d’un moteur in-fine (Ce serait aberrant de dire que le seul avantage d’un moteur de voiture vient du fait qu’il utilise du SP98)

Et c’est pour ça qu’en conclusion de mon commentaire, j’écris que je préférerais un support de Hive dans Management Studio. Ce ne serait pas compliqué à mettre en oeuvre. Et Hive a exactement été développé pour ça : permettre à des développeurs SQL de travailler sur les données d’un cluster Hadoop. Et ça permettrait d’être au niveau en terme de release, sachant que SSMS a son propre développement maintenant.

Tagged with: , ,
Publié dans Big Data

HDInsight sur Linux

Une petite révolution pour l’offre Big Data de Microsoft avec la mise à disposition d’une version HDInsight basée sur des machines Linux. Ça explique aussi pourquoi j’avais gardé mes scripts bash pour normaliser mes mails dans ma session aux Techdays.

Alors en toute honnêteté, je trouve ça génial et cela montre l’ouverture d’esprit dont fait preuve la firme de Redmond depuis quelques temps.

La preview est déjà disponible, la création dans Azure est toujours aussi simple et se fait en quelques clics :

Capture d’écran 2015-02-20 à 22.09.31

La version d’Hadoop disponible est la 2.6, la dernière donc, disponible également en preview pour HDInsight sur Windows.

Première évolution sympa par rapport à la version Windows, la présence d’Ambari, interface d’administration et de monitoring d’un cluster Hadoop. Cette exclusivité côté Linux est d’ailleurs étonnante, car désormais Ambari est disponible sur HDP sur Windows (distribution Hadoop d’Hortonworks servant de base à HDInsight).

Capture d’écran 2015-02-20 à 22.33.47

L’autre nouveauté attendue qui tombe sous le sens avec une version Linux, est la possibilité de se connecter en SSH sur son serveur :

Capture d’écran 2015-02-20 à 22.14.42

Alors les quelques réflexions toutes personnelles que ça m’amène :

Ce que ça va changer :

– Microsoft met surtout en avant la facilité avec laquelle on va pouvoir porter les modèles que l’on a développés sur son cluster Hadoop On-Premise vers HDInsight dans le cloud. L’idée est clairement d’amener vers Azure, les utilisateurs d’Hadoop familiers avec la plateforme sur Linux.

– Ça devrait également permettre une mise à disposition plus rapide des dernières versions d’Hadoop dans Azure. On avait jusqu’à présent un temps de latence non négligeable pour bénéficier des dernières évolutions de la plateforme sur HDInsight.

Ce qui ne devrait pas changer : 

– On n’a pas vraiment d’informations sur la facturation, mais la communication de Microsoft sur HDInsight a toujours été tournée autour de la mise à disposition d’un moteur de calcul (et non pas de la mise à disposition d’un cluster Hadoop). Du coup malgré un coût de licence bien moindre (Ubuntu versus Windows Server), ça devrait rester inchangé.

MAJ : on a la réponse à cette question sur le site de Microsoft : même facturation pour Linux et Windows (avec néanmoins 50% de remise pendant la preview Linux)

– Cloud exclusivement, tout du moins hors appliance. Pas de communication en effet sur une éventuelle version On-Premise. A voir donc si APS (l’appliance Big Data Microsoft qui intègre HDInsight) intégrera une version Linux.

Les interrogations que l’on peut avoir :

– Quid de l’avenir d’Hadoop sur Windows ? On peut légitimement se poser la question parce que Microsoft et Hortonworks ont investi pas mal de temps (et d’argent :p) pour développer et promouvoir la version Windows de la plateforme. Et de manière plutôt intelligente, pertinente et efficace. Le tout avec des innovations dont a profité la version Linux (initiative Stinger). Mais soyons honnêtes, HDP pour Windows devait son existence en grande partie grace à HDInsight.

Je pense donc que leurs avenirs vont être intimement liés et vont dépendre de Microsoft : Redmond va-t-elle maintenir les deux version d’HDInsight ? Rendez-vous dans quelques temps🙂

Tagged with: , ,
Publié dans Big Data

Techdays 2015 : Détection de spam avec Azure Machine Learning

Un article pour vous remercier d’avoir assisté à notre session aux Techdays.

Je vous mets les slides à disposition :

Techdays_2015_SPAM avec Azure ML

Ainsi que les scripts que j’ai utilisés :

  • Script bash qui ne récupère que le message d’un mail (pour la petite histoire, la véritable raison de l’utilisation de Linux est que j’ai commencé les démos sur une VM  Hortonworks avant de travailler sur HDInsight)

#!/bin/bash

mkdir ./temp
cd ./temp
hadoop fs -get /user/hue/spam/20030228_easy_ham.tar.bz2
tar jxf 20030228_easy_ham.tar.bz2
cd ./easy_ham
for filename in ./[0-9]*; do
deb=$(sed -n ‘1,/^\s*$/{=}’ $filename | tail -1)
fin=$(wc -l $filename | awk ‘{print $1}’)
awk ‘NR==v1,NR==v2’ v1= »$deb » v2= »$fin » $filename | sed ‘s/\r//g’ | sed ‘:a;N;$!ba;s/\n/ /g’ | sed ‘s/$/\r/’ > $filename.cleaned
done
tar -cvf easyham.tar *.cleaned
hadoop fs -put easyham.tar /user/hue/spamcleaned/zipfile/
hadoop fs -mkdir /user/hue/spamcleaned/easyham/
hadoop fs -put *.cleaned /user/hue/spamcleaned/easyham/
cd ../..
rm -fr ./temp/

 

  • Script Pig de normalisation du texte :

/* Chargement des mails */
easyham_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/easyham/’ using PigStorage();

easyham2_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/easyham2/’ using PigStorage();
hardham_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/hardham/’ using PigStorage();
spam_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/spam/’ using PigStorage();
spam2_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/spam2/’ using PigStorage();
/* passage en minuscule */
easyham_lowercase_data = FOREACH easyham_emails GENERATE LOWER($0) as word,0 as flag;
easyham2_lowercase_data = FOREACH easyham2_emails GENERATE LOWER($0) as word,0 as flag;
hardham_lowercase_data = FOREACH hardham_emails GENERATE LOWER($0) as word,0 as flag;
spam_lowercase_data = FOREACH spam_emails GENERATE LOWER($0) as word,1 as flag;
spam2_lowercase_data = FOREACH spam2_emails GENERATE LOWER($0) as word,1 as flag;

/* union des datasets */

lowercase_data = UNION easyham_lowercase_data,easyham2_lowercase_data,hardham_lowercase_data,spam_lowercase_data,spam2_lowercase_data;

/* suppression des url */
without = FOREACH lowercase_data GENERATE REPLACE($0,’http[^\\s]{1,}[\\s]{1,}’,’httphttp ‘),flag;

/* suppression des mails */
without1 = FOREACH without GENERATE REPLACE($0,'[\\s]{1,}[^\\s]{1,}@[^\\s]{1,}[\\s]{1,}’,’ emailemail ‘),flag;

/* suppression balise html */
without2 = FOREACH without1 GENERATE REPLACE($0,'<.*?>’,’ ‘),flag;

/* remplacement des devises */
without3 = FOREACH without2 GENERATE REPLACE($0,’$’,’currency’),flag;
without4 = FOREACH without3 GENERATE REPLACE($0,’€’,’currency’),flag;
without5 = FOREACH without4 GENERATE REPLACE($0,’£’,’currency’),flag;

/* suppression des non-mots */
without6 = FOREACH without5 GENERATE REPLACE($0,'[^\\w]’,’ ‘),flag;

/* suppression des underscore */
without7 = FOREACH without6 GENERATE REPLACE($0,'[_]{1,}’,’ ‘),flag;

/* rajout d’un espace avant et aprËs chaque mot */
without8 = FOREACH without7 GENERATE REPLACE($0,'[ ]{1,}’,’ ‘),flag;

/* suppression des chiffres */
without9 = FOREACH without8 GENERATE REPLACE($0,'[\\s]{1}[0-9]{1,}[\\s]{1}’,’ ‘),flag;

/* suppression des mots de moins de 3 lettres */
without10 = FOREACH without9 GENERATE REPLACE($0,'[\\s]{1}[a-zA-Z0-9]{1,3}[\\s]{1}’,’ ‘),flag;

/* suppression des mots de plus de 10 lettres */
without11 = FOREACH without10 GENERATE REPLACE($0,'[\\s]{1}[a-zA-Z0-9]{10,}[\\s]{1}’,’ ‘),flag;

/* suppression des espaces */
dataoutput = FOREACH without11 GENERATE REPLACE($0,'[ ]{1,}’,’ ‘),flag;

STORE dataoutput INTO ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichieroutput/’ USING PigStorage(‘,’);

 

Avec Florian, plutôt qu’une overview de l’outil ou du théorique, on a préféré se consacrer à un cas d’usage. Si vous êtes intéressés par cette approche, je ne peux que vous recommander l’ouvrage suivant :

51-Fc3QazXL._AA324_PIkin4,BottomRight,-38,22_AA346_SH20_OU08_

Bon apprentissage😉

Tagged with: , , ,
Publié dans Evénement, Machine learning

Journées SQL Server 2014 : Session Hive

Un petit article pour remercier les présents à notre session Hive aux Journées SQL Server 2014, et plus généralement ceux qui ont pu se libérer pour assister à l’événement. 306 présents, c’est un peu moins que l’année dernière, mais ça reste tout de même un chiffre honorable pour une conférence organisée par une association.

J’en profite pour partager nos slides :

Session_Hive_v1.1

le webcast :

Et le lien qui va avec :

– pour télécharger HDP 2.2 (à noter que la version finale est sortie le lendemain de notre session sur laquelle nous avons utilisé la preview) : http://fr.hortonworks.com/hdp/downloads/

Tagged with: ,
Publié dans Big Data, Communauté, Evénement

Journées SQL Server 2014 : il est encore temps de s’inscrire

Pour la 4ème fois, les journées SQL Server reviennent, comme toujours au centre de conférences Microsoft.

Elles se dérouleront les 1er et 2 décembre et il est encore temps de s’inscrire pour les retardataires. Au programme, 2 jours de conférences, 40 sessions, une cinquantaine de speakers, aucune excuse pour ne pas y aller si on est consultant data, BI, DBA ou tout autre métier en relation avec la donnée et particulièrement autour de SQL Server.

hive_logo200-16422e15407f1988

A titre perso, après avoir parlé des langages de requêtes Pig et Hive au SQL Saturday Paris, j’aurais l’occasion d’animer une session, lundi à 14h, accompagné de Julien Buret, directeur technique chez Xebia, intitulée Hive ou la convergence entre datawarehouse et Big Data.

Ce sera l’occasion d’aller un peu plus loin dans la technologie : plan d’exécution, fonctionnement, comparaison des différents moteurs d’exécution et des différentes méthodes de stockage. L’occasion également de constater comment les bases relationnelles ont influencé le développement de Hive.

On espère vous y voir nombreux.

Publié dans Big Data, Communauté, Evénement