Ciao a tutti,
Non sono sicuro che sia possibile, ma provo la fortuna.
Vorrei creare (in jsl) una sorta di casella a schede incrociate, ma personalizzata con i miei valori. Per farmi capire meglio:
Ecco una tabella (FIG. 1) contenente i dati che voglio visualizzare:
FIG. 1 - TabulateFIG. 1 - TabulateFICO. 1 - Tabulare
Va bene, ma non è proprio quello che voglio. Ciò che vorrei ottenere è qualcosa di simile alla casella a schede incrociate che otteniamo quando chiamiamo un'analisi di contingenza, come in FIG.2:
FIG.2 - contingency tableFIG.2 - contingency table FIG.2 - tabella di contingenza
MA invece di "Conteggio", "% totale" e così via, inserirei nelle celle i valori medi che corrispondono alle colonne della mia analisi nella tabella.
Le caratteristiche che mi piacciono in questo design e che non ho nella versione tabulata sono:
- la possibilità di visualizzare più valori in una cella (e visualizzare la legenda nell'angolo in alto a sinistra)
- l'ombra sulle intestazioni delle colonne e delle righe
- l'assenza della riga "media" sotto le intestazioni delle colonne
Non sono riuscito a trovare un modo per convertire la mia tabella in ciò che desidero utilizzando la casella di scheda. Pensi che sarebbe possibile?
Grazie
Puoi ricreare abbastanza facilmente il Tabulate utilizzando TableBox e ColSpan Boxes. Vedi sotto per un esempio.
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} ))
)
)
)
);
Ecco come appare il metodo Col Span Box:

Poiché CrossTabBox DisplayBox non è gestibile tramite script utilizzando JSL, dovresti utilizzare un metodo diverso per ricreare qualcosa di simile a quello utilizzato nella piattaforma Contingency.
Puoi farlo utilizzando un concetto su cui ho lavorato per utilizzare un LineupBox per creare le tue tabelle personalizzate. Questo metodo utilizza una funzione personalizzata per la creazione di ciascuna cella per evitare molte duplicazioni di codice. Vedi i miei commenti per i dettagli.
//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>
Ecco come apparirà la finestra risultante con questo metodo:
