Formules conditionnelles et texte libre dans la même colonneJe crée un modèle de tableau de données à utiliser par d'autres et à me soumettre. Dans certains cas, les données de ColB sont une fonction de ColA, mais il existe des conditions où ce n'est pas vrai. J'aimerais faciliter la vie de l'expéditeur lorsque cela est possible en remplissant ColB automatiquement (à l'aide d'une formule) une fois que ColA est entré, mais leur permettre tout de même d'entrer une chaîne personnalisée dans ColB si leur entrée ColA ne correspond pas à la relation prédéfinie . Existe-t-il un moyen d'y parvenir? J'espérais naïvement que laisser la condition "else" vide dans mon instruction if pourrait permettre cela, mais j'avais tort.
Bonus : Ce serait encore mieux si je pouvais ensuite utiliser List Checks en plus de toutes ces fonctionnalités (car il n'y a encore qu'une liste de valeurs acceptables pour ColB), mais JMP a déjà généré des erreurs me disant que je ne peux pas ajouter une formule au-dessus d'un contrôle de liste (ce qui, je suppose, est logique étant donné qu'une formule et un texte libre ne peuvent pas coexister).
J'ai l'intuition que j'essaie de faire trop avec un simple tableau et j'aurai probablement besoin d'un formulaire de saisie plus sophistiqué pour retirer tout cela. Mais je voulais juste vérifier avant de m'engager dans cette voie. Merci d'avance.
Re : Formules conditionnelles et texte libre dans la même colonneAhh je vois! Mettez la formule 'couleur' dans la colonne "Matériel 2" mais appliquez-la à la colonne "Matériel (si nécessaire)" qui a la liste de contrôle. Bien mieux ! J'essayais de mettre la formule dans la colonne "Matériel (si nécessaire)". Super truc!
Re : Formules conditionnelles et texte libre dans la même colonneOui, vous pouvez colorer la cellule de l'autre colonne. La formule est un peu plus compliquée et vous devez à la fois ajouter la couleur si nécessaire et la supprimer (au cas où elle aurait été ajoutée plus tôt) dans le cas contraire.
Match( :Furniture Type,
"Bed",
If( Is Missing( :"Material (if needed)"n ),
:"Material (if needed)"n << color cells( "Red", {Row()} );
"PLEASE ADD VALUE IN MATERIAL COLUMN";
,
:"Material (if needed)"n << color cells( "Black", {Row()} );
:"Material (if needed)"n;
),
"Chair", "Wood",
"Sofa",
If( Is Missing( :"Material (if needed)"n ),
:"Material (if needed)"n << color cells( "Red", {Row()} );
"PLEASE ADD VALUE IN MATERIAL COLUMN";
,
:"Material (if needed)"n << color cells( "Black", {Row()} );
:"Material (if needed)"n;
),
"Table", "Metal"
)Re : Formules conditionnelles et texte libre dans la même colonneMerci, @Peter_Hersh ! Désolé, j'ai eu du mal à l'expliquer très bien. Je pense que la proposition de Jeff devrait fonctionner cependant. J'apprécie vraiment votre contribution !
Re : Formules conditionnelles et texte libre dans la même colonneMerci, @Jeff_Perkinson ! Je pense que c'est une implémentation décente car les instructions se rempliront automatiquement lorsque l'utilisateur remplira le contenu de gauche à droite pour une ligne donnée. J'aurais dû penser à intégrer des instructions dans une formule.
S'il est possible de colorer automatiquement les cellules de la colonne "Matériel (si nécessaire)" en fonction des valeurs de la colonne "Matériel 2", je serais tout ouïe. J'ai essayé d'implémenter cela avec une formule, mais je n'ai pas pu conserver la vérification de la liste dans la colonne "Matériel (si nécessaire)". De cette façon, je pourrais simplement utiliser un indicateur de couleur pour une cellule qui doit être remplie et masquer entièrement la colonne "Matériel 2" de l'entrée (car ils n'ont pas besoin de voir la sortie "Matériel 2").
Re : Formules conditionnelles et texte libre dans la même colonneMerci, @DonMcCormack ! Oui, Row States a été sur ma liste de choses à apprendre. Merci de m'avoir indiqué. Je vais me renseigner.
Re : Formules conditionnelles et texte libre dans la même colonne@Matt_Converse , je pense que la façon dont je gérerais cela est avec deux colonnes que l'utilisateur doit remplir, une pour (en utilisant votre exemple ci-dessus) le type de meuble et une autre pour le matériau, puis votre colonne de formule utiliserait votre recherche pour les types de meubles que vous connaissez, et la colonne Matériel pour ceux que vous n'avez pas.
Dans votre formule, vous pouvez vérifier si la colonne Matériel (si nécessaire) est remplie ou non et alerter l'utilisateur qu'il doit la remplir. Vous pouvez également utiliser une propriété List Check dans la colonne Material.

Re : Formules conditionnelles et texte libre dans la même colonneSalut Matt,
Il pourrait être judicieux d'avoir un appel rapide. Je ne comprends peut-être pas tout à fait ce que vous essayez d'accomplir.N'hésitez pas à me joindre au peter.hersh@jmp.com
Vous pouvez facilement créer un script unique qui créera toutes ces relations colonne à colonne à la fois.À moins qu'il y ait une raison pour laquelle cela doit être fait.
Re : Formules conditionnelles et texte libre dans la même colonne@Matt_Converse vous pouvez envisager d'utiliser Row State Handler en conjonction avec une fonction qui vérifie et met à jour la colonne qui vous intéresse. Ce serait un peu délicat puisque le gestionnaire d'état de ligne est exécuté chaque fois qu'il y a un changement dans l'état d'une ligne, en transmettant le ou les numéros de ligne des lignes sélectionnées et non sélectionnées. Vous devrez probablement ajouter des conditions pour vous assurer que la fonction n'a été exécutée que dans certaines circonstances (par exemple, si la valeur dans la colonne cible est modifiée). L'avantage est que vous éviterez d'avoir à utiliser une fonction ou une valeur vérifiant la colonne cible. Consultez l'index de script et la documentation pour obtenir des exemples.
Re : Formules conditionnelles et texte libre dans la même colonneMerci, @Peter_Hersh ! Je n'avais pas pensé à utiliser recode. J'envisage cependant quelques défis, car mon ensemble de données (et le flux de travail "client") est plus complexe que ce à quoi j'ai fait allusion :
1. Une ligne entière de données est saisie avant qu'une seconde ligne ne soit ajoutée. Par conséquent, le script (bien qu'un simple bouton de lecture) devrait être exécuté pour chaque ligne et je devrai ajouter quelques lignes pour qu'il n'écrase pas le texte sans point d'interrogation saisi précédemment (ce qui, j'imagine, est faisable).
2. Il existe plusieurs relations colonne à colonne où j'aimerais tirer parti de cette fonctionnalité (c'est-à-dire entre ColA et ColB ainsi qu'entre ColC et ColF, etc.), de sorte que l'utilisateur devra exécuter le script plusieurs fois. fois pour une ligne donnée ainsi que savoir quand jouer le script, etc., ce qui semble un peu maladroit. Alternativement, je pourrais réorganiser les colonnes (ColA, ColC, ColB, etc.) ou demander à l'utilisateur de passer de ColA à ColC, etc. afin que le script puisse être exécuté une seule fois par ligne, mais ces options ne semblent pas très conviviales non plus .
Si vous pensez que "recoder" est ma meilleure solution de contournement, je vais probablement essayer. Merci pour votre contribution!
Re : Formules conditionnelles et texte libre dans la même colonne@Matt_Converse Avez-vous essayé d'utiliser Recode ?Dans votre exemple, une chaise serait en bois et le lit serait vide.Vous pouvez exécuter un script rapide pour exécuter ce recodage, puis ajouter une propriété de vérification de liste.La vérification de la liste permettra à l'utilisateur de cliquer avec le bouton droit de la souris et de choisir l'une des valeurs de la liste.Si vous utilisez le journal dans JMP 16, il capturera toutes ces modifications, vous n'avez donc pas besoin de script.Essayez ceci ci-dessous.
//Make Data Table
New Table( "Example 2",
Add Rows( 7 ),
New Column( "Furniture",
Character,
"Nominal",
Set Values( {"Chair", "Bed", "Chair", "Bed", "Stool", "Stool", "Bed"} )
)
);
Wait (2);
// Recode column: Material
dt = Data Table( "Example 2" );
dt << Begin Data Update;
col1 = dt << New Column( dt:Furniture );
col1 << Set Name( "Material" );
dt << Move Selected Columns( {col1}, after( dt:Furniture ) );
dt << Recode Column(
dt:Furniture,
{Map Value(
_rcOrig,
{"Bed", "?", "Chair", "Wood", "Stool", "Metal"},
Unmatched( _rcNow )
)},
Update Properties( 1 ),
Target Column( col1 )
);
dt << End Data Update;
// Clear row selection
Data Table( "Example 2" ) << Clear Select;
// Change column list check: Material
Data Table( "Example 2" ):Material << List Check( {"?", "Metal", "Wood"} );
Re : Formules conditionnelles et texte libre dans la même colonneMerci pour la réponse rapide, Pierre. J'en ai appris un peu plus sur les labels de valeur en le regardant. Cependant, à moins que quelque chose ne me manque, ColB est toujours en fin de compte une fonction de ColA. J'aurai besoin de l'option pour que ColB soit indépendant de ColA dans les cas où ColB a une relation un-à-plusieurs avec ColA.
Ainsi, par exemple, disons que ColA est "Type de meuble" et ColB est "De quel matériau est fait le meuble ?". Si l'utilisateur entre "Chaise" dans ColA alors ColB se remplit automatiquement avec "Bois" car je sais a priori que les seules chaises qu'ils auraient seraient en bois. Mais s'ils ont entré "Lit" dans ColB, alors ColB est laissé vide pour qu'ils remplissent soit "Bois" soit "Métal" car ils peuvent avoir l'un ou l'autre type. Alternativement, ColB pourrait devenir grisé s'ils mettaient "Chair" dans ColA (puisque je sais déjà ce que ColB devrait être et j'essaie juste de leur faire gagner du temps et d'éviter les fautes de frappe), mais je n'ai pas pu le faire fonctionner non plus depuis J'ai également effectué cette opération avec une formule.
J'espère que c'est un peu plus clair. Merci!
Re : Formules conditionnelles et texte libre dans la même colonne@Matt_Converse , Bonne question.Voici un exemple de quelque chose de similaire à ce que vous avez demandé.J'ai utilisé des étiquettes de valeur où vous pouvez inclure une plage.Si cette valeur tombe dans une plage spécifique, elle sera affichée sous forme d'étiquette.Cela pourrait accomplir ce que vous espérez ou du moins en partie.Vous pouvez exécuter la vérification de la liste sur Col A car elle est indépendante et si elle se situe en dehors de la plage souhaitée, cela pourrait également fonctionner.Quoi qu'il en soit, jetez-y un coup d'œil, faites-moi savoir si vous avez des questions.