Je ne comprends pas pourquoi cela est marqué comme spam, car ce n'est pas un spam et un problème légitime que j'essaie de résoudre ?
Lien pour publier : (Problème de script pour supprimer les mesures redondantes propres à certaines conditions)
par FreshUser
https://community.jmp.com/t5/Discussions/Problem-with-script-to-delete-redundant-measurements-specific-to/mp/554948#M76947
J'ai une table de données composée de plusieurs lignes de mesures individuelles en série que je découpe avant d'effectuer une fonction de fractionnement de table, mais j'ai un problème avec certaines mesures redondantes que je voudrais supprimer mais le code actuel I que j'utilise est extrêmement lent et probablement inefficace pour ce dont j'ai besoin. Informations générales : Chaque ligne est le résultat d'une mesure automatisée individuelle sur un morceau de matériau effectuée en série et produit un rapport avec les colonnes suivantes : Un ID de pièce unique attribué à chaque morceau de matériau individuel [ PartID ] L'ID de lot associé au matière première utilisée pour créer la pièce de matériau individuelle [LotID] La valeur de mesure réelle pour la mesure effectuée [Valeur] Le résultat de la mesure attribué en fonction de la valeur de la mesure (Réussite/Échec/Reprise) [Résultat] Horodatage de la mesure [Date_Created] Mon équipement produit des dizaines de lignes de mesures par pièce de matériau et traite des milliers de pièces de matériau par rapport - ces rapports sont ensuite introduits dans JMP en tant que table de données d'origine.Chaque rapport contient également plusieurs lots, de sorte que la table de données a plusieurs références à "PartID = 1" car chaque lot reçoit un numéro séquentiel commençant à 1, donc je dois utiliser à la fois PartID et LotID pour faire référence à un morceau donné de matériel.Dans le cas où le résultat est "Retravailler", l'équipement de mesure arrête toute autre mesure sur ce morceau de matériau individuel, réoriente le morceau de matériau et le renvoie au début de la ligne en re-mesurant tous les tests précédents sur le matériau tout en conservant le même ID de pièce unique associé à la pièce de matériau. Résultat souhaité : je souhaite utiliser un script pour parcourir le tableau de données et éliminer toutes les mesures jusqu'au (et y compris) le résultat de la reprise, car après la reprise, toutes les mesures sont répétées et la reprise peut affecter les valeurs de mesure.Pour ce faire, j'utilise actuellement le script JSL pour parcourir chaque ligne et effectuer les opérations suivantes : Identifiez si le résultat est "Retravailler" ; si c'est le cas, procédez comme suit : Identifiez le PartID pour le morceau de matériau donné en tant que "xPartID" Identifiez le LotID pour le morceau de matériau donné en tant que "xLot" Identifiez le Date_Created pour la mesure donnée en tant que "xDate" Sélectionnez et supprimez toutes les lignes où (PartID = xPartID) et (LotID = xLot) et (Date_Created <= xDate) Si le résultat n'est pas "Rework" puis sortir de la boucle, pas besoin de continuer. Je continue d'avoir des ralentissements extrêmes et, fondamentalement, le code conduit à planter le programme.Si je l'exécute étape par étape, cela semble fonctionner, mais si on le laisse courir, il finit par mourir. Voici le code réel : // Recodage des deux résultats potentiels "Rework" dans une valeur partagée "aRework" ; en mettant la lettre "a" devant, donc si je trie par la colonne ascendante, toutes ces valeurs sont au début de la liste, pour, espérons-le, faciliter et accélérer leur traitement. dt << Recode Column( dt:result, {Map Value( _rcOrig, {"FailOnHighRework", "aRework", "FailOnLowRework", "aRework"}, Unmatched( _rcNow ) )}, Update Properties( 1 ), Target Column( :résultat ) ); // Tri de la table en utilisant la colonne de résultat après le recodage, de sorte que toutes les lignes de retravail soient au début de la table SortColumn = "result" ; dt << Trier( Par( :résultat ), Remplacer le tableau, Ordre( Croissant ), Supprimer l'évaluation de la formule( 1 ) ); //exécute maintenant le script ligne par ligne dt << commence la mise à jour des données ; pour chaque ligne( If( :result == "aRework", xRow = Row(); xPartID=:PartID[Row()]; xLot=:lot[Row()]; xDate=:date_created[Row()] ; dt <
Ce message a 0 réponses