Skripte zum Erweitern von DatentabellenJim (auch bekannt als „Superuser Extraordinaire“) war so freundlich, das folgende Skript zur Verfügung zu stellen, um bei der Transformation zu helfen

Zu

verwenden
names default to here( 1 );
/*****************************************************************************/
// Create a sample data table and original graphs
/*****************************************************************************/
dt = new table(
"Example",
New Column( "Months of Storage" ),
New Column( "Stability Condition", character ),
New Column( "Lot", character ),
New Column( "API001 %LC",format("Percent",4,0) )
);
MoList = {0, 3, 6, 9, 12, 18};
StabList = {"Ambient", "25/60", "30/65", "40/75"};
LotList = {"001", "002", "003", "004", "005", "006"};
For( m = 1, m <= N Items( MoList ), m++,
For( s = 1, s <= N Items( StabList ), s++,
For( l = 1, l <= N Items( LotList ), l++,
For( i = 1, i <= 16, i++,
dt << add rows( 1 );
:Months of Storage[N Rows( dt )] = MoList[m];
:Stability Condition[N Rows( dt )] = StabList[s];
:Lot[N Rows( dt )] = LotList[l];
:Name( "API001 %LC" )[N Row( dt )] = Random Integer( 65, 110 ) / 100;
)
)
)
);
dt << select where( :Months of Storage == 0 & :Stability Condition != "Ambient");
dt << delete rows;
dt << select where( : Stability Condition == "Ambient" & :Months of Storage !=0);
dt << delete rows;
dt:stability condition << set property("value order",{Custom Order( {"Ambient", "25/60", "30/65", "40/75"} )});
dt << Graph Builder(
Size( 570, 488 ),
Show Control Panel( 0 ),
Variables(
X( :Lot ),
Y( :API001 %LC ),
Group X( :Months of Storage ),
Group Y( :Stability Condition )
),
Elements( Points( X, Y, Legend( 7 ), Jitter( "None" ) ) )
);
dt << Graph Builder(
Size( 570, 492 ),
Show Control Panel( 0 ),
Variables(
X( :Months of Storage ),
Y( :API001 %LC ),
Group X( :Stability Condition ),
Group Y( :Lot )
),
Elements( Points( X, Y, Legend( 7 ) ) )
);
// End of initial data table creation and original chart creation
/*****************************************************************************/
// Replicate the Ambient Month 0 values to all levels of Stability Condition
/*****************************************************************************/
// Create a new data table of just the Anbient data
dt << select where(:Stability Condition == "Ambient");
dtAmb = dt << subset( selected rows(1), selected columns(0));
// Delete the Stability Condition column
dtAmb << delete columns(:Stability Condition);
// Use the Summary Platform to create a table with just the unique Stability Condition values
dtSum = dt << Summary(
Group( :Stability Condition ),
Freq( "None" ),
Weight( "None" )
);
// Delete the N Rows Column;
dtSum << delete columns(:N Rows);
// Delete the Ambient row
dtSum << select where(:Stability Condition == "Ambient");
dtSum << delete rows;
// Change all of the
// Cartesian Join of the tables to generate all combinations of the two tables
dtJoin = dtSum <<
Join( With( dtAmb ), Cartesian Join );
// Now create a subset data table from the original data table with all non ambient rows
dt << select where( :Stability Condition != "Ambient");
dtNoAmbient = dt << subset(selected rows(1), selected columns(0));
// Concatenate the non ambient data with the data from the cartiesian data
dtNoAmbient << concatenate(dtJoin, append to first table);
// Create the Graph Builder map with the new data table
dtNoAmbient << Graph Builder(
Size( 570, 488 ),
Show Control Panel( 0 ),
Variables(
X( :Lot ),
Y( :API001 %LC ),
Group X( :Months of Storage ),
Group Y( :Stability Condition )
),
Elements( Points( X, Y, Legend( 7 ), Jitter( "None" ) ) )
);
// Clean up the no longer needed data tables
close( dtAmb, nosave );
close( dtSum, nosave );
close( dtJoin, nosave );
Sie können sehen, dass ich versucht habe, die „Umgebungs“-Daten für jede der anderen Bedingungen (25/60, 30/65 und 40/75) als t=0 zu reproduzieren. Zu diesem Zweck funktioniert das Drehbuch hervorragend. Es akzeptiert jedoch keine neuen Daten, die in die Datentabelle eingegeben werden (z. B. mehr Chargen) und ist hinsichtlich der angezeigten „Speichermonate“ nicht flexibel. Das Skript verwendet eine vordefinierte Liste, um „Speichermonate“ anzuzeigen. Dies kann jedoch anders sein oder sich in Zukunft ändern, wenn neue Daten eingegeben werden.
Wie kann ich das Skript flexibler gestalten, damit in Zukunft alle Daten in der Datentabelle ausgewertet werden, wenn neue Daten verfügbar sind?
Vielen Dank im Voraus!
Datenmischung und -bereinigungBetreff: Skripte zum Erweitern von DatentabellenDanke, Brady! Ich werde es heute einmal versuchen.
Betreff: Skripte zum Erweitern von DatentabellenHallo George,
Ja, das ist richtig. Benutzer aktualisieren die Datentabelle, sobald neue Daten verfügbar sind. Neue Daten können Einträge für die Monate der Lagerung, den Lagerzustand oder die Charge enthalten, die zuvor noch nicht verwendet wurden.
Beispielsweise können wir Testergebnisse für 0, 1, 3, 6 Monate usw. erwarten, aber möglicherweise feststellen, dass zusätzliche Tests zwischen den Testintervallen erforderlich sind (z. B. 4 Monate). Wir benötigen also die Liste, die Werte für die Speichermonate speichert, um alles zu verwenden, was in diese Spalte eingegeben wird. Wir können nicht jeden Eintrag vorhersehen und möchten nicht versehentlich Daten im Bericht ausschließen. Das Gleiche gilt für den Lagerzustand oder die Charge.
Ein Sonderfall ist die Lagerbedingung „Umgebung“ und die Lagermonate „0“. Hier versuchen wir, die „Umgebungs“-Ergebnisse für jede Lagerbedingung zu reproduzieren, die NICHT Umgebungstemperatur ist, und die Testergebnisse „0“ Monaten Lagerung zuzuordnen.
Betreff: Skripte zum Erweitern von DatentabellenHallo, das könnte für Sie funktionieren:
- Es wird davon ausgegangen, dass die ursprüngliche Datentabelle – die erste, die vom vorherigen Skript erstellt wurde – aktuell ist und abgeleitete Berichte und Diagramme geschlossen sind (um eine Sortierung vor Ort zu ermöglichen).
- Die Kategorie „Ambient“ bleibt vorhanden, wird aber nicht angezeigt.
- Wenn zusätzliche Daten verfügbar sind, führen Sie das Skript einfach erneut aus.
Beifall,
Brady
Names Default To Here( 1 );
dt = Current Data Table();
//remove "old" appended rows, if any
dt << select where( :stability condition != "Ambient" & :Months of storage == 0 );
Try( dt << delete rows );
//sort table to ensure "Ambient" block (all time == 0 in beginning)... graphs/reports must be closed
dt << sort( by(:Months of storage, :stability condition, :lot), order(ascending, ascending, ascending), replacetable);
//append this data and rename, once for each condition
nr = N Row( dt << get rows where( :stability condition == "Ambient" ) );
For( i = 1, i <= 3, i++,
cur = N Row( dt );
dt << addrows( nr );
dt[(cur + 1) :: (cur + nr), 1 :: N Col( dt )] = dt[1 :: nr, 1 :: N Col( dt )];
dt:stability condition[(cur + 1) :: (cur + nr)] = Words( "25/60,30/65,40/75", "," )[i];
);
//graph... the ambient data is present but we don't have to show it
Graph Builder(
Size( 570, 484 ),
Show Control Panel( 0 ),
Variables(
X( :Lot ),
Y( :API001 %LC ),
Group X( :Months of Storage ),
Group Y( :Stability Condition, N View Levels( 3 ), First View Level( 2 ) )
),
Elements( Points( X, Y, Legend( 7 ) ) )
);
Betreff: Skripte zum Erweitern von DatentabellenKönnen Sie Ihr Problem genau auf den Punkt herunterbrechen, an dem Sie Hilfe benötigen?
Klingt so, als müssten Sie in Ihrer aktualisierten Tabelle nach der neuen Liste mit hinzugefügten Elementen suchen, anstatt eine per Skript definierte Liste zu haben. Benötigen Sie dieses Code-Snippet?