こんにちは、私は以下のようなさまざまなシナリオについて質問があります。 本当に助けてくれてありがとう!
シナリオA :この最後の列を追加して、そのuserIDを計算します。日との違いは何ですか?最初ウェブへ最初予約日。 予約アクションの前にWebアクションがなかった場合は、空のままにします。 誰かが、jslではなく関数を使用して数式がどのように見えるかを教えてもらえますか?
| ユーザーID | アクション | 日付 | 最初のWeb日付から最初の予約日 |
| 2523 | ウェブ | 2018-05-06 | 22 |
| 2523 | ウェブ | 2018-05-16 | 22 |
| 2523 | 予約 | 2018-05-28 | 22 |
| 2523 | 予約 | 2018-06-08 | 22 |
| 2523 | ウェブ | 2018-07-08 | 22 |
| 2523 | 予約 | 2018-08-08 | 22 |
シナリオB :上記の表に基づいて、以下のような別の表を計算します。この表には、ユーザーIDごとに、 '間の日数の差が含まれています。予約前の最初のWebアクション日付 ''に各予約日。 ロジックに基づくと、上記の表を入力として使用した場合の理想的な結果は次のようになります。このユーザーIDの日差は3インスタンスです。 シナリオAと同じように、Webが予約前の場合のみ考慮します。
| ユーザーID | インスタンス | 計算 |
| 2523 | 22 | 5/28マイナス5/6 |
| 2523 | 33 | 6/8マイナス5/6 |
| 2523 | 31 | 8/8マイナス7/8 |
ありがとうございました!
こんにちはジョアン、
少し遊んだ後、目的の出力を生成する一連の列数式を生成することができました(添付を参照)。 重要なのは、数式が正しく機能するために、テーブルを「userId」と「date」で並べ替える必要があるということです。
ベスト、
TS
次の式がシナリオAに役立つと思います。
まだ最適化されていませんが、このようなことがどのように行われるかを示している可能性があります。
数式でいくつかの単純なjslを段階的に使用します。

テーブル生成の完全なスクリプトを参照してください。
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
)
)