JSL - distribution générique sur tableHé,
Je voudrais exécuter un histogramme sur une table.
La sortie de chaque table est la colonne "résultat" et les divise par "nom du test".
Je veux un code générique capable de gérer différents "noms de test".
J'ai essayé:
dt1 = Open();
:result << Set Data Type( Numeric, "Continuous" );
:range_min << Set Name( "LSL" );
:range_max << Set Name( "USL" );
limits = dt1 << Summary( Group( :test_name ), Mean( Eval( "LSL" ) ), Mean( Eval( "USL" ) ), );
Current Data Table( limits );
rowsTest = limits[0, 1];
iMax = N Rows( limits );
Current Data Table( dt1 );
vl = V List Box( Text Box( "Spec Limits Script" ) );
For( i = 0, i < iMax, i++,
vv = V List Box(
Distribution(
Stack( 1 ),
Continuous Distribution( Column( :result ), Horizontal Layout( 1 ), Vertical( 0 ) ),
Where( :test_name == rowsTest[i] )
)
),
vl << append( vv )
);
newFit = New Window( "Spec Limits Collection", vl );
Mais cela n’a pas fonctionné.
Est-ce la manière actuelle de procéder ?
Merci d'avance.
Re : JSL - distribution générique sur tableMerci pour l'aide!
J'ai 3 autres problèmes....
1. Si j'ai besoin de faire une superposition (disons test1 dans machine1 vs machine2) à l'aide du "Graph Builder".
J'essaye de faire pareil sans succès :
For( i = 1, i <= N Rows( SummaryDT ), i++,
CurrentTest = Column( SummaryDT, 1 )[i];
CurrentMin = Column( SummaryDT, 2 )[i];
CurrentMax = Column( SummaryDT, 3 )[i];
NewMin = Column( SummaryDT, 4 )[i];
NewMax = Column( SummaryDT, 5 )[i];
CurrentStDev = Column( SummaryDT, 7 )[i];
CurBox = V List Box(
CurDist = StackedResults <<
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Result ), Page( :Test Name ), Overlay( :Facility ) ),
Elements( Histogram( X, Legend( 13 ) ) )
),
V List Box(
H List Box( Text Box( "Current Low: " ), Text Box( CurrentMin ), Text Box( " New Low: " ), Text Box( NewMin ) ),
(H List Box( Text Box( "Current High: " ), Text Box( CurrentMax ), Text Box( " New High: " ), Text Box( NewMax ) ))
)
);
(CurDist << report)[AxisBox( 1 )] << Min( Min( CurrentMin || NewMin ) - Abs( Min( CurrentMin || NewMin ) ) * 0.005 );
(CurDist << report)[AxisBox( 1 )] << Max( Max( CurrentMax || NewMax ) * 1.005 );
(CurDist << report)[AxisBox( 1 )] << Add Ref Line( CurrentMin, "Solid", blue, "Min", 1 );
(CurDist << report)[AxisBox( 1 )] << Add Ref Line( CurrentMax, "Solid", blue, "Max", 1 );
(CurDist << report)[AxisBox( 1 )] << Inc( CurrentStDev );
//(CurDist << report)[AxisBox( 2 )] << Show Major Grid( 1 );
//(CurDist << report)[AxisBox( 2 )] << Scale( "Log" );
(CurDist << report)[Outline Box( 1 )] << Set Title( "Test: " || CurrentTest );
MainContainer << append( CurBox );
);
2. J'essaie de mettre à l'échelle l'axe Y en échelle logaritmique, afin de pouvoir voir la valeur aberrante plus facilement, mais cela ne fonctionne pas correctement...
3. Pourquoi ma "list box" est masquée et je ne peux la voir que lorsque je ferme le tracé.
Merci!
Re : JSL - distribution générique sur tableVoici votre code, profitez-en :
dt = Current Data Table();
SummaryDT = dt << Summary( Group( :test_name, :range_min, :range_max ), Std Dev( :result ) );
win = New Window( "My Analysis", MainContainer = V List Box() );
For( i = 1, i <= N Rows( SummaryDT ), i++,
CurrentTest = Column( SummaryDT, 1 )[i];
CurrentMin = Column( SummaryDT, 2 )[i];
CurrentMax = Column( SummaryDT, 3 )[i];
CurrentStDev = Column( SummaryDT, 5 )[i];
CurBox = V List Box( CurDist = dt << Distribution( Continuous Distribution( Column( :result ),Horizontal Layout(1) ), Where( :test_name == CurrentTest ) ) );
(CurDist << report)[AxisBox(1)] << Max(Maximum(CurrentMax,(CurDist << report)[AxisBox(1)] << Get Max) + (CurrentMax-CurrentMin)*0.05);
(CurDist << report)[AxisBox(1)] << Min(Minimum(CurrentMin,(CurDist << report)[AxisBox(1)] << Get Min) - (CurrentMax-CurrentMin)*0.05);
(CurDist << report)[AxisBox(1)] << Add Ref Line( CurrentMin, "Solid", blue, "Min", 1 );
(CurDist << report)[AxisBox(1)] << Add Ref Line( CurrentMax, "Solid", blue, "Max", 1 );
(CurDist << report)[AxisBox(1)] << Inc(CurrentStDev);
(CurDist << report)[OutlineBox(1)] << Set Title("Test: " || CurrentTest);
MainContainer << append(CurBox);
);
close(SummaryDT,nosave);
(win << XPath("//TextBox[contains(./text(), 'Where')]")) << delete();
Re : JSL - distribution générique sur tablesi vous êtes intéressé, envoyez-moi une table à
tom.abramov@ald.co.il
et je mettrai ici le scriptRe : JSL - distribution générique sur tableQu'en est-il de la modification de l'échelle de taille du bac, de l'ajout de LSL, USL, etc. à chaque fenêtre de résultats ?
Deux problèmes :
1. Comment puis-je obtenir la valeur sigma de l'histogramme que je viens de tracer dans la case d'échelle du tracé ?
2. Comment ajouter des lignes de référence sans avoir de compteur des noms de tests ?
Merci beaucoup d'avance!
"std"- est la valeur std du tableau des statistiques
"???"- est une valeur du tableau "limites".
dt1 = Open();
:result << Set Data Type( Numeric, "Continuous" );
limits = dt1 << Summary( Group( :test_name ), Mean( Eval( "range_min" ) ), Mean( Eval( "range_max" ) ), );
Ntests = N Rows( limits );
vl = V List Box( Text Box( "Spec Limits Script" ) );
dt1 << Distribution(
Continuous Distribution( Column( :result ), Horizontal Layout( 1 ), Vertical( 0 ) ),
By( :test_name ),
SendToReport(
Dispatch(
{"result"},
"1",
ScaleBox,
{Min( 97.5173285198556 ), Max( 97.9576714801444 ), Inc( <U><STRONG>std</STRONG></U>), Minor Ticks( 0 ),
Add Ref Line( limits[<U><STRONG>???</STRONG></U>,3], "Solid", "Black", "", 1 ), Add Ref Line( limits[<U><STRONG>???</STRONG></U>,4], "Solid", "Black", "", 1 )}
)
)
);
Re : JSL - distribution générique sur tableDe plus, vous pouvez l'exécuter sans boucle :
Distribution(
Continuous Distribution(
Column( :result ),
Horizontal Layout( 1 ),
Vertical( 0 )
),
By( :test_name )
);
Re : JSL - distribution générique sur tableSalut,
Voici le code après quelques corrections :
dt1 = Open();
:result << Set Data Type( Numeric, "Continuous" );
:range_min << Set Name( "LSL" );
:range_max << Set Name( "USL" );
limits = dt1 << Summary( Group( :test_name ), Mean( Eval( "LSL" ) ), Mean( Eval( "USL" ) ), );
Ntests = NRows(limits);
vl = V List Box( Text Box( "Spec Limits Script" ) );
For( i = 1, i <= Ntests, i++,
vv = V List Box(
dt1 << Distribution(
Stack( 1 ),
Continuous Distribution( Column( :result ), Horizontal Layout( 1 ), Vertical( 0 ) ),
Where( :test_name == Column(limits,"test_name")[i] )
)
);
vl << append( vv )
);
newFit = New Window( "Spec Limits Collection", vl );