Seleziona le righe che corrispondono a qualsiasi valore in un elencoStavo riscontrando un problema con uno script più complicato e ho scritto un semplice script di prova per provare a risolvere il problema, ma non riesco a capire cosa c'è che non va. Probabilmente è palesemente ovvio, ma lo guardo da troppo tempo per notarlo. Creo una tabella con :Disposition Type, :NC Code e :NC Qty. Lo script originale richiede l'input dell'utente per creare l'elenco di codici, ma qui ho predefinito l'elenco. Desidero creare una colonna per ciascun codice elencato nell'elenco dei codici che copi il valore in :NC Qty se :NC Code corrisponde al codice dall'elenco. Riconosce i codici[c] per denominare la colonna, ma non nella formula della colonna. Ho anche provato a utilizzare Contiene invece di == nella formula, ma non sembra fare differenza.
New Table( "NC Qty Col Test",
Add Rows( 5 ),
New Column( "Disposition Type",
Character,
"Nominal",
Set Values(
{"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS",
"DEVIATE-PRODUCT"}
)
),
New Column( "NC Code",
Character,
"Nominal",
Set Values( {"007", "014", "020", "007", "008"} )
),
New Column( "NC Qty",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5] )
)
);
codes = {"007", "014"};
For(c=1, c<=NItems(codes), c++,
New Column("Code " || codes[c] || " NC Qty", Numeric, Continuous, Formula(If(:NC Code==codes[c], :NC Qty, 0 )));
);Ri: Selezionare le righe che corrispondono a qualsiasi valore in un elencoLa questione è la stessa del primo caso.i codici[c] non verranno interpretati nella formula. È necessario sostituire il valore effettivo di codes[c] nella formula.
For( c = 1, c <= N Items( codes ), c++,
Eval(
Substitute(
Expr(
CF << New Column( "Code " || codes[c] || " Cost",
Numeric,
Continuous,
Format( Currency ),
Formula(
If(
And( :NC Code == __code__, :Disposition Type == "SCRAP-R" ),
:NC Qty with Zeros * :Total Cost,
And( :NC Code == __code__, :Disposition Type == "SCRAP-DNR" ),
:NC Qty with Zeros * :Total Cost,
And( :NC Code == __code__, :Disposition Type == "REWORK" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-MATERIAL" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-PROCESS" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-PRODUCT" ), 0,
0
)
)
)
),
Expr( __code__ ), codes[c]
)
)
);Ri: Selezionare le righe che corrispondono a qualsiasi valore in un elencoSono stato in grado di utilizzare la soluzione proposta per risolvere la mia domanda originale e sembrava avere senso. Tuttavia, poi mi sono reso conto che avevo un'altra porzione dello stesso grande script che fa una cosa molto simile per creare colonne basate su un valore variabile da un elenco. Quello che non capisco è perché uno funziona e l'altro no. Ecco l'altra sezione dello script. In questa parte ho un costo associato al codice NC che dovrebbe essere applicato solo per i tipi di disposizione di SCRAP-R e SCRAP-DNR. Questo costo è elencato nella colonna Costo totale.
For(c=1, c<=NItems(codes), c++,
CF<<NEW column=""></NEW>Ri: Selezionare le righe che corrispondono a qualsiasi valore in un elencoGrazie mille per avermi aiutato a capirlo! Entrambe queste opzioni sarebbero fantastiche per sistemare il mio script!
Ri: Selezionare le righe che corrispondono a qualsiasi valore in un elencoQuesto è un po' complicato.Quando usi le variabili in una formula devi inizializzarle all'interno della formula.Ma l’ho fatto senza usare formule.
dt = New Table( "NC Qty Col Test", Add Rows( 5 ),
New Column( "Disposition Type", Character, "Nominal",
Set Values(
{"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS",
"DEVIATE-PRODUCT"}
)
),
New Column( "NC Code", Character, "Nominal",
Set Values( {"007", "014", "020", "007", "008"} )
),
New Column( "NC Qty", Numeric, "Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5] )
)
);
codes = {"007", "014"};
For(c = 1, c <= NItems(codes), c++,
dt << New Column("Code " || codes[c] || " NC Qty", numeric, "Continuous")
);
for (k = 1, k <= nitems(codes), k++,
r = dt << get rows where(:NC Code == codes[k]);
colname = "Code " || codes[k] || " NC Qty";
if (nrows(r) > 0,
for (i = 1, i <= nrows(r), i++,
one_row = r[i];
column(dt, colname)[one_row] = column(dt, "NC Qty")[one_row];
);
);
);
Ri: Selezionare le righe che corrispondono a qualsiasi valore in un elencoIl problema è che il valore di "c" cambia e non è statico all'interno della definizione della formula.Pertanto, è necessario forzare il codice ad avere un valore statico di "codes[c]" nella formula.Di seguito è riportato un modo per farlo:
New Table( "NC Qty Col Test",
Add Rows( 5 ),
New Column( "Disposition Type",
Character,
"Nominal",
Set Values( {"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS", "DEVIATE-PRODUCT"} )
),
New Column( "NC Code", Character, "Nominal", Set Values( {"007", "014", "020", "007", "008"} ) ),
New Column( "NC Qty", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4, 5] ) )
);
codes = {"007", "014"};
For( c = 1, c <= N Items( codes ), c++,
Eval(
Substitute(
Expr(
New Column( "Code " || codes[c] || " NC Qty", Numeric, Continuous, Formula( If( :NC Code == __code__, :NC Qty, 0 ) ) )
),
Expr( __code__ ), codes[c]
)
)
);