Comment étendre une sélection de lignes à partir d'une instruction if sur les mêmes valeurs de regroupement d'une autre colonne ? Dans le cas du fichier joint, la ligne 7 est sélectionnée avec :
dt << select where (:D1 > 1);
La sélection doit être étendue à toutes les valeurs de regroupement de la colonne G1, qui sont dans ce cas toutes „B“
Je demande une colonne de formule car les données sont mises à jour par SQL. Une colonne de formule existante avec des numéros d'index est mise à jour automatiquement en fonction des nouvelles données.
Je ne suis pas sûr de ce que vous voulez faire avec une version de formule.Autrement dit, quelles valeurs prévoyez-vous de se retrouver dans la nouvelle colonne, mais vous trouverez ci-dessous ma supposition sur ce que vous pourriez vouloir faire.
Pour votre information, la version formule ne sera pas aussi efficace que la version script, car elle devra s'exécuter une fois pour chaque ligne.
If( Row() == 1,
dt = Current Data Table();
d1Rows = dt << get rows where( :D1 > 1 );
g1Values = {};
If( N Rows( d1Rows ) > 0,
For( i = 1, i <= N Rows( d1Rows ), i++,
Insert Into( g1Values, dt:G1[d1Rows[i]] )
)
);
);
If( Contains( g1Values, :G1 ),
x = 1;
Row State( Row() ) = Selected State( 1 );
,
x = 0
);
x;
Voici le script de table de données avec la formule appliquée
New Table( "IfSelRows",
Add Rows( 15 ),
Compress File When Saved( 1 ),
New Column( "G1",
Character( 1 ),
"Nominal",
Set Values(
{"A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C",
"C"}
),
Set Display Width( 76 )
),
New Column( "D1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0, 0] ),
Set Display Width( 58 )
),
New Column( "Column 3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
dt = Current Data Table();
d1Rows = dt << get rows where( :D1 > 1 );
g1Values = {};
If( N Rows( d1Rows ) > 0,
For( i = 1, i <= N Rows( d1Rows ), i++,
Insert Into( g1Values, dt:G1[d1Rows[i]] )
)
);
);
If( Contains( g1Values, :G1 ),
x = 1;
Row State( Row() ) = Selected State( 1 );
,
x = 0
);
x;
)
)
)Encore merci pour le code. Cela fonctionne comme prévu. Que faut-il modifier ou ajouter au code pour l'utiliser comme colonne de formule ?
@txnelson a écrit:
Il y a plusieurs interprétations différentes de votre question, mais j'espère que celle que je résous est la bonne.Jetez un oeil à mon script et dites-moi si c'est ce à quoi vous pensiez
Names Default To Here( 1 );
dt = New Table( "IfSelRows",
Add Rows( 15 ),
Compress File When Saved( 1 ),
New Column( "G1",
Character( 1 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C"} ),
Set Display Width( 76 )
),
New Column( "D1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0, 0] ),
Set Display Width( 58 )
)
);
// Get the rows where D1 > 1
d1Rows = dt << get rows where( :D1 > 1 );
// Create a list with the values of G1 for the rows that have been selected
g1Values = {};
If( N Rows( d1Rows ) > 0,
For( i = 1, i <= N Rows( d1Rows ), i++,
Insert Into( g1Values, dt:G1[d1Rows[i]] )
)
);
// Select the rows where any of the values in the g1List exist
dt << select where(contains(g1Values,:G1));Encore merci pour le code. Cela fonctionne comme prévu. Que faut-il changer ou ajouter au code pour l'utiliser comme formule ?
Merci Jim pour votre réponse rapide. Vous avez bien compris ma question. Votre script répond exactement à ce que je cherchais.
Il y a plusieurs interprétations différentes de votre question, mais j'espère que celle que je résous est la bonne.Jetez un oeil à mon script et dites-moi si c'est ce à quoi vous pensiez
Names Default To Here( 1 );
dt = New Table( "IfSelRows",
Add Rows( 15 ),
Compress File When Saved( 1 ),
New Column( "G1",
Character( 1 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C"} ),
Set Display Width( 76 )
),
New Column( "D1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0, 0] ),
Set Display Width( 58 )
)
);
// Get the rows where D1 > 1
d1Rows = dt << get rows where( :D1 > 1 );
// Create a list with the values of G1 for the rows that have been selected
g1Values = {};
If( N Rows( d1Rows ) > 0,
For( i = 1, i <= N Rows( d1Rows ), i++,
Insert Into( g1Values, dt:G1[d1Rows[i]] )
)
);
// Select the rows where any of the values in the g1List exist
dt << select where(contains(g1Values,:G1));