Ciclo detectado en cálculoSé que JMP no es una hoja de cálculo y es posible que deba calcular esto de manera diferente a como lo haría en Excel, pero no puedo encontrar la solución.
Tengo un cálculo en el que una variable depende de sí misma y eso me da un error de "ciclo detectado para la columna de datos".
Tengo un tanque al que se le agrega solución con el tiempo. Sé cuánto he agregado y el volumen total del tanque. También saco volumen del tanque en momentos de muestreo. Necesito calcular la cantidad de solución A que se elimina con cada volumen de muestra. Pero no puedo averiguar cómo hacerlo sin obtener este error de ciclo. ¡Por favor ayuda!
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)" )
),
);Modelado Estadístico AvanzadoRe: Ciclo detectado en cálculoEl problema parece ser que el valor de la columna para "Concentración de Soln A antes de extraer (mL/L)" siempre se establecía en un valor faltante.En JMP, la suma de dos valores en los que uno de ellos es un valor faltante siempre da como resultado un valor faltante... que se puede anular utilizando la función Sum().Aquí están los resultados que obtengo después del cambio.El JSL modificado está debajo

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: Ciclo detectado en cálculoProbé su método en una tabla ligeramente diferente (solo agregué la columna del número de bach, pero creo que el problema sigue ahí. En lugar de un mensaje de error, obtengo celdas en blanco. ¿Hay alguna solución para permitir que una variable confíe en su último valor?
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: Ciclo detectado en cálculoAquí hay una visión diferente del problema.No pude probarlo por completo, dados los datos que proporcionó, pero creo que verá el enfoque que estoy tomando y debería poder desarrollarlo.
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: Ciclo detectado en cálculoSí, sería genial si pudiera ingresar la cantidad eliminada, pero solo sabría la cantidad eliminada en función de la concentración actual que, como puede ver, también depende de la cantidad eliminada anteriormente.
Re: Ciclo detectado en cálculoEstás en lo correcto. JMP no es una hoja de cálculo.
Puede pensar en una tabla de datos de JMP como una colección de observaciones (es decir, un conjunto de datos). Como tal, cada cambio de volumen es una nueva fila. Por lo tanto, puede tener una columna para representar el volumen agregado o eliminado y otra para representar el volumen actual.
Creo que la primera columna, Solución A eliminada en el sorteo actual, debe ser un valor que se ingresa, no se calcula. Eso podría romper las referencias cíclicas. Posiblemente lo mismo para la última columna, Solución A agregada en el sorteo actual. Ajuste las fórmulas en consecuencia.