Re: Fórmula ColonneUna pregunta: ¿Por qué ENT4 contiene la duración desde 2500 pero ENT2 no contiene la duración desde 1749?
Re: Fórmula de columnaUn error en la base de datos, actualicé la base de datos!
Gracias por el comentario.
Re: Fórmula ColonnePuede hacer esto con una fórmula, pero yo lo haría con secuencias de comandos. A continuación se muestra un ejemplo que al menos funciona con sus datos de ejemplo
Names Default To Here(1);
dt = Open("$DOWNLOADS/Test(1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Output("Matrix"), Num(Word(-1, col_name)));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(num_colnr > :T); // indices of num colums larger than :T value
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));Re: Fórmula de columnaGracias por su respuesta.
Tengo un comentario, me parece que en su código está comparando con los elementos de la columna T, sin embargo, olvidé especificar que los valores de T pueden estar en cualquier orden (no necesariamente creciente), para que los valores de las operaciones están ordenadas en orden ascendente de avance.
Por ejemplo :
T = 690 / operación = 47
T = 550 / operación = 55
¡Y el progreso sigue el orden de las operaciones!
Segunda observación, en mi base de datos tengo valores numéricos en formato de duración para duraciones T, con el formato "h:m:s".
Re: Fórmula ColonneSi entiendo correctamente, mi solución aún debería funcionar. Solo depende del hecho de que las columnas :1500, :1749,... están en el mismo orden que las columnas :duree 1500, :duree 1749,... Además, incluso si JMP le muestra valores de duración con formato limpio en realidad (creo) todavía son segundos (puede verificar esto cambiando Formato a Mejor, por ejemplo, desde la configuración de la columna).
Re: Fórmula de columnaSupongo que hay un problema en el código.
El problema aquí estaría en la asignación de la variable "colidx": no comparamos los números de la variable T sino las operaciones correspondientes a estos números (aquí las columnas amarillas).
En el ejemplo anterior para la primera línea sería:
si la primera línea ": 1500"> primera línea ": op" -> agregar duración 1500
si la primera línea ": 1749"> primera línea ": op" -> agregar duración 1749si la primera línea ": 2100"> primera línea ": op" -> agregar duración 2100
si la primera línea ": 2500"> primera línea ": op" -> agregar duración 2500
y haz esto para cada línea...
Re: Fórmula ColonneAsí que cambia
colidx = Loc(num_colnr > :T);
a
colidx = Loc(num_colnr > :"opé"n);
y realice los cambios correspondientes en Loc (use filas específicas en lugar de nombres de columnas) y num_colnr (no es necesario que sean números)
Re: Fórmula de columna
Gracias por tu respuesta, ya cambié la asignación de "colidx" como me indicaste.
Sin embargo, no veo qué cambios debo hacer en: "y hacer los cambios correspondientes en Loc (use nombres de fila específicos en lugar de nombres de columna) y num_colnr (no se necesitan números)".
¿Puedes decirme con más detalle por favor?
Re: Fórmula de columnaModifiqué el valor de num_colnr con este código para seleccionar las columnas necesarias para lo siguiente:
SNames = dt << Obtener nombres de columnas (String, "Nominal");
For(i=1, i <= N Elementos(Snames), i++,
sclmn = Columna(Snames[i]);
mostrar (sclmn);
);
Este código me permite obtener todas las columnas correspondientes a la parte amarilla de la base de datos.
Sin embargo, parece que no puedo hacer los cambios correspondientes para "Loc".
Re: Fórmula ColonneNames Default To Here(1);
dt = Open("$DOWNLOADS/Test (1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Word(-1, col_name));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(dt[Row(), num_colnr] > :"opé"n);
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));
Subíndice de tabla de datos
Re: Fórmula de columnaEn mi base de datos tengo 900 columnas diferentes (columnas amarillas), esto significa que el número "num_colnr" es una lista con muchos números:

Al ejecutar el script JSL que compartió conmigo, aparece este tipo de error:

Mientras que num_colnr como se muestra arriba es una lista de números
Re: Fórmula de columnaY al agregar "Num" para convertir a numérico:
num_colnr = Transform Each({col_name}, dur_cols, Num(Word(-1, col_name)));
show(num_colnr);Me sale este tipo de error:

Re: Fórmula Colonne¿Tiene una columna llamada "711" en su tabla de datos? No entiendo ese mensaje de error ya que está en francés y mi mejor suposición es que es igual a este
Expecting a number or list of numbers at row 1 in access or evaluation of 'dt[ /*###*/Row(),num_colnr]', <BR />Bad Argument("1500"), dt[/*###*/Row(), num_colnr]
at line 14 in C:\Users\jarmo\Documents\Script.jsl
lo que podría significar que falta la columna llamada "711".
Re: Fórmula de columna
Sí, esta es mi primera columna (entre todas las columnas de color amarillo):
Re: Fórmula ColonneOk, tal vez esté indicando que falta una (o más) de esas columnas y realmente no dice cuál. Entonces, tal vez mi lógica de cómo obtengo esos de las columnas duree es incorrecta
Re: Fórmula de columnaSí, probablemente tengas razón, miraré de mi lado.
¡Gracias por tu valiosa ayuda!
Fórmula de columnaBuenos días a todos,
Estoy buscando crear una fórmula para varias columnas de mi base de datos. No es tan fácil de entender, explicaré mi objetivo con un ejemplo:

Parte gris:
Aquí, aquí hay 4 tipos diferentes de objetos (ENT1,...,ENT4). Cada uno de los objetos está asociado a un número de progreso (columna T), estos números están vinculados a operaciones bien definidas.
Parte amarilla:
Estas celdas muestran qué "números" experimentará cada objeto y asocian este número con las operaciones. Cuando las celdas están vacías, esto significa que el objeto no se someterá a esta operación.
El objetivo es:
- Sumar las duraciones, sabiendo que el objeto ha progresado (Ej: el objeto ENT2 está ubicado en el número 1749, por lo que no nos interesa lo que hizo antes en 1500)
- Tomemos el objeto ENT2, tendríamos que sumar la duración 2100 y la duración 2500 porque estos son los números que debe pasar este objeto.
Gracias por su ayuda,
Atentamente
Automatización y secuencias de comandos