Re: calculoHola @hcarr01 ,
No estoy seguro de entender su solicitud correctamente, pero ¿qué tal el siguiente script?
Names Default To Here( 1 );
dt = Current Data Table();
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 ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;
dt << New Column( "DUREE ETAPE1",
Numeric,
Continuous,
Format( ":jou:hh:m", 8 ),
<<SET each="" value=""> :"opé"n & (num_colnr < 2100 ) );
colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (num_colnr_mt < 2100) ); // Changed
If( N Items( colidx ) > 0,
val = Sum( dt[Row(), dur_cols[colidx]] );
If( Is Missing( val ),
0,
val
);
,
0
);
,
0
)
)
);
</SET>
Si desea calcular el siguiente código, debe usar matrix.
"num_colnr < 2100"
Espero que ayude.
Re: CálculoGracias por su ayuda, el código funciona bien pero hay un problema.
el objetivo no es utilizar los números de la variable T tales que T < 2100 porque para cada objeto este número tiene una operación correspondiente diferente.
Habría que hacer una asignación donde para cada objeto busquemos la operación correspondiente al número 2100 (en la variable T).
Para cada línea, sería:
Si la operación actual es menor o igual que la operación correspondiente al número 2100, suma la operación correspondiente al número 2100.
Ejemplo en la primera línea:
Operación en curso: 55
Operación correspondiente al número 2100 -> 62
Entonces haga la suma del número correspondiente a la operación 55 por lo tanto el número 1500.
Por lo tanto, "duración del paso" = "duración 1500" = 30
Excepto que los números no están necesariamente dispuestos en orden ascendente.
Re: calculoHola @hcarr01 ,
Gracias por su respuesta.¿Puedo comprobar mi comprensión?
Ejemplo en la segunda línea:
Operación en curso: 60 (número en la columna "opé")
Operación correspondiente al número 2100 -> 62 (en variable T y opé)
Entonces haga la suma del número correspondiente a la operación 60, por lo tanto el número 1749 (busque el número 60 en la columna 1500, 1749, 2100 o 2500).
Por lo tanto, "Duración del paso" = "Durée 1749" = 45
Ejemplo en la tercera fila:
Operación en curso: 62 (número en la columna "opé")
Operación correspondiente al número 2100 -> 62
Entonces haga la suma del número correspondiente a la operación 62, por lo tanto el número 2100.
Por lo tanto, "Duración del paso" = 0 (porque la operación actual es mayor o igual que la operación correspondiente al número 2100).
En su pregunta que describe de la siguiente manera.
"El paso 1 corresponde al número 2100, pero este número puede tener una operación correspondiente diferente dependiendo de los objetos (ejemplo: objeto 1 --> número 2100 / operación 62, objeto 5 --> número 2100 / operación 74)".
¿Cómo es el objeto 5? ¿Puede darnos un ejemplo?
Si mi entendimiento no es correcto, por favor hágamelo saber.
Re: calculoMe alegro de que hayas podido solucionar el problema por ti mismo.
Re: Cálculo¡Sí, tu razonamiento es correcto!
El objeto 5 representa qué objeto estamos estudiando, y dependiendo de los diferentes objetos, las operaciones y los números tienen diferentes correspondencias.
Creo que este código podría funcionar:
dt = Current Data Table();<BR />
dur_cols = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "durée" )
);
num_opé = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "opé" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;<BR />
dt << New Column( "DUREE",<BR />Numeric,<BR />Continuous,<BR />Format( ":jou:hh:m", 8 ),<BR /><<SET each="" value=""></SET>If( dt[Row(), num_opé ] < :"2100"n,<BR />//colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );<BR />colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (dt[Row(), num_colnr] < :"2100"n) ); // Changed<BR />If( N Items( colidx ) > 0,<BR />val = Sum( dt[Row(), dur_cols[colidx]] );<BR />If( Is Missing( val ),<BR />0,<BR />val<BR />);<BR />,<BR />0<BR />);<BR />,<BR />0<BR />)<BR />)<BR />);<BR /> Cálculo
Buenos 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:

El paso 1 corresponde al número 2100 pero este número puede tener una operación correspondiente diferente dependiendo de los objetos (Ejemplo: objeto 1 --> número 2100 / operación 62, objeto 5 --> número 2100 / operación 74)
PASO 1: corresponde al número 2100
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 hasta el paso 1, 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) por lo que la duración hasta el paso 1 es solo la duración del paso 1749 entonces duración = 45
Empecé con este código:
Names Default To Here( 1 );
dt = Current Data Table();
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 ETAPE1", Numeric, Continuous, Format(":jou:hh:m",8), << Set Each Value(
If( :"T"n < 2100 ,
colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
,
0
)
));
Gracias por su ayuda,
Atentamente
Organización de contenidosAcceso a los datosIngeniería de Calidad y Procesos