서로 다른 시나리오의 동일한 열에 있는 날짜 차이안녕하세요. 아래와 같은 다양한 시나리오에 대한 질문이 있습니다. 어떤 도움이라도 정말 감사드립니다!
시나리오 A : 이 마지막 열을 추가하고 해당 userID를 계산하고 싶습니다. 첫 번째 웹으로 첫 번째 예약 날짜. 예약 작업 이전에 웹 작업이 없었다면 비워 두세요. jsl이 아닌 함수를 사용하면 수식이 어떻게 보이는지 도와줄 수 있는 사람이 있나요?
| 사용자ID | 행동 | 날짜 | 첫 번째 웹 날짜부터 첫 번째 예약 날짜까지 |
| 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와 마찬가지로 예약 전에 웹이 있는 경우만 고려합니다.
| 사용자ID | 사례 | 계산 |
| 2523 | 22 | 5/28 - 5/6 |
| 2523 | 33 | 6/8 빼기 5/6 |
| 2523 | 31 | 8/8 빼기 7/8 |
감사합니다!
품질 및 프로세스 엔지니어링Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이효과가있다! 게오르그에게 정말 감사드립니다! Matrix와 Loc의 링크를 통해 학습하겠습니다. 귀하의 도움에 진심으로 감사드립니다.Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이안녕 @joann , 죄송하지만 이는 완전한 서비스를 제공하는 플랫폼은 아니지만, 귀하를 지원할 수 있다면 기쁩니다. 따라서 배우고 싶다면 여기에 사용된 기능에 대한 온라인 설명서를 참조하십시오.
예를 들어 loc는 특정 값에 대한 벡터의 인덱스를 제공합니다.
Loc 기능(jmp.com)
두 시나리오 모두 아래 스크립트를 참조하세요. 시나리오 B는 꽤 비슷합니다 ...
설명한 대로 시나리오 B에 대한 정확한 테이블을 갖고 싶다면 수식을 삭제하고(값을 유지함) "수식 B" 열에서 누락된 값을 선택하여 삭제할 수 있습니다.
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: 다양한 시나리오의 동일한 열에 있는 날짜 차이고마워요 게오르그! 효과가있다. 이 스크립트의 논리를 설명해 주시겠습니까? 저는 여기서 Matrix와 Loc에 그다지 익숙하지 않습니다.
시나리오 2에 대한 솔루션이 있습니까?
감사합니다!Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이감사합니다 티에리! 결과는 좋은 것 같습니다! 거래 ID가 무엇을 하는지 설명해 주시겠어요? 논리/공식을 이해하지 못합니다.
시나리오 B에 대한 솔루션이 있습니까? 시나리오 B에서는 두 번째 예약이 중요합니다.
감사합니다!Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이시나리오 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
)
)Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이안녕하세요 조앤,
약간의 작업 끝에 원하는 출력을 생성하는 일련의 열 수식을 생성할 수 있었습니다(첨부 참조). 중요한 점은 수식이 제대로 작동하려면 테이블이 "userId" 및 "date"를 기준으로 정렬되어야 한다는 것입니다.
최상의,
TS
Re: 다양한 시나리오의 동일한 열에 있는 날짜 차이안녕하세요 조앤,
간단한 솔루션을 개발할 수 있는지 확인하기 위한 몇 가지 질문:
1) 첫 번째 시퀀스(1~4행)와 두 번째 시퀀스(4~6행)를 구별하는 열이 있습니까? 이것이 없으면 두 거래 세트를 구별하는 열 수식을 만드는 것이 좀 더 어렵습니다.
2) 제가 올바르게 이해했다면 두 번째 예약 날짜(4행)는 귀하의 질문과 관련이 없습니다.
최대한 빠른 시일 내에 알려주시기 바랍니다.
최상의,
TS