Seleccionar filas que coincidan con cualquier valor en una listaEstaba teniendo un problema con un script más complicado y escribí un script de prueba simple para intentar solucionar el problema, pero no puedo entender qué está mal. Probablemente sea muy obvio, pero lo he estado mirando durante demasiado tiempo como para darme cuenta. Creo una tabla con: Tipo de disposición,: Código NC y: Cantidad NC. El script original toma la entrada del usuario para crear la lista de códigos, pero aquí predefiní la lista. Quiero crear una columna para cada código enumerado en la lista de códigos que copie el valor en: NC Qty si: NC Code coincide con el código de la lista. Reconoce códigos [c] para nombrar la columna, pero no en la fórmula de la columna. También intenté usar Contiene en lugar de == en la fórmula, pero eso no pareció hacer una diferencia.
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 )));
);Re: Seleccionar filas que coincidan con cualquier valor en una listaLa cuestión es la misma que en el primer caso.Los códigos [c] no se interpretarán en la fórmula. Debe sustituir el valor real de los códigos [c] en la fórmula.
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]
)
)
);Re: Seleccionar filas que coincidan con cualquier valor en una listaPude utilizar la solución propuesta para solucionar mi pregunta original y parecía tener sentido. Sin embargo, luego me di cuenta de que tenía otra parte del mismo script grande que hace algo muy similar para crear columnas basadas en un valor variable de una lista. Lo que no entiendo es por qué uno funciona y el otro no. Aquí está la otra sección del guión. En esta parte tengo un costo asociado con el Código NC que se supone que solo debe aplicarse para los tipos de disposición de SCRAP-R y SCRAP-DNR. Este costo aparece en la columna Costo total.
For(c=1, c<=NItems(codes), c++,
CF<<NEW column=""></NEW>Re: Seleccionar filas que coincidan con cualquier valor en una lista¡Muchas gracias por ayudarme a resolverlo! ¡Cualquiera de esas opciones sería genial para arreglar mi script!
Re: Seleccionar filas que coincidan con cualquier valor en una listaEste es un poco complicado.Cuando usas variables en una fórmula, debes inicializarlas dentro de la fórmula.Pero lo hice sin utilizar fórmulas.
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];
);
);
);
Re: Seleccionar filas que coincidan con cualquier valor en una listaEl problema es que su valor de "c" cambia y no es estático dentro de la definición de la fórmula.Por lo tanto, debe forzar que el código tenga un valor estático de "códigos [c]" en la fórmula.A continuación se muestra una forma de hacerlo:
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]
)
)
);