PowerPivot pour Sharepoint

2 avril 2010 par Djeepy1

Lors des TechDays 2010, j’ai animé une session intitulée PowerPivot pour l’IT avec Jean-Christophe Benard de Microsoft.

Cette session présente la version serveur de PowerPivot à savoir son extension sur un portail Sharepoint 2010; comme peut l’être Excel Services avec Excel.

Vous pouvez retrouver cette session ici :

http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=4bfc3af5-c1e9-4721-987d-3bd26dbad433

Et les slides ici :

http://cid-9b2f2fef0dfa18f1.skydrive.live.com/self.aspx/TechDays%202010/PowePivot%20pour%20l^4IT.pptx

Remplir un champ varbinary(max) avec des fichiers d’un répertoire

2 avril 2010 par Djeepy1

Petit challenge personnel il y a quelques jours, on me demande comment mettre le contenu d’un répertoire dans une table en base de données (pour préparer une démo à la BDC).

Evidemment, étant entouré de développeurs, tout le monde a pensé à une application console avec de l’Entity Framework ou du Linq2SQL. Mais le temps de se décider, j’avais implémenté la solution avec SSIS, outil parfaitement adapté pour l’intégration de données ;) .

La piste suivie est une tâche de DataFlow qui s’appelle Import Column qui sert à injecter des fichiers dans un flux de données.

image

Pour le faire fonctionner, il nous faut dans le flux d’entrée une colonne avec le nom du fichier. Donc ma première tâche dans le Control Flow est de remplir une table avec les chemins complets. Pour cela, j’utilise un Foreach Loop qui itère sur les fichiers du répertoire et fait un Insert SQL.

image

Ensuite, dans le DataFlow Task, je récupère ces noms de fichiers, je les envoie dans la tâche Import Column et j’enregistre cela dans ma base avec une Destination SQL.

Petit truc pour configurer le composant Import Column (qui n’est pas du tout intuitif), il faut :

  • Créer manuellement l’Output Column qui va recevoir le binaire. Elle se mettra automatiquement au bon type (DT_IMAGE, l’ancien nom de varbinary(max) :( )
  • Récupérer l’ID de cette colonne

image 

  • Lier cette ID à la colonne d’entrée

image

Et voila, une fois ce tips connu, tout est OK, vous obtenez un lot pour intégrer des fichiers dans une base très rapidement.

 

Temps de dev : 5 minutes

Le code source est disponible sur demande.

 

PS : il faut juste avoir une instance SSIS sur la machine qui exécutera le package.

Fragmentation et plan de maintenance

28 mars 2010 par Djeepy1

Malheureusement, tout le monde ne le sait pas toujours mais une base de données se fragmente avec le temps. Je vous renvoie à un précédent post : http://blog.djeepy1.net/2008/08/13/indexation-gerer-la-fragmentation/ pour les détails.

Le billet du jour est lié aux plans de maintenance “automatique”. En effet, je vois souvent des SI dans lesquels l’administrateur ou l’équipe de développement sont fiers de m’annoncer qu’ils ont mis des plans de maintenance en place pour gérer la fragmentation.

C’est bien sauf que, si la base est conséquente, ces maintenances automatiques peuvent faire plus de tort que de bien.

En effet, le composant Rebuild Index Task, dans sa configuration par défaut reconstruit TOUS les index de TOUTES les tables.

image

Le problème est que si vous avez des tables importantes (plusieurs millions de lignes et plusieurs Go de données), reconstruire l’index CLUSTERED peut être une opération lourde :

  • Remplissage du LOG (si vous êtes en RECOVERY FULL)
  • Lock de la table (si vous êtes en Standard Edition)
  • Opération longue

D’autant plus que la tâche génère un script SQL par ordre alphabetique des index et non dans un ordre logique. On reconstruirait normalement les CLUSTERED puis les NON-CLUSTERED.

Bref, j’ai été confronté à des situations où cette tâche engendrait plus de problèmes qu’elle n’en résolvait. Par exemple, la tâche qui dure jusqu’au petit matin, se superposant à un autre plan de maintenance (le backup), dégradant les performances d’un job de synchro, etc.

La solution

La solution consiste à faire un job un peu plus complexe. L’idée est de se baser sur la vue système nous donnant les infos de fragmentation : sys.dm_db_index_physical_stats. Déjà, on peut filtrer sur les index les plus fragmentés (> 25/30% pour moi).

On croise ensuite avec les infos de l’index (type CLUSTERED ou non) et les infos de volumétrie (nombre de lignes) que l’on trouve respectivement dans sys.indexes et sys.partitions.

A partir de ces informations, je peux donc obtenir dynamiquement les instructions à jouer.

SELECT
    Schema_Name(o.schema_id) as SchemaName,
    OBJECT_NAME(stat.object_id) as TableName,
    ix.name, stat.index_id,
    avg_fragmentation_in_percent, ix.fill_factor, rows,
    'Alter Index ['+ ix.name
        + '] on [' + Schema_Name(o.schema_id)
        + '].[' + OBJECT_NAME(stat.object_id)
        + '] Rebuild' as Statement
FROM sys.dm_db_index_physical_stats(
    DB_ID('AdventureWorks'),
    NULL,
    NULL, NULL, NULL) stat
  inner join sys.indexes ix
    on ix.index_id = stat.index_id
    and ix.object_id = stat.object_id
  inner join sys.partitions p
    on ix.index_id = p.index_id
    and ix.object_id = p.object_id
  inner join sys.objects o on stat.object_id = o.object_id
where avg_fragmentation_in_percent > 25
order by index_id, avg_fragmentation_in_percent desc

 

Je prends toutefois ces informations avec précaution. En effet, j’essaie d’avoir une idée de la durée de chaque reconstruction en fonction de la volumétrie. Ceci pour faire ma planification au mieux. Par exemple si en testant (eh oui, le test reste primordial) je m’aperçois que la reconstruction de tel index prends 35 minutes, je l’isole et le planifie à part, à un moment où cela ne va pas gêner les autres tâches.

Pour cela, il suffit de bien connaître sa base et ce qui s’y passe.

 

Epilogue

Malgré toute la pédagogie que nous pouvons faire lors de formation, consulting, projets, etc., les développeurs ne sont pas encore assez vigilants aux problématiques de base de données et pensent qu’un produit comme SQL Server se maintient tout seul à un haut niveau de performance. Je prends souvent la métophore avec l’automobile. Cela fait quelques siècles que ça existe et pourtant vous allez toujours au garage régulièrement ;-) .

Evidemment, loin de moi l’idée d’entretenir le clivage DBA/développeurs. Mon métier de consultant me place bien souvent au milieu et je privilégie la pédagogie.

Donc la règle à retenir : SQL Server est un produit puissant mais complexe, faites-vous aider par des spécialiste.

Erreur de déploiement Analysis Services

25 mars 2010 par Djeepy1

 

En travaillant sur un projet SSAS avec quelques collègues, nous avons bloqué sur cette erreur au déploiement :

image

L’erreur système suivante s’est produit : .

The following system error occurred : .

Une petite lumière s’est allumée dans ma mémoire car je l’avais déjà eu. Mais mon seul souvenir est que j’avais galéré – ça s’annoncait mal.

Après de longues heures de recherche, même si nous tournions autour d’un problème de sécurité (SID), nous n’avons toujours pas trouvé.

Heureusement, un collègue (merci Philippe) s’est souvenu de la résolution. En fait, il fallait juste supprimer (ou corriger) les attributions de rôle pour ne pas pointer sur des utilisateurs “fantômes” (ie. hors du domaine).

image

Soundex – recherche de mots ressemblants

18 janvier 2010 par Djeepy1

Question : j’ai besoin d’utiliser la fonction SoundEx de SQL Server, malheureusement il utilise un algorithme anglais (même si ma base est en français)

Réponse :

Revenons un peu sur le Soundex. Le Soudex est une méthode qui permet de savoir si 2 mots sont ressemblants, phonétiquement parlant. Pour cela, on traite le mots en rapprochant les sons, en supprimant les éléments inutiles (doubles lettres, etc.) et on obtient une sorte de Hash du mot le représentant. On peut ensuite les comparer avec une fonction de distance.

Le Soundex est sympa à la base mais contrairement à la recherche FullText, Microsoft n’a jamais fait d’effort pour le promouvoir. Il existe de nombreux algorithmes de Soundex, Microsoft utilise le sien, mais forcément qui ne fonctionne pas dans tous les cas, notamment en multilingue.

Pour contourner cela, te faut soit acheter un composant tout prêt qui corresponde mieux au besoin ou à la langue. Soit l’implémenter soi-même avec une fonction CLR par exemple.

Frédéric Brouard a fait un super article sur le Soundex et propose des algos :

http://sqlpro.developpez.com/cours/soundex/

Numéro de semaine – Norme ISO

30 décembre 2009 par Djeepy1

Il y a plusieurs façons de calculer le N° de semaine. J’y ai déjà été confronté il y a quelques années.

Il y a une norme ISO qui est notamment utilisée par les calendriers papier (http://fr.wikipedia.org/wiki/Numérotation_ISO_des_semaines).

On peut avoir ce comportement dans Outlook ; il faut le configurer ici :

Calendar Properties
clip_image002

Le problème se pose quand on doit l’utiliser dans du code. J’ai notamment eu le cas dans un rapport Reporting Services.

J’utilise l’expression suivante :

DatePart(“ww”, Fields!MaDate.Value)

Or, cette instruction ne se base pas sur la norme ISO mais démarre au 1er janvier.

En T-SQL, on peut avoir le bon calcul en changeant la constante :

SELECT DATEPART(ISOWK, '2010-01-04')

Mais cette constante n’existe pas dans le moteur d’expression de Reporting Services…

Donc il vous faudra vous baser sur un bout de code embarqué.

Et hop, une remontée de plus sur Connect.

Bewise parle Agile

30 novembre 2009 par Djeepy1

Vous ne le savez peut-être pas mais dans une vie antérieure, j’ai été passionné de méthodologie et de gestion de projet. Il y a plus de cinq ans, dans une entreprise ou la règle d’or était le Time To Market, j’ai pu apporter une vision plus agile du développement.

Chez Bewise, la méthodologie a aussi une place importante. Un domaine métier y est même dédié : AMI. De nombreux débats ont lieu au sein de nos projets (mais aussi à la machine à café. :) )

Pour montrer son attachement aux méthodologies agiles, Bewise, via l’un de nos consultants (Ionut Mihalcea), animera un séminaire pour l’association SigmaT qui promeut l’agilité dans le sud-ouest.

Ce sera le 11 décembre à l’université Paul Sabatier et le sujet est : Pratiques Agiles avec Team Foundation Server 2010

Le programme complet se trouve ici :
http://www.sigmat.fr/dotclear/index.php?post/2009/11/24/Programme-du-SigmaT12

Pour vous inscrire : http://www.sigmat.fr/dotclear/index.php?form/inscriptionimage

Changement de plate-forme de blog

22 novembre 2009 par Djeepy1

Je viens de migrer le blog de la plate-forme DotClear de Gandi vers WordPress.

L’URL reste la même (même le feed RSS si votre lecteur supporte les redirections).

Ce que ça change ? Pour je ne sais quelle raison, Google n’indexait pas mon blog (hébergé chez Gandi). J’espère que ce sera mieux avec WordPress.

A bientôt…

Que la force du Design soit avec vous

6 août 2009 par Djeepy1

<séquence type= »promotion »>

Vertice Design est un studio
graphique spécialisé dans le design et l’ergonomie d’applications web, windows
et mobile.

Les équipes maîtrisent des outils
variés tels que la gamme Expression de Microsoft, la gamme CS4 d’Adobe, 3ds Max,
Nova…

En plus de la réalisation d’interfaces graphiques originales et à votre
image, Vertice Design propose des formations afin d’acquérir des compétences sur
des logiciels tels que Expression Web, Blend, Silverlight, Flash, Expression
Design, Illustrator…

N’hésitez pas à aller visiter leur site internet pour en savoir plus : http://www.verticedesign.com

</séquence>

Renouvellement MVP

9 juillet 2009 par Djeepy1

Bonjour à tous,

Comme je suis actuellement en vacances depuis 2 semaines avec des difficultés à trouver des accès Wi-Fi (rendez-vous compte, je suis au McDo..), je n’ai pas pu annoncer la bonne nouvelle… Je suis renouvelé MVP SQL.

Voila, je suis content de moi. Je vais reprendre un peu les publications et migrer mon blog vers une autre plate-forme (qui sera référencée par Google par exemple). Je vais aussi préparer activement l’arrivée des prochaines versions de SQL Server comme Gemini.

Je compte bien aussi retourner au MVP Summit 2010…s’il y en a un.

 

PS : Concernant mon absence sur ce blog depuis quelques temps, ce n’est pas dû à des vacances à rallonge mais à de nouvelles responsabilités chez Bewise plus importantes et donc plus chronophages. Mais ne vous impatientez pas, je reviens bientôt sur plein de sujets passionants autour du décionnel et de la gestion des données ;-)