Salut tout le monde,
Je ne suis pas sûr que ce soit possible, mais je tente ma chance.
Je voudrais créer (en jsl) une sorte de boîte de tabulation croisée, mais personnalisée avec mes propres valeurs. Pour mieux me faire comprendre :
Voici un tableau (FIG. 1) contenant les données que je souhaite afficher :
FIG. 1 - TabulateFIG. 1 - TabulateFIGUE. 1 - Tabuler
C'est bien, mais pas tout à fait ce que je veux. Ce que j'aimerais obtenir, c'est quelque chose de similaire à la boîte de tabulation croisée que nous obtenons lors de l'appel d'une analyse de contingence, comme dans la FIG.2 :
FIG.2 - contingency tableFIG.2 - contingency table FIG.2 - tableau de contingence
MAIS au lieu de "Count", "Total%" et ainsi de suite, je mettrais dans les cellules les valeurs moyennes qui correspondent à mes colonnes d'analyse dans un tableau.
Les fonctionnalités que j'aime dans ce design et que je n'ai pas dans la version tabulée sont :
- la possibilité d'afficher plusieurs valeurs dans une seule cellule (et d'afficher la légende en haut à gauche)
- la teinte sur les en-têtes de colonnes ET de lignes
- l'absence de ligne "moyenne" sous les en-têtes de colonnes
Je n'ai pas trouvé de moyen de convertir mon tableau en ce que je veux en utilisant la zone de tabulation. Pensez-vous que ce serait possible ?
Merci
Vous pouvez assez facilement recréer le Tabulate à l'aide d'une TableBox et d'une ColSpan Box. Voir ci-dessous pour un exemple.
Names Default To Here( 1 );
New Window( "Col Span Box",
Table Box(
Number Col Box( "CAT_ECH", {1, 2, 3} ),
Col Span Box(
"CAT_MK",
Col Span Box(
"0-100",
Col Span Box("COUT_TOT_ENVIRONNE",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("TEMPS",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("COUT_CONSOS",Number Col Box( "Mean", {1, 2, 3} ))
),
Col Span Box(
">=100",
Col Span Box("COUT_TOT_ENVIRONNE",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("TEMPS",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("COUT_CONSOS",Number Col Box( "Mean", {1, 2, 3} ))
)
)
)
);
Voici à quoi ressemble la méthode Col Span Box :

Étant donné que CrossTabBox DisplayBox n'est pas scriptable à l'aide de JSL, vous devrez utiliser une méthode différente pour recréer quelque chose comme celui utilisé dans la plateforme de contingence.
Vous pouvez le faire en utilisant un concept sur lequel j'ai travaillé pour utiliser une LineupBox pour créer vos propres tables personnalisées. Cette méthode utilise une fonction personnalisée pour la création de chaque cellule afin d'éviter beaucoup de duplication de code. Voir mes commentaires pour plus de détails.
//helper function to create cells in the lineupBOx "table"
getCell = Function( {values, altShading, justify = "left"},
{Default Local},
// Create a lineup box to add each of the values to
lb = Lineup Box( N Col( 1 ), SPacing( 0 ) ); // 1 column and no spacing
// loop through and add each value
For( i = 1, i <= N Items( values ), i++,
// if justify is left, put the spacer box on the right, otherwise, put it on the left
If( justify == "left",
// borderBox to give values some spacing (and for shading)
b = Border Box( Right( 5 ), Left( 5 ), top( 1 ), bottom( 1 ),
H List Box(
//Text box with current value
Text Box( values[i] ),
// Spacing to fill the cell shading all the way to the right (will grow horizontally, but not vertially)
Spacer Box( <<SET max="" size="">=100", "", "", ""}, 0 ),
getCell( {"Total", "", "", ""}, 0 ),
//Row 2
getCell( {"0-250", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 3
getCell( {"250-3000", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 4
getCell( {">=3000", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 5
getCell( {"Total", ""}, 0 ),
getCell( {"13", "30.95"}, 1, "Right" ),
getCell( {"13", "30.95"}, 1, "Right" ),
getCell( {"13", "30.95"}, 1, "Right" )
)
)
)
)
)
);</SET>
Voici à quoi ressemblera la fenêtre résultante avec cette méthode :
