嗨,我對以下不同情況有疑問。 真的感謝任何幫助!
方案A :我想添加最後一列,為該用戶ID計算,與第一的上網到第一的預定日期。 如果他在預訂操作之前沒有進行任何網絡操作,則將其留空。 有人可以通過函數而不是jsl幫助我了解公式的外觀嗎?
| 用戶身份 | 行動 | 日期 | 第一個網絡日期至第一個預訂日期 |
| 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,“第一個網絡操作日期“在預訂之前”到每個預訂日期。 根據邏輯,將上表作為輸入的理想結果如下所示,此用戶ID的日差為3個實例。 與方案A中的情況相同,我們僅考慮網上預訂之前的時間。
| 用戶身份 | 實例 | 計算 |
| 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
)
)