안녕하세요, 아래와 같이 다양한 시나리오에 대한 질문이 있습니다. 도움을 주셔서 감사합니다!
시나리오 A :이 마지막 열을 추가하고 해당 사용자 ID에 대해 계산합니다. 먼저 웹에 먼저 예약 날짜. 예약 작업 전에 웹 작업이 없었 으면 비워 둡니다. 누군가 jsl이 아닌 함수를 사용하여 수식이 어떻게 생겼는지 도와 줄 수 있습니까?
| userID | 동작 | 데이트 | 첫 번째 웹 날짜부터 첫 번째 예약 날짜까지 |
| 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 : 위의 표를 바탕으로 각 userID, '의 일차'를 포함하는 아래와 같은 다른 표를 계산하고 싶습니다. 첫 번째 웹 액션 날짜 ''예약 전 ' ...에 각 예약 날짜 . 논리에 따라 위의 표를 입력으로 한 이상적인 결과는 다음과 같으며이 사용자 ID에 대한 3 개의 일차 차이가 있습니다. 시나리오 A와 마찬가지로, 웹이 예약 전에있을 때만 고려합니다.
| userID | 예 | 계산 |
| 2523 | 22 | 5/28 빼기 5/6 |
| 2523 | 33 | 6/8 빼기 5/6 |
| 2523 | 31 | 8/8 빼기 7/8 |
감사합니다!
안녕 Joann,
조금 놀아 본 후 원하는 출력을 생성하는 일련의 열 공식을 생성 할 수있었습니다 (첨부 참조). 중요한 것은 수식이 제대로 작동하려면 "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
)
)