Tagesunterschied in derselben Spalte verschiedener SzenarienHallo, ich habe Fragen zu verschiedenen Szenarien wie unten. Ich bin wirklich für jede Hilfe dankbar!
Szenario A : Ich möchte diese letzte Spalte hinzufügen und für diese Benutzer-ID berechnen, wie groß der Tagesunterschied ist Erste Web zu Erste Buchungsdatum. Wenn er vor der Buchungsaktion keine Webaktion hatte, lassen Sie das Feld leer. Könnte mir jemand helfen, wie die Formel aussehen sollte, wenn ich die Funktion verwende, aber nicht JSL?
| Benutzer-ID | Aktion | Datum | erstes Web-Datum bis erstes Buchungsdatum |
| 2523 | Netz | 06.05.2018 | 22 |
| 2523 | Netz | 16.05.2018 | 22 |
| 2523 | Buchung | 28.05.2018 | 22 |
| 2523 | Buchung | 08.06.2018 | 22 |
| 2523 | Netz | 08.07.2018 | 22 |
| 2523 | Buchung | 08.08.2018 | 22 |
Szenario B : Basierend auf der obigen Tabelle möchte ich eine weitere Tabelle wie die folgende berechnen, die für jede Benutzer-ID die Tagesdifferenz zwischen ' enthält. der erste Web-Aktionstermin vor Buchungen Zu jedes Buchungsdatum . Basierend auf der Logik ist das ideale Ergebnis mit der obigen Tabelle als Eingabe wie folgt: 3 Instanzen der Tagesdifferenz für diese Benutzer-ID. Wie in Szenario A berücksichtigen wir nur, wann das Web vor der Buchung ist.
| Benutzer-ID | Beispiel | Berechnung |
| 2523 | 22 | 28.05. minus 6.05 |
| 2523 | 33 | 6/8 minus 5/6 |
| 2523 | 31 | 8/8 minus 7/8 |
Danke schön!
Qualitäts- und VerfahrenstechnikBetreff: Tagesunterschied in derselben Spalte verschiedener SzenarienEs klappt! Vielen Dank Georg! Lerne aus der Verknüpfung von Matrix und Loc. Schätze wirklich deine Hilfe.Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienHallo @joann Leider ist dies nicht die Plattform für Full-Service, aber wir freuen uns, wenn wir Sie unterstützen können. Wenn Sie mehr darüber erfahren möchten, lesen Sie bitte die Online-Dokumentation zu den hier verwendeten Funktionen.
Beispielsweise gibt Ihnen loc den Index eines Vektors für bestimmte Werte:
Loc-Funktionen (jmp.com)
Bitte sehen Sie sich das folgende Skript für beide Szenarien an. Szenario B ist ziemlich ähnlich ...
Wenn Sie die von Ihnen beschriebene genaue Tabelle für Szenario B haben möchten, können Sie die Formel löschen (die dann die Werte behält) und die fehlenden Werte in der Spalte „Formel B“ auswählen und löschen.
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
)
);Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienDanke Georg! Es klappt. Könnten Sie mir die Logik hinter diesem Skript erklären? Ich bin hier mit Matrix und Loc nicht so vertraut.
Haben Sie zufällig die Lösung für Szenario 2?
Danke schön!Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienDanke Thierry! Das Ergebnis sieht gut aus! Könnten Sie mir bitte erklären, was die Transaktions-ID macht? Ich verstehe die Logik/Formel nicht.
Haben Sie zufällig die Lösung für Szenario B? Im Szenario B kommt es auf die zweiten Buchungen an.
Danke schön!Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienIch denke, dass die folgende Formel für Szenario A ausreicht:
Es ist noch nicht optimiert, zeigt Ihnen aber möglicherweise, wie so etwas gemacht werden kann.
Es verwendet Schritt für Schritt einige einfache JSL in einer Formel.

Bitte sehen Sie sich das vollständige Skript zur Tabellengenerierung an:
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
)
)Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienHallo Joann,
Nachdem ich ein wenig herumgespielt hatte, konnte ich eine Reihe von Spaltenformeln erstellen, die die gewünschte Ausgabe liefern (siehe Anhang). Wichtig ist, dass die Tabelle nach „Benutzer-ID“ und „Datum“ sortiert ist, damit die Formeln ordnungsgemäß funktionieren.
Am besten,
TS
Betreff: Tagesunterschied in derselben Spalte verschiedener SzenarienHallo Joann,
Ein paar Fragen, um zu sehen, ob eine einfache Lösung entwickelt werden könnte:
1) Hätten Sie zufällig eine Spalte, die zwischen der ersten Sequenz (Zeilen 1–4) und der zweiten Sequenz (Zeilen 4–6) unterscheiden würde? Ohne dies ist es etwas schwieriger, Spaltenformeln zu erstellen, die die beiden Transaktionssätze unterscheiden würden.
2) Wenn ich das richtig verstehe, ist das zweite Buchungsdatum (Zeile 4) für Ihre Frage nicht relevant.
Informieren Sie uns so schnell wie möglich.
Am besten,
TS