Actualizar tabla según fecha menor o igual al archivo de referenciaHola a todos,
Tengo 2 tablas donde dtA es mi archivo original y dtB es mi archivo de referencia. Lo que me gustaría hacer es actualizar dtA de acuerdo con la fecha menor o igual que el archivo de referencia.
Por ejemplo,
Tabla dtA
| Fecha | Modelo | Cantidad |
| 24/06/2023 | A | 23 |
| 30/06/2023 | A | 25 |
| 01/07/2023 | A | 34 |
| 05/07/2023 | A | 50 |
Tabla dtB
| Fecha | Modelo | Árbitro |
| 01/06/2023 | A | 100 |
| 01/07/2023 | A | 150 |
Después de actualizar dtA, la tabla debería verse así
| Fecha | Modelo | Cantidad | Árbitro |
| 24/06/2023 | A | 23 | 100 |
| 30/06/2023 | A | 25 | 100 |
| 01/07/2023 | A | 34 | 150 |
| 05/07/2023 | A | 50 | |
es posible? Por favor ayuda
Automatización y secuencias de comandosRe: Actualizar tabla según fecha menor o igual al archivo de referenciaAquí hay un script que funciona.No será muy eficiente si las mesas apuestan mucho.
Dadas sus 2 tablas de datos, el script proporcionará la actualización

Tenga en cuenta que la fila 4 tiene un valor de actualización, donde su tabla no tenía uno.A menos que esté malinterpretando su requisito, la última fila tiene un valor en la tabla de referencia que cumple con los criterios de selección.
Names Default To Here( 1 );
New Table( "Original",
Add Rows( 4 ),
New Column( "Date",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3770409600, 3770928000, 3771014400, 3771360000] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A", "A", "A"} ) ),
New Column( "Qty", Set Values( [23, 25, 34, 50] ) )
);
New Table( "Reference",
Add Rows( 2 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3768422400, 3771014400] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A"} ) ),
New Column( "Ref", Set Values( [100, 150] ) )
);
// This is the code that does the actual update
dtA = Data Table( "Original" );
dtB = Data Table( "Reference" );
dtA << New Column( "Ref" );
For Each( {row}, Index( 1, N Rows( dtA ) ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);Re: Actualizar tabla según fecha menor o igual al archivo de referenciaHay algunos métodos diferentes para hacer esto, pero JMP no ofrece (al menos todavía) dicha unión directamente.
Primero puede crear una referencia a su tabla original (que estará vacía) (lo más probable es que este paso sea innecesario ya que JMP agregará las columnas que faltan al concatenar)

Concatenar las tablas

Ordenar por grupos y tiempo. Seleccione todos los valores en la columna Ref y haga clic derecho para seleccionar Falta relleno

Seleccione todas las filas a las que les falte QTY y elimínelas


También hay algunos complementos (y scripts) que pueden hacer que esto se una a la comunidad. También puedes usar SQL dentro de JMP.
Re: Actualizar tabla según fecha menor o igual al archivo de referenciaHola txnelson, aparece un error como este.

Re: Actualizar tabla según fecha menor o igual al archivo de referenciaLo más probable es que esté ejecutando una versión de JMP anterior a la 16 (se agregó For Each en JMP16). Puedes modificarlo con bastante facilidad y convertirlo en bucle For.
Re: Actualizar tabla según fecha menor o igual al archivo de referenciaSospecho que tienes una versión de JMP que no es compatible
For Each()
entonces, si cambia la sección Para cada a
For(row=1, row<= N Rows( dtA ), row++,
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);
deberia de funcionar.
Re: Actualizar tabla según fecha menor o igual al archivo de referenciaEl script funciona bien ahora, pero tengo una última pregunta: ¿hay alguna manera de limitar la actualización a una fecha determinada ya que las tablas se actualizarán todos los días? Por ejemplo,
Tabla dtA
| Fecha | Modelo | Cantidad |
| 24/06/2023 | A | 23 |
| 30/06/2023 | A | 25 |
| 01/07/2023 | A | 34 |
| 05/07/2023 | A | 50 |
| 10/07/2023 | A | sesenta y cinco |
| 27/07/2023 | A | 68 |
Tabla dtB
| Fecha | Modelo | Árbitro |
| 01/06/2023 | A | 100 |
| 01/07/2023 | A | 150 |
| 20/07/2023 | A | 300 |
| 01/08/2023 | A | 250 |
Después de actualizar dtA, la tabla debería verse así
| Fecha | Modelo | Cantidad | Árbitro |
| 24/06/2023 | A | 23 | 100 |
| 30/06/2023 | A | 25 | 100 |
| 01/07/2023 | A | 34 | 150 |
| 05/07/2023 | A | 50 | 300 |
| 10/07/2023 | A | sesenta y cinco | 300 |
| 27/07/2023 | A | sesenta y cinco | 250 |
Intenté usar el script, pero sobrescribe el valor de referencia de fechas pasadas con el más nuevo, que es 250. Se parece a esto
| Fecha | Modelo | Cantidad | Árbitro |
| 24/06/2023 | A | 23 | 250 |
| 30/06/2023 | A | 25 | 250 |
| 01/07/2023 | A | 34 | 250 |
| 05/07/2023 | A | 50 | 250 |
| 10/07/2023 | A | sesenta y cinco | 250 |
| 27/07/2023 | A | sesenta y cinco | 250 |
Re: Actualizar tabla según fecha menor o igual al archivo de referenciaEl propósito de la comunidad de discusión con respecto a la ayuda con los guiones no es ser una fuente de generación de guiones bajo demanda.Está aquí para ayudar a las personas a superar los problemas con los guiones que están desarrollando y para aumentar su capacidad de mejorar sus propios guiones.
Si no se ha tomado el tiempo de leer la Guía de secuencias de comandos, le recomiendo encarecidamente que lo haga.Le mostrará los detalles del lenguaje de secuencias de comandos y verá que JSL es un lenguaje de secuencias de comandos completo que puede manejar prácticamente cualquier cosa que le pueda lanzar.Sin embargo, con respecto a su pregunta actual, puede colocar fácilmente declaraciones "IF()" condicionales para definir cuándo se debe ejecutar o no la actualización.A continuación se muestra una ilustración de tales
For( row = 1, row <= N Rows( dtA ), row++,
If( dtb:Date == Today(),
If( dtA:date[row] <= Col Max( dtB:date ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)],
dtA:Ref[row] = .
)
)
);