Zyklus bei der Berechnung erkanntIch weiß, dass JMP keine Tabellenkalkulation ist, und ich muss dies möglicherweise anders berechnen als in Excel, aber ich kann die Problemumgehung nicht herausfinden.
Ich habe eine Berechnung, bei der sich eine Variable auf sich selbst verlässt und die mir den Fehler "Zyklus für Datenspalte erkannt" gibt
Ich habe einen Tank, in dem im Laufe der Zeit eine Lösung hinzugefügt wird. Ich weiß, wie viel ich hinzugefügt habe und wie hoch das Gesamtvolumen des Tanks ist. Zu Probenzeiten nehme ich auch Volumen aus dem Tank. Ich muss berechnen, wie viel Lösung A mit jedem Probenvolumen entfernt wird. Aber ich kann nicht herausfinden, wie das geht, ohne diesen Zyklusfehler zu bekommen. Bitte helfen Sie!
New Column( "Soln A Removed in Current Draw (mL)",
Numeric,
"Continuous",
Formula(
:Name( "Soln A concentration before draw (mL/L)" ) * (
:Name( "Manually Recorded Sample Volume (mL)" ) / 1000)
),
);
New Column( "Soln A concentration before draw (mL/L)",
Numeric,
"Continuous",
Formula(
If(
(:Name( "Soln A added (mL)" )
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
)
* 1000,
(
(
:Name( "Soln A added (mL)" )
-
Lag(
:Name( "Cumulative Soln A Removed (mL)" ), 1
)
)
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
) * 1000
)
),
);
New Column( "Cumulative Soln A Removed (mL)",
Numeric,
"Continuous",
Formula(
Col Cumulative Sum(
:Name( "Soln A Removed in Current Draw (mL)" ),
:Batch Number
)
),
);
New Column( "Soln A added per current Tank Volume (mL/L)",
Numeric,
"Continuous",
Formula(
(:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" )
),
);DatentabelleSkriptingBetreff: Zyklus bei der Berechnung erkanntDu hast Recht. JMP ist keine Tabelle.
Sie können sich eine JMP-Datentabelle als eine Sammlung von Beobachtungen (dh einen Datensatz) vorstellen. Daher ist jede Volumenänderung eine neue Zeile. Möglicherweise haben Sie eine Spalte, um das hinzugefügte oder entfernte Volume darzustellen, und eine andere, um das aktuelle Volume darzustellen.
Betreff: Zyklus bei der Berechnung erkanntJa, es wäre großartig, wenn ich die entfernte Menge eingeben könnte, aber ich würde die entfernte Menge nur anhand der aktuellen Konzentration kennen, die, wie Sie sehen, auch von der zuvor entfernten Menge abhängt.
Betreff: Zyklus bei der Berechnung erkanntHier ist eine andere Sichtweise auf das Problem.Ich konnte es angesichts der von Ihnen angegebenen Daten nicht vollständig testen, aber ich denke, Sie werden den Ansatz sehen, den ich verfolge, und Sie sollten in der Lage sein, darauf aufzubauen.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);
Betreff: Zyklus bei der Berechnung erkanntIch habe Ihre Methode an einer etwas anderen Tabelle ausprobiert (ich habe nur die Spalte mit der Bach-Nummer hinzugefügt, aber ich denke, das Problem ist immer noch vorhanden. Anstelle einer Fehlermeldung erhalte ich leere Zellen. Gibt es eine Problemumgehung, die es einer Variablen ermöglicht, sich auf ihren letzten Wert zu verlassen?
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);