Come estendere una selezione di riga da un'istruzione if sugli stessi valori di raggruppamento da un'altra colonna? Nel caso in cui il file allegato sia selezionata la riga 7 con:
dt << select where (:D1 > 1);
La selezione dovrebbe essere estesa a tutti i valori di raggruppamento dalla colonna G1, che in questo caso sono tutti "B"
Sto chiedendo la colonna della formula perché i dati vengono aggiornati da SQL. Una colonna formula esistente con numeri di indice viene aggiornata automaticamente in relazione ai nuovi dati.
Non sono sicuro di cosa vuoi fare con una versione formula.Cioè, quali valori prevedi finiscano nella nuova colonna, ma di seguito è la mia ipotesi su cosa potresti voler fare.
Cordiali saluti, la versione della formula non sarà efficiente come la versione di script, perché dovrà essere eseguita una volta per ogni riga.
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;
Ecco lo script della tabella dati con la formula applicata
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;
)
)
)Ancora grazie per il codice. Funziona come previsto. Cosa è necessario modificare o aggiungere al codice per utilizzarlo come colonna formula?
@txnelson ha scritto:
Ci sono diverse interpretazioni della tua domanda, ma spero che quella che sto risolvendo sia quella corretta.Dai un'occhiata al mio copione e dimmi se è quello a cui stavi pensando
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));Ancora grazie per il codice. Funziona come previsto. Cosa è necessario modificare o aggiungere al codice per utilizzarlo come formula?
Grazie Jim per la tua risposta veloce. Hai capito bene la mia domanda. Il tuo script offre esattamente quello che stavo cercando.
Ci sono diverse interpretazioni della tua domanda, ma spero che quella che sto risolvendo sia quella corretta.Dai un'occhiata al mio copione e dimmi se è quello a cui stavi pensando
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));