Hola, tengo preguntas para diferentes escenarios como se muestra a continuación. ¡Realmente agradezco cualquier ayuda!
Escenario A : Quiero agregar esta última columna, calculando para ese ID de usuario, cuál es la diferencia de día con primero web para primero fecha para registrarse. Si no tuvo ninguna acción en la web antes de la acción de reserva, déjelo en blanco. ¿Alguien podría ayudarme con cómo debería verse la fórmula usando la función pero no jsl?
| ID de usuario | acción | fecha | desde la primera fecha web hasta la primera fecha de reserva |
| 2523 | web | 2018-05-06 | 22 |
| 2523 | web | 2018-05-16 | 22 |
| 2523 | reserva | 2018-05-28 | 22 |
| 2523 | reserva | 2018-06-08 | 22 |
| 2523 | web | 2018-07-08 | 22 |
| 2523 | reserva | 2018-08-08 | 22 |
Escenario B : según la tabla anterior, quiero calcular otra tabla como la siguiente que contiene para cada ID de usuario, diferencia de días entre ' la primera fecha de acción web '' antes de las reservas ' para cada fecha de reserva . Según la lógica, el resultado ideal con la tabla anterior como entrada será el siguiente, 3 instancias de diferencia de días para este ID de usuario. Igual que en el escenario A, solo consideramos cuando la web es anterior a la reserva.
| ID de usuario | ejemplo | cálculo |
| 2523 | 22 | 5/28 menos 5/6 |
| 2523 | 33 | 6/8 menos 5/6 |
| 2523 | 31 | 8/8 menos 7/8 |
¡Gracias!
Hola Joann,
Después de jugar un poco, pude producir un conjunto de fórmulas de columna que producen el resultado deseado (ver adjunto). Es importante destacar que la tabla debe estar ordenada por "userId" y "fecha" para que las fórmulas funcionen correctamente.
Mejor,
TS
Creo que la siguiente fórmula servirá para el escenario A:
Aún no está optimizado, pero puede mostrarle cómo se pueden hacer cosas como esta.
Utiliza un jsl simple en una fórmula, paso a paso.

Consulte el script completo para la generación de tablas:
New Table( "20210404_user_web_booking_matrixexample",
Add Rows( 12 ),
Compress File When Saved( 1 ),
New Column( "userID",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[2523, 2523, 2523, 2523, 2523, 2523, 2540, 2540, 2540, 2540, 2540, 2540]
),
Set Display Width( 66 )
),
New Column( "action",
Character( 16 ),
"Nominal",
Set Values(
{"web", "web", "booking", "booking", "web", "booking", "web", "web",
"booking", "booking", "web", "booking"}
),
Set Display Width( 73 )
),
New Column( "date",
Numeric,
"Continuous",
Format( "y/m/d", 12 ),
Input Format( "y/m/d" ),
Set Values(
[3608409600, 3609273600, 3610310400, 3611260800, 3613852800, 3616531200,
3647462400, 3647548800, 3647635200, 3647721600, 3647808000, 3647894400]
),
Set Display Width( 92 )
),
New Column( "first web date to first booking date",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [22, 22, 22, 22, 22, 22, ., ., ., ., ., .] ),
Set Display Width( 150 )
),
New Column( "formula",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Names Default To Here( 1 );
dat_vec = :date << get values;
web_vec = :action << get values;
user_vec = :userID << get values;
user_index = user_vec == :userID[Row()];
web_index = Matrix(
Substitute( :action << get values, "web", 1, "booking", 0 )
);
web_dat = dat_vec[Loc( user_index & web_index )];
booking_dat = dat_vec[Loc( user_index & !web_index )];
(Minimum( booking_dat ) - Minimum( web_dat )) / (3600 * 24);
),
Set Selected
)
)