Ciao, ho domande per diversi scenari come di seguito. Apprezzo davvero qualsiasi aiuto!
Scenario A : Voglio aggiungere quest'ultima colonna, calcolando per quell'ID utente, qual è la differenza del giorno da primo web a primo data di prenotazione. Se non aveva alcuna azione web prima dell'azione di prenotazione, lasciala vuota. Qualcuno potrebbe aiutarmi con come dovrebbe apparire la formula usando la funzione ma non jsl?
| ID utente | azione | Data | dalla prima data web alla prima data di prenotazione |
| 2523 | ragnatela | 06/05/2018 | 22 |
| 2523 | ragnatela | 16/05/2018 | 22 |
| 2523 | prenotazione | 28/05/2018 | 22 |
| 2523 | prenotazione | 2018-06-08 | 22 |
| 2523 | ragnatela | 2018-07-08 | 22 |
| 2523 | prenotazione | 2018-08-08 | 22 |
Scenario B : in base alla tabella sopra, voglio calcolare un'altra tabella come la seguente che contiene per ogni ID utente, differenza di giorno tra " la prima data dell'azione web "prima delle prenotazioni" per ogni data di prenotazione . In base alla logica, il risultato ideale con la tabella sopra come input sarà il seguente, 3 istanze di differenza di giorno per questo ID utente. Come nello scenario A, consideriamo solo quando il web è prima della prenotazione.
| ID utente | esempio | calcolo |
| 2523 | 22 | 5/28 meno 5/6 |
| 2523 | 33 | 6/8 meno 5/6 |
| 2523 | 31 | 8/8 meno 7/8 |
Grazie!
Ciao Joann,
Dopo aver giocato un po ', sono stato in grado di produrre una serie di formule di colonna che producono l'output desiderato (vedi allegato). È importante sottolineare che la tabella deve essere ordinata per "userId" e "data" affinché le formule funzionino correttamente.
Migliore,
TS
Penso che la seguente formula andrà bene per lo scenario A:
Non è ancora ottimizzato, ma potrebbe mostrarti come fare cose del genere.
Usa alcuni semplici jsl in una formula, passo dopo passo.

Si prega di vedere lo script completo per la generazione della tabella:
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
)
)