Cycle détecté dans le calculJe sais que JMP n'est pas une feuille de calcul et je pourrais avoir besoin de calculer cela différemment de ce que je ferais dans Excel, mais je ne peux pas comprendre 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 prends également du volume du réservoir à des moments d'échantillonnage. Je dois calculer la quantité de solution A éliminée avec chaque volume d'échantillon. Mais je ne peux pas comprendre comment faire cela sans obtenir cette erreur de cycle. Veuillez aider!
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)" )
),
);Tableau de donnéesScriptingRe: Cycle détecté dans le calculVous avez raison. JMP n'est pas une feuille de calcul.
Vous pourriez considérer une table de données JMP comme une collection 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.
Re: Cycle détecté dans le calculOui, ce serait formidable si je pouvais entrer le montant retiré, mais je ne connais que le montant retiré en fonction de la concentration actuelle qui, vous pouvez le voir, dépend également du montant retiré précédemment.
Re: Cycle détecté dans le calculVoici une approche différente 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 vous en inspirer.
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 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
)]
);
);