Cycle détecté dans le calculJe sais que JMP n'est pas une feuille de calcul et que je devrai peut-être calculer cela différemment que dans Excel, mais je ne peux pas trouver la solution de contournement.
J'ai un calcul où une variable s'appuie sur elle-même et qui me donne une erreur "cycle détecté pour la colonne de données"
J'ai un réservoir dans lequel une solution est ajoutée au fil du temps. Je sais combien j'ai ajouté et le volume total du réservoir. Je prélève également du volume dans le réservoir au moment de l'échantillonnage. Je dois calculer la quantité de solution A qui est retirée avec chaque volume d'échantillon. Mais je ne peux pas comprendre comment faire cela sans obtenir cette erreur de cycle. S'il vous plaît aidez-moi!
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)" )
),
);Modélisation statistique avancéeRe : Cycle détecté dans le calculLe problème semble être que la valeur de la colonne "Concentration Soln A avant prélèvement (mL/L)" était toujours définie sur une valeur manquante.Dans JMP, l'addition de deux valeurs dont l'une est une valeur manquante entraîne toujours une valeur manquante... qui peut être remplacée à l'aide de la fonction Sum().Voici les résultats que j'obtiens après le changement.Le JSL modifié est ci-dessous

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)" ) = Sum(
:Name( "Soln A added (mL)" ),
-1 * 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 )]
);
);
Re : Cycle détecté dans le calculJ'ai essayé votre méthode sur une table légèrement différente (j'ai seulement ajouté la colonne du numéro de bach, mais je pense que le problème est toujours là. Au lieu d'un message d'erreur, j'obtiens des cellules vides. Existe-t-il une solution de contournement pour permettre à une variable de s'appuyer sur sa dernière valeur ?
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
)]
);
);
Re : Cycle détecté dans le calculVoici une autre approche du problème.Je n'ai pas pu le tester complètement, compte tenu des données que vous avez fournies, mais je pense que vous verrez l'approche que j'adopte et que vous devriez pouvoir en tirer parti.
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
)]
);
);
Re : Cycle détecté dans le calculOui, ce serait formidable si je pouvais entrer la quantité retirée, mais je ne connaîtrais la quantité retirée qu'en fonction de la concentration actuelle qui, vous pouvez le voir, dépend également de la quantité retirée précédemment.
Re : Cycle détecté dans le calculVous avez raison. JMP n'est pas une feuille de calcul.
Vous pouvez considérer un tableau de données JMP comme un ensemble d'observations (c'est-à-dire un ensemble de données). En tant que tel, chaque changement de volume est une nouvelle ligne. Vous pouvez donc avoir une colonne pour représenter le volume ajouté ou supprimé et une autre pour représenter le volume actuel.
Je pense que la première colonne, Solution A supprimée dans le tirage actuel, devrait être une valeur saisie et non calculée. Cela pourrait casser les références cycliques. Peut-être la même chose pour la dernière colonne, Solution A ajoutée dans le tirage actuel. Ajustez les formules en conséquence.