Il peut s’avérer nécessaire de trier ou ordonner les enregistrements résultants de la lecture d’un cube dans Planning Analytics, que ce soit pour opérer des traitements (Section Data) au sein de boucles et de ruptures ou, plus simplement, pour générer un fichier d’export « trié » sans devoir faire appel à une étape complémentaire de tri du fichier exporté (commandes de type « sort » exécuté par le système d’exploitation).
L’idée fondamentale est de créer une vue comportant nos différents sous-ensembles de dimension qui seront triés selon nos propres critères.
Exemple :
Exporter les données du Cube_A_Exporter (Dim_Usines, Dim_Articles, Dim_Indicateurs) en ordonnant l’export par le montant global décroissant de l’indicateur CA et ainsi obtenir à partir d’un cube ayant les valeurs suivantes :
Le fichier suivant :
Nous allons tout d’abord créer le sous-ensemble des articles en l'ordonnant selon la valeur décroissante du CA Global et nous enregistrerons ce sous-ensemble.
ORDER (
{TM1FILTERBYLEVEL( {TM1SUBSETALL( [Dim_Articles] )}, 0)}
,
[Cube_A_Exporter].([Dim_Usines].[Total_Usines],[Dim_Indicateurs].[CA])
,BDESC
)
Nous allons ensuite créer une vue utilisant ce sous-ensemble :
Les données sont présentées par ordre croissant de « Usine », puis ordre décroissant de CA Global.
=> Il ne nous reste plus qu’à utiliser cette vue en tant que source dans un processus Turbo Integrator.
Encore plus fou, vous pouvez créer dynamiquement la vue d’exportation, en captant directement le MDX de votre vue et en l’adaptant au moyen des fonctions :
CreateViewByMDX
DataSourceNameForServer
En effet, le texte (MDX) de la vue est accessible par le bouton MDX du bandeau comme vous pouvez le voir ci-dessous :
SELECT NON EMPTY {[Dim_Indicateurs].[Dim_Indicateurs].[CA]} ON 0, NON EMPTY {TM1FILTERBYLEVEL(TM1SUBSETALL([Dim_Usines].[Dim_Usines]) , 0)}*{TM1SubsetToSet([Dim_Articles].[Dim_Articles],"sbs_orderbyCA","public")} ON 1 FROM [Cube_A_Exporter]
De manière plus détaillée, en remplaçant le sous-ensemble des articles par sa définition :
SELECT NON EMPTY {[Dim_Indicateurs].[Dim_Indicateurs].[CA]} ON 0, NON EMPTY {TM1FILTERBYLEVEL(TM1SUBSETALL([Dim_Usines].[Dim_Usines]) , 0)}*{ORDER(TM1FILTERBYLEVEL(TM1SUBSETALL([Dim_Articles]) , 0) , [Cube_A_Exporter].([Dim_Usines].[Total_Usines],[Dim_Indicateurs].[CA]) , BDESC)} ON 1 FROM [Cube_A_Exporter]
Libre à vous, par la suite, de modifier le texte MDX de la vue, en fonction, par exemple, de paramètres passés au processus.
Vous pouvez utiliser cette solution autant que de besoin, dès lors que le tri d’effectue sur un critère unique.
En cas de critères multiples, dans le même ordre, vous pourriez utiliser le « sort » de votre système d’exploitation.
Prenez la précaution de constituer votre fichier de sortie de telle manière que l’ensemble des données de critères soient contigu, en début de fichier.
Exemple : fichier contenant les colonnes : Usine ; CA ; Article (trié par Usine puis CA)
En cas de critères multiples dé-corrélés, par exemple trier d’abord par Usine (Croissant) puis ensuite par Article, en fonction du CA du couple (Usine x Article) (Décroissant), la solution la plus simple sera de passer par une base de données relationnelle intermédiaire.
- Un premier processus qui écrit dans une table de base de données
- Un deuxième processus qui lit cette table puis écrit le fichier
Avec un Result Set comportant « Usine » , « Article », « Mois », « CA » que l’on voudrait trier par
Usine : de manière croissante
Article en fonction du de son CA Annuel dans l’usine, de manière décroissante, Mois de manière croissante.
La requête SQL serait alors analogue à :
Select *
From
(Select
Usine,
Article,
Mois,
CA,
SUM(CA) OVER (PARTITION BY Usine, Article) as CA_Annuel
From MaTable
)
Order by Usine ASC, CA_Annuel DESC, Mois Asc
Et voilà pour ce tuto Planning Analytics !
Vous avez besoin de plus d'informations sur Planning Analytics ? Nos experts certifiés Planning Analytics sont à votre disposition, contactez-nous !
Vous souhaitez bénéficier d'experts, de développeurs, ou d'une formation sur TM1 / Planning Analytics ? Rendez-vous sur la page Contact !