Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteSalut - J'ai besoin d'aide pour mettre une formule pour trouver une ligne la plus récente en fonction des conditions et récupérer une valeur de colonne différente / effectuer des calculs entre deux paramètres de ligne (DateTime).
Le tableau de données ci-dessous (également joint) comporte : les colonnes Asset, DateTime, Discrete et Action .
Les données sont triées en fonction de l'actif d'abord, puis de la date et de l'heure (croissant)
Il existe également une variable de table days_threshold = 4.
Action(Desired) est la forme d'action souhaitée dans laquelle la formule actuelle

doit être modifié.
Toute ligne qui obtient un Discret = 1 (qui est normalement déterminé par une règle de formule ignorée ici et à la place des exemples de valeurs fournies) , Action doit commencer à regarder ses propres lignes précédentes (dans DateHeure forme descendante). Deux conditions dans cette recherche sont :
1- À la recherche du même Actif Pour qui Discret =1 (c'est-à-dire XY01 ou XY02)
2- Regardez jusqu'à la valeur la plus récente de Acte = 1 est trouvé .
Calculer le nombre de jours entre la dernière fois que l'action était 1 et DateTime de la ligne actuelle.
Si la différence (en jours) >= days_threshold = 4 ---> alors Action de la ligne actuelle = 1
Sinon si la différence (en jours) < days_threshold ---> alors Action de la ligne courante = 0
Uniquement intéressé à trouver l'heure la plus récente où l'action était "1" ... Une fois que cette valeur unique est trouvée (si elle existe), la recherche peut s'arrêter à ce point. La limite de recherche est jusqu'à la première occurrence de cet actif (c'est-à-dire l'enregistrement le plus ancien). Si l'action n'a jamais été définie sur "1" auparavant, alors l'action de la ligne actuelle peut être définie sur "1"
par exemple, la ligne 2 est la première fois que XY01 obtient Action =1 (basé sur Discrete, qui est lui-même lié à certaines règles, montrant simplement les valeurs w/ dans cet exemple).
Ensuite, à la ligne 3, Discrete est à nouveau défini sur 1, mais cette fois, Action doit être égal à 0 car le nombre de jours de différence entre les lignes précédentes et actuelles est de 0 (< days_threshold).
De même, pour la ligne 5, Action reste toujours 0 car seulement 3 jours se sont écoulés depuis la dernière fois où Action était 1.
Enfin, l'action est définie sur "1" à la ligne 6.
Fourni deux actifs suivant cette idée - définissez les valeurs souhaitées sur Action(Desired).
Je préfère que ce soit une formule plutôt qu'un script.
merci d'avance l'équipe JMP.
Altug Bayram

Fusion et nettoyage des donnéesIngénierie de la qualité et des procédésRe : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteJarmo
Cela a très bien fonctionné.Cela a également ouvert ma compréhension des formules pour contenir une logique plus complexe lorsqu'elles sont séparées par ";".
De plus, il est intéressant que 0 dans ce cas fonctionne comme une réinitialisation de départ pour un paramètre DateTime.
Jarmo/Jim - merci pour l'aide extrêmement rapide à ce sujet... apprécions le soutien.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteDe plus, j'utilise Lag, Date Difference de nombreuses fois dans les formules. Mais comme cela devient un peu compliqué en tant que code et en raison de mon manque d'expérience dans l'intégration de scripts dans des formules, j'ai un peu de mal sur ce front. Si l'intention était sur le nombre d'enregistrements plutôt que sur les jours calendaires, je pourrais le faire facilement grâce à la fonction d'index disponible. L'exigence du "jour" rend la tâche plus difficile.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteSeule la partie formule serait celle-ci et vous devriez pouvoir l'ajouter directement à la formule à partir des informations de colonne après avoir créé une nouvelle colonne
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
J'ai également joint le tableau. Et si vous n'êtes pas très familier avec les formules, vous pouvez lire certaines parties de ce Utilisation de JMP > Créer des formules dans JMP
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteBonjour, pourriez-vous joindre votre version afin que je puisse voir comment le script est intégré dans la formule. Je suis novice dans la mise en place de scripts dans des formules.
merci.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteMa formule devrait toujours fonctionner correctement, car elle utilisait déjà des jours au lieu de mois (j'ai fait la conversion dans ma table de test, mais je l'ai oubliée). Action2 est le résultat de la formule que j'ai fournie et il n'y a pas de différence entre celle-ci et la colonne Action(Desired):

Je suggère de vérifier l'index de script pour As Constant, Date Difference et Lag. Ceux-ci devraient aider à la compréhension de la formule
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteVeuillez voir ci-dessous pour ma prochaine version avec le format DateTime corrigé (il aurait dû être M/D/Y ...)
Je cherche une formule qui peut le faire, si possible. Merci.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteJ'ai corrigé le format de DateTime dans cette prochaine version. Merci pour votre aide.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteLa contrainte "jours" mesure en temps calendaire - "combien de jours se sont écoulés depuis que le temps Action était 1" est la question.
Je me rends compte que j'ai mal mis le format sur la colonne DateTime comme D/M/Y
Cela aurait dû être M/J/A....
Mes excuses pour l'erreur.
donc les rangées 3 et 5 sont respectivement les 2 et 5 juin.
Serait-il possible de créer une formule pour cela ?
Merci à l'équipe JMP.
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteJ'ai une question concernant votre colonne DateTime.Comme vous l'avez défini, toutes les valeurs de l'actif = "XY01" ont été mesurées le 6ème jour de différents mois pour l'année 2022.
ligne 3 = 6 février 2022
ligne 5 = 6 mai 2022
qui est à 89 jours d'intervalle, mais vous indiquez que l'action souhaitée est 0.
@jthi réponse montre une action de 1, tout comme mon propre calcul indépendant.
Que nous manque-t-il ?
Re : Formule - Comment trouver la ligne la plus récente (en fonction des conditions) et récupérer la valeur d'une colonne différenteQuelque chose comme ça pourrait fonctionner :
dt << New Column("Action", Numeric, Nominal, Formula(
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
));