4 liens pour la semaine (2013-39)

Encore une belle sélection cette semaine!

  1. Tim O’Reilly qui nous raconte ce qu’il pense avoir raté lorsqu’il a monté les éditions qui portent son nom. Vraiment intéressant, même s’il évite un des plus gros reproches qui lui est fait aujourd’hui : le véritable manque de constance sur la qualité des ouvrages publiés (via HN).
  2. David Graeber sur l‘absurdité de l’échelle de valeur actuelle qui veut que des jobs réellement utiles à la société (profs, infirmières, plombiers…) soient dénigrés par rapport à des jobs sans réelle valeur (les administratifs, les emplois du service qui n’ont de sens que parce que nos propres jobs prennent définitivement trop de temps…). (Commentaires via HN)
  3. Rich Armstrong de Fog Creek Software (la société de Joël Splosky), sur leur politique de travail à distance. Enfin une dont on peut s’inspirer: pragmatique, claire, juste.
  4. Joe Armstrong qui nous détaille à quoi un programmeur passe son temps lorsqu’il développe. Il part d’un débat sur Erlang, mais généralise rapidement. De la vraie sagesse!
  5. Et je triche pour rajouter une sucrerie: Lewis Lehe et Victor Powell qui nous expliquent le paradoxe de Simpson. A lire absolument pour tous ceux qui ont au moins Excel installé sur leur poste. (via FlowingData)

______________________

<< Semaine Précédente – Semaine Suivante >>

Recrutement : moi aussi j’aime mes candidats!

Je ne sais pas si vous vous souvenez, mais il y a quelque mois j’indiquais que je recrutais sur ce même blog.

Depuis j’ai reçu de très belles candidatures, suffisamment pour remplir nos effectifs à l’instant t, voir même trop. En effet, et sans aucune volonté de vantardise – c’est même plutôt du regret, j’ai 2 très bons profils que je ne peux pas intégrer immédiatement.

Un recrutement qui se passe bien!(Oui j’ai changé l’image, elle va tellement mieux celle là 🙂 )

Si je n’écoutais que moi je les prendrais malgré les circonstances actuelles (on en reparle plus tard), mais mes directeurs sont là pour me raisonner : mieux vaut attendre et offrir une vraie belle intégration, que se dépêcher et dégrader l’accueil.

Alors j’ai proposé aux candidats d’attendre, et s’ils ne souhaitaient/pouvaient pas, un coup de main pour rejoindre un de mes copains/concurrents du GUSS (ça sert aussi à ça la communauté !). Pour le moment ils préfèrent attendre.

Pourquoi je vous raconte tout ça ? Parce que le recrutement de haut profils est une des 2 missions critiques de la SSII/société de conseil. Notez que quand je parle de haut profils je ne parle pas ici d’écoles, je parle de savoir-être, de savoir-faire, d’attitude et d’aspirations. La deuxième mission critique pour ces sociétés c’est évidemment de gérer leur carrière, leur donner les clefs pour progresser. Au-delà d’une problématique de valeurs humaines, qui même si j’y adhère, on le sait, ne peuvent pas servir d’arguments dans un business model, c’est ce qui fait le plus de sens d’un point de vue du business. Parce que très pragmatiquement dans le conseil, l’objectif c’est bien d’avoir le meilleur produit possible.

Dr-Evil-Air-Quotes

« Le produit »

Et j’ai tendance à penser que si ces beaux profils sont prêts à attendre, c’est qu’ils espèrent justement ce type de prestation de ma part et de la part de ma société.

Comment savent-ils qu’ils peuvent l’espérer ? Je crois que le premier facteur reste l’échange que nous avons eu dans le processus de recrutement : courtois, clair, humain. Ça paraît être un minimum, mais pour être chassé de manière assez agressive en ce moment (merci le MVP), je peux vous assurer que c’est assez rare.

Et vu que je suis un mec sympa, je vais donner une astuce à tous ceux qui recrutent et qui partagent cet état d’esprit pour le communiquer à leurs futurs candidats. C’est tout simple: c’est l’initiative qu’ont lancé mes camarades de chez kskills : i love my candidates.

I Love My Candidates

Je vous laisse aller jeter un coup d’œil, mais en 2 mots c’est une charte composée de 4 règles simples qui permettent aux candidats de savoir que l’échange entre eux et le recruteur sera bien dans les 2 sens.

Camarades chefs de pôles et recruteurs, je vous encourage vivement à y jeter un coup d’œil, et pourquoi pas y adhérer à votre tour. Moi c’est fait 😉

Un peu de MDX de bon matin…

Je pique exceptionnellement le flambeau à François pour moi aussi vous causer MDX. Évidemment ça ne sera pas aussi pointu (voir piquant) que lui, mais pour une fois j’ai quelque chose à dire sur ce sujet…

A la base mon besoin était assez simple : créer un graph dans SSRS avec une date de départ et une date de fin fixées par des attributs de dimension de SSAS.

Typiquement : j’ai une dimension projet, dans cette dimension j’ai un attribut date de départ théorique (DDT), et un attribut date de fin théorique (DFT). Je veux que peu importent mes faits, mon graph couvre cette période théorique :

MDX - Le Besoin

A mon sens la grande méthode pour faire ça c’est de créer un set de dates allant de la DTD à la DTF. Ce set doit évidemment être composé d’éléments de la dimension Temps utilisée dans le groupe de mesure concerné, il va donc falloir passer des attributs de la dimension projet ([Projet].[DDT].&[…] et [Projet].[DDF].&[…]) à la dimension temps ([Temps].[Date].&[…]).

Le MDX étant un langage particulièrement efficace en termes de manipulation de chaînes de caractères (hur hur), ça va être un bonheur… Trêve de sarcasme, on peut utiliser quelques fonctions VBA en MDX qui vont ici nous sauver la mise (à adapter en fonction des formats de vos dates):

MDX - La requête qui en cast!

Ce n’est pas ultra élégant, mais ça marche… pas !

Le message d’erreur :  La fonction Axis1 attend une expression d’ensemble de tuples pour l’argument . Une expression de chaîne ou numérique a été utilisée.

Notez que la manipulation de projection des dates sur la dimension Temps marche, elle. C’est autre chose qui coince.

Le problème c’est qu’au moment où TimeSet est évalué, on n’a pas de CURRENTMEMBER sur la dimension Projet. En effet, en même temps (ON 1) qu’on essaye de résoudre TimeSet, on parcourt la dimension Projet, le CURRENTMEMBER n’est donc pas figé. On reçoit donc ALL dans le MEMBER_VALUE, que le STRTOMEMBER n’arrive pas à mapper correctement sur la dimension Temps. C’est le drame.

 

Tout ça parce que comme en SQL, en MDX le moteur interprète la requête dans un certain ordre. En faisant un gros raccourci, ici il commence par le FROM, puis le WHERE (slicer), puis les axes en itérant sur le 1 pour résoudre le 0. Dans une étape, tous les éléments sont interprétés en même temps : ça coince effectivement sur le TimeSet.

J’ai du mal à trouver des articles intéressants sur ce sujet, n’hésitez pas à soumettre les vôtres.

Pour comprendre le problème, on peut repartir d’une requête MDX plus simple, et basée sur AdventureWorks (je ne caste plus ma Start Date sur la dimension temps, je veux juste la faire apparaître en ON 1 comme dans mon cas réel):

WITH

    MEMBER Test1 AS [Product].[Start Date].CURRENTMEMBER.MEMBER_UNIQUE_NAME

 

SELECT

        [Measures].[Order Count] ON 0,

        STRTOMEMBER(Test1)

        *

        [Product].[Product].[Product].MEMBERS ON 1

 

FROM    [Adventure Works]

Le résultat, ma date est remplacée par ALL (« Tous les Produits ») dans le STRTOMEMBER(Test1) :

Mauvaise pioche

Si maintenant je filtre mon produit en slicer (typiquement l’endroit où on mettra le paramètre du rapport pour SSRS), la requête devient valide :

WITH

    MEMBER Test1 AS [Product].[Start Date].CURRENTMEMBER.MEMBER_UNIQUE_NAME

 

SELECT

        [Measures].[Order Count] ON 0,

        STRTOMEMBER(Test1) ON 1

       — *

       — [Product].[Product].[Product].MEMBERS ON 1

 

FROM    [Adventure Works]

WHERE    [Product].[Product].&[447]

La c'est bon!

Ici il existe un CURRENTMEMBER au moment où on évalue Test1, tout roule. La solution est trouvée pour mon rapport, à moi de placer mon STRTOMEMBER(@Parameter) dans le WHERE.

Mais oui mais vous voulez itérer en même temps sur le TimeSet/Test1 et les projets/produits ? Il va falloir siouxer et passer l’attribut dans une mesure.

WITH

    MEMBER [Measures].Test1 AS [Product].[Start Date].CURRENTMEMBER.MEMBER_UNIQUE_NAME

 

SELECT

      {[Measures].[Order Count],Test1} ON 0,   

        [Product].[Product].[Product].MEMBERS ON 1

 

FROM   [Adventure Works]

Ce qui donne:

Mouais

Si ça marche pour le cas simple, on perd le cas d’application premier avec le TimeSet. Je n’ai malheureusement pas de solution à l’instant T. Si ça me vient je compléterai.

On a donc vu deux choses : comment passer d’un attribut d’une dimension à une autre grâce aux commandes VBA, et l’ordre d’exécution d’une requête MDX et comment il peut casser vos jolies sets et membres calculés. J’aimerai en rajouter une troisième, la propagation des contraintes sur les attributs dans les dimensions. François en avait parlé aux derniers JSS, j’en remets rapidement une couche ici.

Si quand vous passez votre filtre en WHERE vous utilisez la clef de la dimension, ça marche :

WITH

    MEMBER Test1 AS [Product].[Start Date].CURRENTMEMBER.MEMBER_UNIQUE_NAME

 

SELECT

        [Measures].[Order Count] ON 0,

        STRTOMEMBER(Test1) ON 1

 

FROM    [Adventure Works]

WHERE    [Product].[Product].&[447]

Ca marche!

Par contre si vous utilisez un attribut de plus haut niveau, ça ne marchera pas :

WITH

    MEMBER Test1 AS [Product].[Start Date].CURRENTMEMBER.MEMBER_UNIQUE_NAME

 

SELECT

        [Measures].[Order Count] ON 0,

        STRTOMEMBER(Test1) ON 1

 

FROM    [Adventure Works]

WHERE    [Product].[Model Name].&[Cable Lock]

Ca ne marche plus :/

En effet, si on affiche les relations entre les attributs de la dimension (via SSDT BI), on verra que le Model Name ne contraint pas la Start Date, puisque si les contraintes peuvent remonter l’arbre (Model Name vers Product), elles ne le redescendent pas à partir de là (Product vers Start Date).

La classe ce SSDT BI 2012!A vous d’utiliser les bons attributs, et de bien construire vos cubes, pour que les requêtes fonctionnent bien.

Utilisation du VBA, ordre de résolution des requêtes, propagation des contraintes sur les attributs… Pfiou, c’était du lourd tout ça ! Heureusement que le DAX arrive pour simplifier tout ça (hur hur).

Spéciale dédicace à Jordan Mootoosamy, qui a bien souffert avec moi sur cette requête 😉

SQLSaturday 251 : Retour et slides de la Saisie de données pour la BI

Rapide retour sur l’événement qui a eu lieu samedi 14/09/13, et qui a mon gout a été un vrai succès !

SQLSaturday 251 - L'arrivée

Je n’ai pas les chiffres exacts mais il me semble qu’une centaine de personnes ont répondu présent. Les sponsors étaient là, un grand merci à Fusion-io (vous n’avez plus le droit de ne pas les connaître !), Azeo et D-Cube.

Le PASS était également présent en la personne de Niko Neugebauer (un personnage vraiment sympathique), et en fait toute la communauté du GUSS était là :

SQLSaturday 251 - La communauté

Mais surtout, vous étiez là ! (Bon ok, la première séance le matin c’était un peu dur 🙂 )

SQL Saturday 251 - Reveil Difficile

Concernant notre session sur la saisie de données pour la BI, j’avoue que je suis plutôt satisfait de mon compère David et moi-même. Une seule démo qui plante (désolé mais sans Wizard moi je sais pas faire du Access ;)), à mon sens un bon rythme, en tout cas un bon feeling. N’hésitez d’ailleurs pas à me faire vos retours en commentaire !

SQL Saturday 251 - Session saisie de données!

Enfin, si vous voulez les supports, c’est par là. Vous trouverez toutes les infos sur le licensing lié aux solutions qu’on vous a proposées, et tout un tas de liens pour vous aider à mettre en œuvre les techniques qu’on vous a présenté.

Le webcast arrivera quand il arrivera, mais en attendant n’hésitez pas à lancer Visual Studio et aller vous éclater avec LightSwitch (tous les liens nécessaires dans les slides).

4 liens pour la semaine (2013-37)

Je vous délaisse pour préparer le SQLSaturday (déjà dans 3 jours !), c’est honteux…

  1. Via Jason Kottke, les 5 biais cognitifs dont ont tendance à souffrir couramment les gens qui réalisent, qui se bougent (« get stuff done »). C’est plutôt bien vu…
  2. On continue dans la psychologie avec Michael Buckbee qui nous rapporte un conseil de Conan O’Brian (humoriste américain que j’apprécie beaucoup) pour ceux souffrant du syndrome de l’imposteur (liée à la compétence inconsciente): « Faire semblant ». Via HN.
  3. On enchaîne avec Sebastian Marshall sur la compétence. Simple mais vrai.
  4. Enfin, on donne du sens avec Bill Waddell qui nous rappelle que la vraie compétition, elle est contre soi-même.

______________________

<< Semaine Précédente – Semaine Suivante >>

SQLSaturday à Paris – Session « Saisie de données pour la BI »

(Mise à jour 17/09/2013 : La session a eu lieu et les slides sont par là!)

Je vais suivre le bon exemple de Charly, et moi aussi faire un peu de pub pour ma session au prochain SQL Saturday, joyeusement co-animée avec Monsieur David Joubert !

SQLSAT251_web_thumb1

Alors voici pourquoi il faut venir nous voir, David et moi, pour la session « Saisie de données pour la BI » :

1 – Si on construit des systèmes décisionnels, c’est pour lutter contre l’obscurantisme et promouvoir la pensée rationnelle. Nos combats on les mène contre la simple ignorance mais aussi contre les biais cognitifs, ces petits bugs de la psychologie humaine qui nous font croire n’importe quoi, contre la mauvaise foi ou encore pour démasquer les conflits d’intérêts. Nous sommes les champions du bon sens et nous avons la donnée pour le prouver !

2 – On construit ces systèmes malgré les limites de nos outils, pour offrir les fonctionnalités à nos utilisateurs qui leur permettront de nous rejoindre dans cette juste mission. A nous de les équiper du meilleur pour gagner la lutte.

3 – Une des limites de nos outils, c’est qu’il est bien difficile de permettre à nos utilisateurs de saisir des données. Que ce soit pour saisir des objectifs afin de valider qu’une stratégie mise en place fonctionne bien, ou pour piloter le lancement d’un ETL d’un simple toucher du doigt, ou encore pour apporter des corrections sur un référentiel afin de rétablir la vérité, la fonctionnalité est requise mais pas aussi que ça évidente à mettre en œuvre. Lors de cette session nous verrons comment rendre tout cela possible.

Z’avez vu comment je l’ai joué « Start with Why » ? Pendant 2 minutes j’ai eu l’impression d’être dans Braveheart.

Braveheart fait de la BI

Alors afin quand même de vous éviter une fausse joie, si on parlera rapidement des scénarios MDM et BPM (particulièrement l’élaboration budgétaire), ce sera juste pour dire qu’ils sont hors sujets. Nous on se concentrera sur les petits scénarios aux bornes des grands cas d’usage, qui ne révolutionnent rien au niveau global mais qui changent tout pour l’utilisateur.

Et puis on a le dernier créneau de la journée, 16h-17h, donc le ton sera léger. Et vous nous connaissez, David et moi, vous savez qu’on n’est pas du genre à faire dans l’indigeste.

Alors on se voit le Samedi 14 Septembre ? Pensez juste à vous inscrire, c’est gratuit !