mardi 16 avril 2013

Challenge MDX : Generate, TopCount et restriction sur un set... en 2005

Voici un cas marrant sur lequel nous nous sommes penchés avec Thomas Ricquebourg. Nous avons une dimension produit avec une hiérarchie standard (Marque - SousMarque - Produit), une dimension temps avec une hiérarchie (Année - Mois - Jour), une dimension Géographie (Pays) et enfin un groupe de mesures (Quantité et CA) avec des données au jour.
Le but du jeu c'est de ramener les 5 produits les plus vendus par pays pour un mois et une marque donnés. Première étape dans l'écriture de la requête :

WITH SET [Top Product] AS
GENERATE(
[Geography].[Country].Members
,TopCount(
[Product].[Product].Members
,5
,[Measures].[Quantity]
)
)

SELECT [Measures].[Quantity] ON 0,[Geography].[Country].Members
*[Product].[Brand].Member
*[Time].[Month].&[201304]
*[Top Product] ON 1

FROM [MyCube]


Cette dernière va poser un(des) problème(s) : Elle ne me retourne pas les produits les plus vendus sur le mois sélectionné ou encore, le nombre de produit par pays ne sera pas toujours le même et ce malgré le TopCount. A votre avis pourquoi? Comment résoudre ce cas (attention, nous sommes en 2005)?
Comme d'habitude, laisser vos avis dans les commentaires.
Encore une fois je le précise, tout le monde peut laisser libre cours à son imagination. Peu importe que les propositions soient plus ou moins bonnes, l'idée de ce genre de billet c'est de faire resurgir des notions générales à partir d'un cas précis.

samedi 6 avril 2013

Challenge SQL : Upgrade du DELETE


Etant donné que je suis en panne d'inspiration pour faire de billets intéressants et qu'en plus je n'en fais déjà pas souvent, je vais me lancer dans une petite suite de problématique que je vais vous adresser, à vous nombreux lecteurs de ce blog (nombreux relativement à mon cercle de connaissances professionnelles, autant dire que mis à part mes collègues, personne ne passe ici).

vendredi 1 février 2013

Slides des JSS disponibles

Etant donné que je viens de m'aperçevoir que j'avais un Skydrive et que je viens juste d'apprendre à m'en servir, je suis heureux de partager avec vous les slides de la session "Stratégies de processing SSAS 2012" animée au JSS 2012 par David Tang et moi-même.

https://skydrive.live.com/?cid=6836C19F017DA8FF

A dispo si vous avez des questions ou des remarques

mercredi 30 janvier 2013

Composant "poubelle" dans vos DataFlow

 
 

Il arrive de temps en temps que, sous BIDS, nous redirigions la sortie d’erreur de nos composants (et donc les lignes du flux) vers un composant « poubelle » : ce  fameux colonne dérivée qui ne sert à rien. Ce qu’il faut savoir, c’est qu’une fois notre lot lancé avec DTEXEC, donc en dehors du mode debug, le processus va chercher à optimiser le lot en supprimant du Data Flow les composants qui ne servent à rien, donc notre Derived Column « poubelle ». Dit comme cela, rien de bien méchant. Sauf quand votre Data Flow utilise un composant Script qui lit un fichier plat en tant que source et que le message d’erreur est le suivant :

 
 

Du coup, on pense à un souci avec le stream de notre Script, puis à un problème de synchronisation des entrées et des sorties, puis que SSIS a un bug, on « google-ise » sur System.Runtime.InteropServices.COMException, sur le HResult 0xC0047020, etc. En fait, c’est juste que DTEXEC ne sait pas quoi faire des lignes redirigées vers la sortie d’erreur.

Moralité : attention à la signification réelle des messages d’erreur SSIS (mais ça on le savait déjà) et pensons à gérer correctement les lignes que notre flux ne peut pas assimiler. Plusieurs raisons à cela. A la vue de cet exemple, ça peut poser des soucis à l’exécution. Ensuite, cette information mal formatée peut être utile à votre client et doit lui être remontée d’une façon ou d’une autre (une table de log par exemple).