Creando tantas filas como el valor de una celda<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Realmente no sabía cómo categorizar esta pregunta;
Despliego los datos de un servidor SQL mediante Excel y, como lógica de SQL para cada ocasión, se crea una fila. En este caso, la ocasión es de alojamiento y se mide por "RoomNight". Por lo tanto, "RoomNight" debe consistir en el valor de "1", si el alojamiento es por 300 noches, significa que la reserva debe tener 300 filas;

Sin embargo, nuestro administrador de reservas a veces comete un error y el resultado para el alojamiento de 50 noches es el siguiente:

Lo que tengo que hacer es crear 50 filas por cada celda de 50 valores con el valor de "1" para "RoomNight" y "2" para AdultNight ".
¿Es posible?
Re: Creando tantas filas como el valor de una celdaIntenta lo siguiente, esta basado en gráficos de burbujas - intervalos de tiempo desiguales
esto multiplicará solo las noches que sean más altas que 1.
Nueva mesa ("RoomNight",
Añadir filas (15),
Nueva columna ("Orden de fila original",
Numérico,
Continuo,
Formato ("Mejor", 12),
Valores de ajuste ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
)
Nueva columna ("RoomNight",
Numérico,
Continuo,
Formato ("Mejor", 12),
Valores de ajuste ([1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70])
)
Nueva columna ("AdultNight",
Numérico,
Continuo,
Formato ("Mejor", 12),
Valores de ajuste ([2, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140])
)
);
// registra el número de noches y adultos antes de hacer algo
total de noches pre = Col Sum (: RoomNight);
total de noches de adultos pre = Col Sum (: AdultNight);
dt = Tabla de datos actuales ();
filaN = N Fila ();
// Para cada fila original, genere nuevas filas hasta la duración de cada evento.
Para (i = 1, i <= rowN, i ++,
rowi = dt << obtener fila (i);
Para (z = 1, z <= (: Nombre ("RoomNight") - 1), z ++,
dt << añadir fila (rowi);
dt << ejecutar fórmulas;
);
);
// Ordenar las observaciones a su orden original
Tabla de datos ("RoomNight") << Ordenar (por (: Orden de fila original), Ordenar (ascendente), reemplazar tabla);
// sobre paseo el número equivocado de noches
: RoomNight << Establecer cada valor (1);
: AdultNight << Establecer cada valor (2);
Espera (0);
// registrar el número total de noches en la nueva tabla
noches totales post = Col Sum (: RoomNight);
total de noches de adultos post = Col Sum (: AdultNight);
// ver que todos los totales no cambiaron
Mostrar (total de noches antes, total de noches de adultos antes, total de noches después, total de noches de adultos);
Re: Creando tantas filas como el valor de una celdaComo toda la programación, en realidad es solo una serie de pasos.
Pero, por supuesto, no tiene que (totalmente) entender algo para poder usarlo de manera efectiva, así que hice los cambios para hacer lo que creo que quiere.
Haga 'Archivo> Nuevo> Nuevo script' para abrir una ventana de editor, y corte y pegue el siguiente código en esto. Luego, haga clic en 'Editar> Ejecutar secuencia de comandos' para verificar que entendí correctamente usando el simple ejemplo proporcionado (que será diferente cada vez que lo ejecute).
Si desea ejecutarlo con sus propios datos, asegúrese de que esta tabla esté activa. Luego modifique el siguiente código de la siguiente manera:
- Reemplace el código después de '// (1):' y antes de '// (2)' con la línea única: dt1 = CurrentDataTable ();
- Cambie el '3' y el '4' en la línea inmediatamente después de '// (3)' para reflejar las posiciones de las columnas en su propia tabla.
Este código solo funciona si la tabla solo contiene columnas numéricas (como parece que aparece en la suya).
Si esto es algo que usted (o alguien más) quiere hacer rutinariamente, sería solo un poco de trabajo hacer un complemento para ocultar esta complejidad.
Y me interesaría mucho encontrar soluciones a esto que otros puedan ofrecer. Como dice el dicho en inglés, 'hay muchas maneras de pelar un gato'. . .
NombresDefaultToHere ( 1 ) ;
// Dada una fila ve3ctor 'inVec', forma una matriz compuesta por concatenar verticalmente inVec consigo mismo 'inVec [1, pos]'
// tiempos para dar una matriz 'outMat'. La columna 'pos' en 'outMat' consiste en 1's. La columna 'numPos' en outMat contendrá
// el valor de 'inVec [1, numPos]' se divide equitativamente entre las filas
extruir =
Función ({ inVec , pos , numPos } , { Predeterminado local } ,
Si ( pos > 0 ,
// ¿Es 'pos' una ubicación válida?
veces = Redondo ( inVec El 1 , pos ] , 0 ) ;
Si ( veces > 0 ,
// Extruir el vector
outMat = J ( veces , NCol ( inVec ) , . ) ;
para ( r = 1 , r <= veces , r ++,
outMat El r , 0 ] = inVec ;
) ;
outMat El 0 , pos ] = 1 ;
outMat El 0 , numPos ] = inVec El 1 , numPos ] / veces ,
// si no hace nada
outMat = inVec ;
) ,
// si no hace nada
outMat = inVec ;
) ;
// Devolver el resultado
outMat ;
) ;
// Utiliza 'extrudeRow ()' para extruir una matriz completa mediante concatenación vertical
tabla de extrusión =
Función ({ enMat , pos , numPos } , { Predeterminado local } ,
Si ( pos > 0 ,
// Extruir la matriz
newRows = suma ( enMat El 0 , pos ]) ;
outMat = J ( newRows , NCol ( enMat ) , . ) ;
rInicio = 1 ;
para ( r = 1 , r <= NRow ( enMat ) , r ++,
outMat El rInicio :: ( rInicio + enMat El r , pos ] - 1 ) , 0 ] = extruir ( enMat El r , 0 ] , pos , numPos ) ;
rInicio = rInicio + enMat El r , pos ] ;
) ,
// si no hace nada
outMat = enMat ;
) ;
// Devolver el resultado
outMat ;
) ;
// Mostrar el uso de 'extrudeTable ()'. . .
// (1): Haz una mesa para jugar
dt1 = Tabla nueva ( "Datos" ,
Nueva Columna ( "Columna 1" , Numérico , Ordinal , Fórmula ( RandomInteger ( - 5 , 5 ))) ,
Nueva Columna ( "Columna 2" , Numérico , Ordinal , Fórmula ( RandomInteger ( - 5 , 5 ))) ,
Nueva Columna ( "Frecuencia" , Numérico , Ordinal , Fórmula ( RandomInteger ( 1 , 5 ))) ,
Nueva Columna ( "Número" , Numérico , Ordinal , Fórmula ( RandomInteger ( 1 , 20 ))) ,
AddRows ( 5 )
) ;
// (2): Obtener los datos como una matriz.
mat1 = dt1 << getAsMatrix ;
// (3): Extruya esta matriz usando la columna 'Frecuencia' (la tercera) y promedie los valores de la columna 'Conteo' (la cuarta)
mat2 = tabla de extrusión ( mat1 , 3 , 4 ) ;
// (4): Haz una tabla desde mat2 y arregla los nombres de las columnas para que coincidan con dt1
dt2 = Asable ( mat2 ) ;
dt2 << escoger un nombre (( dt1 << getName ) || "Extruido por 'Frecuencia'" ) ;
cols = dt1 << getColumnNames ( "Cuerda" ) ;
para ( do = 1 , do <= Artículos ( cols ) , do ++, Columna ( dt2 , do ) << escoger un nombre ( cols El do ])) ;
Re: Creando tantas filas como el valor de una celdaGracias lan
Para mis habilidades de principiante es una ciencia espacial.
Re: Creando tantas filas como el valor de una celdaEste código antiguo casi hace lo que usted desea, y podría adaptarse a su caso especial con bastante facilidad si conoce un poco de JSL.
NombresDefaultToHere ( 1 ) ;
// Dada una fila ve3ctor 'inVec', forma una matriz compuesta por concatenar verticalmente inVec consigo mismo 'inVec [1, pos]'
// tiempos para dar una matriz 'outMat'. La columna 'pos' en 'outMat' consiste en 1's.
extruir =
Función ({ inVec , pos } , { Predeterminado local } ,
Si ( pos > 0 ,
// ¿Es 'pos' una ubicación válida?
veces = Redondo ( inVec El 1 , pos ] , 0 ) ;
Si ( veces > 0 ,
// Extruir el vector
outMat = J ( veces , NCol ( inVec ) , . ) ;
para ( r = 1 , r <= veces , r ++,
outMat El r , 0 ] = inVec ;
) ;
outMat El 0 , pos ] = 1 ,
// si no hace nada
outMat = inVec ;
) ,
// si no hace nada
outMat = inVec ;
) ;
// Devolver el resultado
outMat ;
) ;
// Utiliza 'extrudeRow ()' para extruir una matriz completa mediante concatenación vertical
tabla de extrusión =
Función ({ enMat , pos } , { Predeterminado local } ,
Si ( pos > 0 ,
// Extruir la matriz
newRows = suma ( enMat El 0 , pos ]) ;
outMat = J ( newRows , NCol ( enMat ) , . ) ;
rInicio = 1 ;
para ( r = 1 , r <= NRow ( enMat ) , r ++,
outMat El rInicio :: ( rInicio + enMat El r , pos ] - 1 ) , 0 ] = extruir ( enMat El r , 0 ] , pos ) ;
rInicio = rInicio + enMat El r , pos ] ;
) ,
// si no hace nada
outMat = enMat ;
) ;
// Devolver el resultado
outMat ;
) ;
// Mostrar el uso de 'extrudeTable ()'. . .
// (1): Haz una mesa para jugar
dt1 = Tabla nueva ( "Datos" ,
Nueva Columna ( "Columna 1" , Numérico , Ordinal , Fórmula ( RandomInteger ( - 5 , 5 ))) ,
Nueva Columna ( "Columna 2" , Numérico , Ordinal , Fórmula ( RandomInteger ( - 5 , 5 ))) ,
Nueva Columna ( "Frecuencia" , Numérico , Ordinal , Fórmula ( RandomInteger ( 1 , 5 ))) ,
AddRows ( 5 )
) ;
// (2): Obtener los datos como una matriz.
mat1 = dt1 << getAsMatrix ;
// (3): Extruya esta matriz usando la columna 'Frecuencia' (la tercera)
mat2 = tabla de extrusión ( mat1 , 3 ) ;
// (4): Haz una tabla desde mat2 y arregla los nombres de las columnas para que coincidan con dt1
dt2 = Asable ( mat2 ) ;
dt2 << escoger un nombre (( dt1 << getName ) || "Extruido por 'Frecuencia'" ) ;
cols = dt1 << getColumnNames ( "Cuerda" ) ;
para ( do = 1 , do <= Artículos ( cols ) , do ++, Columna ( dt2 , do ) << escoger un nombre ( cols El do ])) ;