Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceSalut tout le monde,
J'ai 2 tables où le dtA est mon fichier d'origine et le dtB est mon fichier de référence. Ce que je voudrais faire, c'est que dtA soit mis à jour en fonction de la date inférieure ou égale au fichier de référence.
Par exemple,
Tableau dtA
| Date | Modèle | Quantité |
| 24/06/2023 | UN | 23 |
| 30/06/2023 | UN | 25 |
| 01/07/2023 | UN | 34 |
| 05/07/2023 | UN | 50 |
Tableau dtB
| Date | Modèle | Réf |
| 01/06/2023 | UN | 100 |
| 01/07/2023 | UN | 150 |
Après la mise à jour de dtA, le tableau devrait ressembler à ceci
| Date | Modèle | Quantité | Réf |
| 24/06/2023 | UN | 23 | 100 |
| 30/06/2023 | UN | 25 | 100 |
| 01/07/2023 | UN | 34 | 150 |
| 05/07/2023 | UN | 50 | |
Est-ce possible? S'il vous plaît, aidez
Automatisation et scriptsRe : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceVoici un script qui fonctionne.Ce ne sera pas très efficace si les tables misent vraiment gros.
Étant donné vos 2 tables de données, le script fournira la mise à jour

Veuillez noter que la ligne 4 a une valeur de mise à jour, là où votre table n'en avait pas.Sauf si j'interprète mal votre exigence, la dernière ligne a une valeur dans le tableau de référence qui répond aux critères de sélection.
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 : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceIl existe peu de méthodes différentes pour procéder ainsi, mais JMP ne propose pas (du moins encore) directement une telle jointure.
Vous pouvez d'abord créer une référence dans votre table d'origine (qui sera vide) (cette étape est probablement inutile car JMP ajoutera les colonnes manquantes lors de la concaténation)

Concaténer les tables

Trier par groupes et par heure. Sélectionnez toutes les valeurs dans la colonne Ref et cliquez avec le bouton droit pour sélectionner Remplir manquant

Sélectionnez toutes les lignes pour lesquelles la quantité est manquante et supprimez-les


Il existe également des compléments (et des scripts) qui peuvent faire cela en rejoignant la communauté. Vous pouvez également utiliser SQL dans JMP
Re : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceSalut txnelson, cela provoque une erreur comme celle-ci.

Re : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceVous utilisez probablement une version JMP antérieure à la version 16 (For Each a été ajouté dans JMP16). Vous pouvez assez facilement le modifier et le changer en boucle For
Re : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceJe soupçonne que vous disposez d'une version de JMP qui ne prend pas en charge
For Each()
donc si vous modifiez la section Pour chaque en
For(row=1, row<= N Rows( dtA ), row++,
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);
ça devrait marcher.
Re : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceLe script fonctionne bien maintenant, mais j'ai une dernière question, existe-t-il un moyen de limiter la mise à jour à une certaine date puisque les tables seront mises à jour quotidiennement ? Par exemple,
Tableau dtA
| Date | Modèle | Quantité |
| 24/06/2023 | UN | 23 |
| 30/06/2023 | UN | 25 |
| 01/07/2023 | UN | 34 |
| 05/07/2023 | UN | 50 |
| 10/07/2023 | UN | 65 |
| 27/07/2023 | UN | 68 |
Tableau dtB
| Date | Modèle | Réf |
| 01/06/2023 | UN | 100 |
| 01/07/2023 | UN | 150 |
| 20/07/2023 | UN | 300 |
| 01/08/2023 | UN | 250 |
Après la mise à jour de dtA, le tableau devrait ressembler à ceci
| Date | Modèle | Quantité | Réf |
| 24/06/2023 | UN | 23 | 100 |
| 30/06/2023 | UN | 25 | 100 |
| 01/07/2023 | UN | 34 | 150 |
| 05/07/2023 | UN | 50 | 300 |
| 10/07/2023 | UN | 65 | 300 |
| 27/07/2023 | UN | 65 | 250 |
J'ai essayé d'utiliser le script, mais il écrase la valeur de référence des dates passées par la plus récente, qui est 250. Ça ressemble à ça
| Date | Modèle | Quantité | Réf |
| 24/06/2023 | UN | 23 | 250 |
| 30/06/2023 | UN | 25 | 250 |
| 01/07/2023 | UN | 34 | 250 |
| 05/07/2023 | UN | 50 | 250 |
| 10/07/2023 | UN | 65 | 250 |
| 27/07/2023 | UN | 65 | 250 |
Re : Mettre à jour le tableau selon la date inférieure ou égale au fichier de référenceLe but de la Communauté de Discussion en ce qui concerne l'aide avec les scripts, n'est pas d'être une source de génération de scripts à la demande.Il est là pour aider les individus à surmonter les problèmes liés aux scripts qu'ils développent et pour accroître leur capacité à améliorer leurs propres scripts.
Si vous n'avez pas pris le temps de lire le Guide de Scripting, je vous suggère fortement de le faire.Il vous montrera les détails du langage de script et vous verrez que JSL est un langage de script complet qui peut gérer pratiquement tout ce que vous pouvez lui lancer.Cependant, concernant votre question actuelle, vous pouvez facilement placer des instructions conditionnelles "IF()" pour définir quand la mise à jour doit être exécutée ou non.Voici ci-dessous une illustration d'un tel
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] = .
)
)
);