Hola comunidad,
Vengo a usted con una pregunta difícil. Por favor, vea la imagen a continuación como referencia. Estoy usando JMP 18 y estoy tratando de crear un gráfico de barras para mostrar los valores de PPB por trimestre para varias categorías. El problema con el que me encuentro es que quiero que la categoría que tenga el valor total más alto del gráfico esté en la parte inferior de la pila. Por ejemplo, en la imagen a continuación, la categoría de memoria debería estar en la parte inferior de todas las pilas de barras, seguida de metal y así sucesivamente. Sé que puedo cambiar manualmente las posiciones de estas, pero ahí es donde entra la parte complicada de esta pregunta.
En la imagen de abajo, puedes ver que tengo un filtro de datos local donde puedes ver diferentes tecnologías. Al cambiar las diferentes vistas, se modifican drásticamente los valores totales de las categorías superpuestas. Necesito un script que reordene automáticamente las categorías superpuestas, como describí antes, cada vez que se cambie el filtro de datos local.
He podido crear una función que se activa cuando cambia el filtro de datos local. No logro descifrar cómo obtener los valores de las categorías que aparecen en el gráfico en algún tipo de matriz para poder crear un orden personalizado y luego aplicarlo al gráfico. ¿Alguien sabe cómo hacer esto?

A continuación se muestra un código de muestra para la función que se activa cuando cambia el filtro de datos local:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dist = Distribution(
Automatic Recalc( 1 ),
Continuous Distribution( Column( :POP ) )
);
filter = dist << Local Data Filter(
Add Filter( columns( :Region ) )
);
f = Function( {a},
Print( a );
Print( "you can glue additional code to this function" );
Return( y = a - 5 );
);
rs = filter << Make Filter Change Handler( f );
Aquí está el código para el generador de gráficos:
PPM_TABLE << New Script("SubMech PPB by Quarter (Technologies)",
names default to here(1);
gb = Graph Builder(
Transform Column(
"PPB",
Set Properties("Configure Level", 1),
Set Property(
"Value Order",
{Custom Order(_subMech)}
),
Formula(:Sub Mech)
),
Size( 1120, 685 ),
Show Control Panel( 0 ),
Variables(
X( :CLNDR_YR_QTR_TXT ),
Y( :Net Shipments, Side( "Right" ) ),
Y( :PPB, Position( 1 ) ),
Overlay( :Sub Mech )
),
Elements(
Bar( X, Y( 2 ), Legend( 11 ), Bar Style( "Stacked" ), Label( "Label by Value" ) ),
Line( X, Y( 1 ), Overlay( 0 ), Legend( 10 ) )
),
Local Data Filter(
Add Filter(
columns( :Year, :TECH, :Fail Mech, :Sub Mech ),
Where( :TECH == "160k" ),
Where( :Fail Mech == {"*MUST SELECT", "Fab Related"} ),
Display( :TECH, N Items( 11 ), "Radio Box Display" ),
Display( :Fail Mech, N Items( 7 ), "Check Box Display" ),
Display( :Sub Mech, N Items( 7 ), "Check Box Display", Find( Set Text( "" ) ) )
)
),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model( 10, Properties( 0, {Line Color( 0 )}, Item ID( "Mean(Net Shipments)", 1 ) ) )}
),
Dispatch( {}, "graph title", TextEditBox,
{Set Text( "Fab 4 PPB by Quarter (Technologies by Sub Mechanism)" )}
),
Dispatch( {}, "400", LegendBox,
{Legend Position( {11, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10, [0]} )}
)
)
)
);