Simplifiez la transformation de vos données à l’aide du T-SQL 

le 25/09/2019 par Maxime Labitte

Problématique client

Le domaine de la mode impose une gestion de produits et de stocks très stricte de manière à obtenir un maximum d’informations et de données qualitatives. Ces dernières permettent d’accompagner les prises de décision des acteurs du secteur d’activité. Dans le cadre de ses projets clients, Fit Retail réalise des interfaces pour permettre au PLM de communiquer avec d’autres systèmes.

Nous mettons notamment à disposition des exports de données du PLM vers l‘ERP Orli Cegid. Parmi ces données on retrouve, par exemple, les tailles sélectionnées sur les produits finis, qui correspondent aux tailles de produits sélectionnées parmi une grille pour être ensuite développées et produites. Dans le PLM, ces dernières sont formatées dans une liste et séparées par des pipes « | », tandis que l’ERP Orli, lui, attend que les tailles lui soient transmises chacune dans un champ distinct.

La difficulté est donc de transformer et de restituer ces données à l’ERP dans le format attendu afin de faciliter la lecture de ces informations, tout en prenant en compte des formats de grilles différents :

– Des pointures de chaussures : 40, 41, 42, 42 ½…

– Des tailles de pantalons : 36, 38, 40….

– Des tailles de chemises : S, M, L, XL…

 

Pour répondre à cette problématique, le TRANSACT-SQL met à disposition deux techniques :

– Le CTE (Common Table Expression) : ensemble de résultats temporaires défini dans l’étendue d’exécution d’une seule instruction SELECT, INSERT, UPDATE, DELETE ou CREATE VIEW.

– Le PIVOT : permet de simplifier une série complexe d’instructions.*

Prenons un exemple simple d’une table d’articles :

Ces trois enregistrements utilisent des grilles de tailles différentes, soit du XS au XL, soit du 36 au 44. Les tailles XS et XL ne sont pas proposées sur le deuxième article.

Le code de la solution est le suivant :

 

Voici le résultat de ce script SQL :

« X » correspond ici à la position de la taille au sein de la grille des différentes tailles, cette dernière étant transmise via un autre export.

Si une taille est sélectionnée, on renvoie « X » dans une colonne GRIL_VENT_Tx.
L’ordre est donc important, car il permet à Orli de faire le lien entre la taille sélectionnée et sa position dans la grille de tailles. La taille sélectionnée est également retournée dans une colonne GRIL_FAB_Tx. Si au contraire, elle n’est pas sélectionnée, on retourne un « . » dans les colonnes GRIL_VENT_Tx et GRIL_FAB_Tx concernées.

Les colonnes GRIL_VENT_Tx et GRIL_FAB_Tx sont numérotées de 1 à 20. Cela sous-entend que nous autorisons des grilles pouvant aller jusqu’à 20 tailles.

 

Zoom sur la solution technique

Nous employons d’abord une CTE récursive qui n’est pas stockée sous forme d’objet et qui dure uniquement le temps de la requête. Elle présente notamment l’avantage de pouvoir se référencer elle-même. Une CTE récursive se définit par une formule dans laquelle une expression CTE initiale est exécutée de façon répétée. Elle retourne ainsi des sous-ensembles de données jusqu’à l’obtention de la totalité des résultats.*

Notre CTE récursive permet de parcourir la liste des tailles sélectionnées. Chacune d’elles est retournée dans une ligne avec sa position « Ordre_Taille » relative dans la grille de tailles.

Le résultat contenu dans la table « tmp » est le suivant :

Notez la manière dont les listes « TaillesSelectionnees » sont parcourues.

En lisant ce tableau, nous pouvons formuler deux remarques :

– La liste à parcourir doit obligatoirement être au format nvarchar(max). On passera donc au préalable le script suivant si besoin :

– Par défaut, une CTE récursive est limitée à 100 itérations. Pour outrepasser cette limite, il existe la clause OPTION MAXRECURSION. Assurez-vous avant d’avoir bien positionné votre condition de fin de boucle.

Enfin, pour retourner chaque taille (c’est-à-dire chaque ligne de résultat du CTE) dans des colonnes distinctes, nous utilisons la fonction  PIVOT dont nous avons parlé précédemment.

 

Une réponse concrète et efficace apportée à nos clients

La combinaison intelligente de deux fonctionnalités de T-SQL, la CTE récursive et le PIVOT, nous permet de répondre à cette problématique de dialogue entre le PLM et l’ERP Orli.

Les informations fournies sont donc beaucoup plus lisibles et compréhensibles et la maintenance des requêtes complexes est nettement facilitée. Le dialogue est également optimisé grâce à l’emploi de la récursivité à la place d’un WHILE ou d’un CURSOR pour boucler sur la liste.

Nos clients obtiennent grâce à ce process des informations plus claires qui leur permettent d’optimiser la gestion de leurs produits tout au long de leur cycle de vie. Cette réponse apportée est donc un gain de temps et d’argent pour les entreprises qui voient également en cet outil, un avantage concurrentiel sur un marché comptant un très grand nombre d’acteurs.

* Source : documentation en ligne de Microsoft.

le 25/09/2019 par Maxime Labitte