différence de jours dans la même colonne de différents scénariosBonjour, j'ai des questions pour différents scénarios comme ci-dessous. J'apprécie vraiment toute aide !
Scénario A : Je veux ajouter cette dernière colonne, en calculant pour cet ID utilisateur, quelle est la différence de jour par rapport à d'abord Internet vers d'abord date de réservation. S'il n'a eu aucune action Web avant de réserver une action, laissez-le vide. Quelqu'un pourrait-il m'aider avec à quoi devrait ressembler la formule en utilisant la fonction mais pas en jsl ?
| ID de l'utilisateur | action | date | de la première date Web à la première date de réservation |
| 2523 | la toile | 2018-05-06 | 22 |
| 2523 | la toile | 2018-05-16 | 22 |
| 2523 | réservation | 2018-05-28 | 22 |
| 2523 | réservation | 2018-06-08 | 22 |
| 2523 | la toile | 2018-07-08 | 22 |
| 2523 | réservation | 2018-08-08 | 22 |
Scénario B : sur la base du tableau ci-dessus, je souhaite calculer un autre tableau comme celui ci-dessous qui contient pour chaque ID utilisateur, la différence de jour entre ' la première date d'action web' 'avant les réservations' à chaque date de réservation . Sur la base de la logique, le résultat idéal avec le tableau ci-dessus en entrée sera le suivant, 3 instances de différence de jour pour cet ID utilisateur. Comme dans le scénario A, nous considérons uniquement le moment où le Web est préalable à la réservation.
| ID de l'utilisateur | exemple | calcul |
| 2523 | 22 | 5/28 moins 5/6 |
| 2523 | 33 | 6/8 moins 5/6 |
| 2523 | 31 | 8/8 moins 7/8 |
Merci!
Ingénierie Qualité et ProcédésRe : différence de jours dans la même colonne de différents scénariosÇa marche! Merci beaucoup Georg! Apprendra du lien de Matrix et Loc. J'apprécie vraiment votre aide.Re : différence de jours dans la même colonne de différents scénariosSalut @joann , désolé de le dire mais ce n'est pas la plateforme pour un service complet, mais nous sommes heureux si nous pouvons vous aider. Donc, si vous souhaitez apprendre, veuillez consulter la documentation en ligne sur les fonctions utilisées ici.
Par exemple loc vous donne l'indice d'un vecteur pour certaines valeurs :
Fonctions Loc (jmp.com)
Veuillez consulter le script ci-dessous pour les deux scénarios. Le scénario B est assez similaire...
Si vous souhaitez avoir le tableau exact pour le scénario B comme vous l'avez décrit, vous pouvez supprimer la formule (qui conserve alors les valeurs), sélectionner les valeurs manquantes dans la colonne "Formule B" et les supprimer.
BR
names default to here(1);
// create the example table
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_A",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Names Default To Here( 1 );
// convert columns to vectors
dat_vec = :date << get values;
web_vec = :action << get values;
user_vec = :userID << get values;
// get a vector with subscripts of current userID
user_index = user_vec == :userID[Row()];
// get a vctor with subscripts where action=web
web_index = Matrix(
Substitute( :action << get values, "web", 1, "booking", 0 )
);
// get a vector with dates for current userID and action=web
web_dat = dat_vec[Loc( user_index & web_index )];
// the same for booking (actually not web)
booking_dat = dat_vec[Loc( user_index & !web_index )];
// calculate minimum of both date vectors and subtract
(Minimum( booking_dat ) - Minimum( web_dat )) / (3600 * 24);
),
Set Display Width( 146 )
),
New Column( "formula_B",
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 )];
// when current action is booking, then subtract minimum web date, otherwise keep empty, and divide seconds by seconds of day
If( :action == "booking", :date - Minimum( web_dat ), . ) / (3600 * 24);
),
Set Selected
)
);Re : différence de jours dans la même colonne de différents scénariosMerci Georg! Ça marche. Pourriez-vous m'expliquer la logique derrière ce script ? Je ne connais pas très bien Matrix et Loc ici.
Avez-vous la solution pour le scénario 2 ?
Merci!Re : différence de jours dans la même colonne de différents scénariosMerci Thierry! Le résultat a l'air bon ! Pourriez-vous s'il vous plaît m'expliquer ce que fait Transaction ID ? Je ne comprends pas la logique/formule.
Avez-vous la solution pour le scénario B ? Dans le scénario B, les secondes réservations sont importantes.
Merci!Re : différence de jours dans la même colonne de différents scénariosJe pense que la formule suivante fera l'affaire pour le scénario A :
Il n'est pas encore optimisé, mais peut vous montrer comment de telles choses peuvent être réalisées.
Il utilise du JSL simple dans une formule, étape par étape.

Veuillez consulter le script complet pour la génération de table :
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
)
)Re : différence de jours dans la même colonne de différents scénariosSalut Joann,
Après avoir joué un peu, j'ai pu produire un ensemble de formules de colonnes qui produisent le résultat souhaité (voir ci-joint). Il est important de noter que le tableau doit être trié par « userId » et « date » pour que les formules fonctionnent correctement.
Meilleur,
TS
Re : différence de jours dans la même colonne de différents scénariosSalut Joann,
Quelques questions pour voir si une solution simple pourrait être développée :
1) Auriez-vous une colonne qui ferait la différence entre la première séquence (lignes 1 à 4) et la deuxième séquence (lignes 4 à 6) ; sans cela, il est un peu plus difficile de créer des formules de colonnes permettant de distinguer les 2 ensembles de transactions.
2) Si je comprends bien, la deuxième date de réservation (ligne 4) n'est pas pertinente pour votre question.
Faites-le-nous savoir dans les meilleurs délais.
Meilleur,
TS