Formule de colonne utilisant des données d'autres lignesSalut! J'ai une table de données de style base de données qui stocke les données d'un tas d'étapes de processus. Chaque ligne représente un échantillon d'une étape de processus donnée, et dans cette ligne, il y a une référence à l'échantillon parent. L'échantillon parent provient du même matériau, mais à l'étape de traitement précédente. J'interagis principalement avec cette table de base de données via un jmpapp, donc le script est un moyen acceptable de manipuler les données.
Dans ce tableau, je veux calculer certains paramètres sur chaque échantillon, y compris la façon dont cet échantillon a changé par rapport à l'échantillon parent. Certains de ces paramètres peuvent être calculés comme suit :
données mesurées de l'enfant * données mesurées du parent .
D'autres paramètres peuvent être calculés comme suit (où la valeur calculée à partir du parent serait similaire à l'équation ci-dessus) :
données mesurées de l'enfant * valeur calculée du parent
J'ai une solution qui fonctionne actuellement pour cela, mais elle est très lente et nécessite de nombreux appels à "Rerun Formulas".
Donc, avant de décrire ma solution actuelle, j'aimerais obtenir quelques recommandations sur les meilleures façons d'y parvenir. Peut-être que j'aborde la structure de données dans le mauvais sens! Si possible, ce serait incroyable si je pouvais garder les calculs dans ce tableau.
Vous trouverez ci-dessous une image montrant la structure actuelle des données et la manière dont elles doivent être transmises en cascade de parent à enfant afin de faire tous les calculs appropriés.
Merci pour votre aide!

Re : Formule de colonne utilisant des données d'autres lignesLes statistiques récapitulatives de colonne dans l'éditeur de formule peuvent prendre une ou plusieurs variables de regroupement.
Col Mean( :Parent Data, :ParentID )
Vous donnera la moyenne des données dans Parent Data groupées par ParentID.
Re : Formule de colonne utilisant des données d'autres lignesVoir ce lien en utilisant une instruction where avec row() et des indices
Correspondance d'index JMP
Mais cela se complique au fur et à mesure que vous essayez de l'utiliser... Je trouve que pour des choses comme celle-ci, il est plus rapide/plus facile d'utiliser simplement Excel et d'écrire un script d'importation de données.
Re : Formule de colonne utilisant des données d'autres lignes@Peter_Hersh , oui, cela a du sens, et c'est ainsi que je le fais actuellement. Cela fonctionne bien, mais en raison de la façon dont les données sont regroupées, je suis actuellement en train de parcourir différents sous-ensembles de données, ce qui prend beaucoup de temps. De plus, ce serait bien si les colonnes de données parentes étaient mises à jour chaque fois que les lignes parentes sont mises à jour, c'est pourquoi j'espérais qu'une formule de colonne pourrait être utilisée. Si je dois m'en tenir à la solution de sous-ensemble et de mise à jour, je pourrais utiliser un script "Proliférer les données parentes" dans le tableau ou quelque chose du genre.
@DonMcCormack , Les relations parent/enfant sont définies simplement en utilisant la colonne "ParentID". Chaque ligne comprend l'ID d'échantillon ainsi que l'ID de parent, donc essentiellement, les enfants doivent rechercher la chaîne jusqu'aux parents pour trouver les données dont ils ont besoin.
J'ai trouvé qu'il est possible d'utiliser une formule de colonne comme celle-ci pour obtenir les données parentes, mais ces formules doivent être exécutées plusieurs fois pour que les données puissent descendre en cascade à travers les lignes/colonnes dépendantes. Dans l'exemple du premier tableau, lors de la première exécution de la formule, les données de :Data seront renseignées dans :ParentData, mais la colonne :ParentData/ParentData restera vide car sa formule a été exécutée avant que les données ne soient renseignées. Ou.. .quelque chose comme ça au moins.
Merci pour vos pensées!
dt = CurrentDataTable();
parent = :ParentID;
rows = dt << GetRowsWhere(:SerialNumber == parent);
Mean(Column(dt, "LayersMPAFraction")[rows]);
Re : Formule de colonne utilisant des données d'autres lignesComment définissez-vous les relations Parent/Enfant ? Il serait difficile de trouver une solution robuste sans le savoir au préalable. Un regard sur votre solution d'origine pourrait aider.
Re : Formule de colonne utilisant des données d'autres lignesOK, l'astuce qui, je pense, fonctionnerait bien consiste à sous-ensembler les données d'origine avec uniquement l'ID parent et la colonne de données parent.Ensuite, rejoignez-le aux données d'origine.Faire correspondre l'ID parent à l'ID enfant.J'espère que c'est clair.Faites-moi savoir si ce n'est pas clair
Re : Formule de colonne utilisant des données d'autres lignesMerci @Peter_Hersh !
Compte tenu de ma description, ouais Lag fonctionnerait bien, mais vous avez raison en ce sens que les données ne sont pas toujours structurées de cette façon. Les données enfant et parent peuvent être contenues dans différents nombres de lignes, à différentes distances des nouvelles cellules. Par exemple, je pourrais avoir 3 lignes de données pour l'ID d'échantillon A, que je voudrais faire la moyenne pour inclure dans toutes les lignes de l'enfant. Et il peut y avoir plusieurs enfants pour le même parent.
On dirait que j'ai trop simplifié mon exemple haha. Peut-être que l'autre façon à laquelle vous avez fait allusion pourrait aider?
Re : Formule de colonne utilisant des données d'autres lignes@mringqui , Oui, cela ne devrait pas poser de problème en utilisant la fonction Lag dans le générateur de formules.Je ne sais pas si votre structure de données est toujours de cette façon.Il existe un moyen de faire cela différemment si l'espacement entre les parents et les enfants n'est pas toujours le même.
Re : Formule de colonne utilisant des données d'autres lignesQuelqu'un a des idées?