Cómo crear una columna de indicador para datos dobles con una fórmulaNo me gusta crear una columna de indicador de fórmula para datos dobles aplicando el siguiente código JSL:
dt << Clear Column Selection();
dt << Select Duplicate Rows();
dt << Name Selection in Column( Selected( 1 ), Unselected( 0 ) );
dt << Clear Select();
A pesar de que estoy obteniendo los resultados correctos, el código crea muchos mensajes de error. Sería genial si el código podría mejorarse.
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaEspero que haya un miembro de la comunidad que pueda resolver su pregunta mejor que el método que usé a continuación. Dado lo que desea, existen problemas conflictivos al tratar de utilizar la capacidad de selección de la tabla de datos, pero luego desea borrar las selecciones. Eso forzaría el recálculo de la fórmula. Entonces, lo que he hecho es hacer que la fórmula cree un subconjunto de la tabla de datos, realice sus cálculos en la tabla de datos subcontratada (aislando las selecciones) y luego lea los resultados del subconjunto a la tabla de datos original ... y luego borrando la tabla de datos subcontratada. Mira a ver si entiendes lo que estoy haciendo. Parece que funciona.
If( Row() == 1,
dt = Current Data Table();
dt << Select Columns( :Column 1, :Column 2 );
dt2 = dt << subset(
private,
dt,
selected rows( 0 ),
selected columns( 1 )
);
dt2 << Select Duplicate Rows();
dt2 << Name Selection in Column(
Column Name( "MultipleData" ),
Selected( 1 ),
Unselected( 0 )
);
);
x = dt2:MultipleData[Row()];
If( Row() == N Rows( dt ),
dt << clear column selection;
Close( dt2, nosave );
);
x;
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaHola Jim,
gracias por su apoyo. Intenté simplificar mi tema. Mi objetivo es crear una columna en la que se dirijan los datos múltiples. Pude hacer esto con la siguiente JSL:
Names Default To Here( 1 );
dt = Current Data Table();
dt << Select Columns( :Column 1, :Column 2);
dt << Select Duplicate Rows();
dt << Name Selection in Column(
Column Name( "MultipleData" ),
Selected( 1 ),
Unselected( 0 ));
dt << Clear Select();
para datos múltiples de la columna 1 y 2, del archivo adjunto. Esto funciona bien. Sin embargo, dado que los archivos de trabajo se actualizan con frecuencia con nuevos datos a través de SQL, preferiría crear una columna de fórmula "MultipleData".
Desafortunadamente, solo obtengo ceros, si se está aplicando su último código. ¿Qué podría ser una solución?
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaOK ... mi comentario anterior se basó en la suposición de que el código se estaba ejecutando en código abierto, en lugar de como una fórmula. Usando esto como una fórmula, hay algunas preocupaciones.
- El puntero a la tabla de datos, dt, debe definirse en la fórmula, si lo va a hacer referencia.
- Está utilizando funciones que se mueven automáticamente a través de todas las filas cuando se ejecutan. Las fórmulas también recorren todas las filas de una tabla de datos y ejecutan la fórmula una vez para cada fila. Por lo tanto, usar el código de la forma en que lo está haciendo significa que está ejecutando "Seleccionar filas duplicadas" una y otra vez, cuando en realidad, solo necesita ejecutarlo una vez.
- La línea roja para su primera línea en el fomula es realmente una advertencia, no un error.
A continuación se muestra una versión de su código que usaría, si utilizara esto como una fórmula.
If( Row() == 1,
dt = Current Data Table();
dt << Clear Column Selection();
dt << Select Duplicate Rows();
dt << Name Selection in Column( Selected( 1 ), Unselected( 0 ) );
dt << Clear Select();
);
No tengo muy claro por qué querría poner esto en una columna de fórmula, ya que la columna en la que lo coloque contendrá todos los valores faltantes ... así que es posible que desee repensar su proceso.
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaprimero
Dentro del editor de fórmulas, la primera línea de código está marcada con la línea roja.
Segundo
En caso de que se esté aplicando la fórmula, aparecerá una ventana emergente con los mensajes como "Enviar espera objetos de secuencias de comandos ...; Enviar, dt << / * ### * /" o "Selección () / * ### * / "
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaSu código se ve bien ...... ¿Qué errores está obteniendo?
Re: Cómo crear una columna de indicador para datos dobles con una fórmulaHola Jim,
Gracias por la solución. Probé su código con una columna de fórmula, en una gran base de datos (unas 100k filas y 100 columnas). Funcionó bien
Mi solución es el siguiente código JSL:
Names Default To Here( 1 );
dt = Current Data Table();
//Delete preveious version of the indicator column
dt << Delete Columns("MultipleData");
wait(2);
//Create the new version of the indicator column
dt << Select Columns( :Column 1, :Column 2);
dt << Select Duplicate Rows();
dt << Name Selection in Column(
Column Name( "MultipleData" ),
Selected( 1 ),
Unselected( 0 ));
dt << Clear Select();
dt << Clear Column Selection();Como mencioné antes, se prefiere una solución de fórmula, como su código. Es más conveniente, en caso de que el conjunto de datos se actualice.