Xác định thời gian (tính bằng phút) của mỗi phiên sử dụng:
- Một phiên sử dụng được xác định là từ lúc Login đến khi Logout.
- Thời gian nằm giữa khoảng Lock và Unlock cũng sẽ không được tính và thời gian sử dụng.
- Chèn thêm cột ID trước cột thời gian bắt đầu và kết thúc mỗi phiên (thể hiện số lần sử dụng từng người).
- Thời gian sử dụng = Logout - Login - Thời gian máy nghỉ (Lock).
Link: Onedrive
![]() |
| Tính thời gian máy sử dụng |
Công thức:
1. =LET(b,B2:B25,r,FILTER,SORT(DROP(REDUCE(0,UNIQUE(b),LAMBDA(a,v,VSTACK(a,DROP(GROUPBY(HSTACK(r(b,b=v),SCAN(0,r(C2:C25,b=v)=C2,SUM)),r(D2:D25,b=v),HSTACK(MIN,MAX,LAMBDA(a,1440*SUM(WRAPROWS(a,2)*{-1,1}))),,0),1)))),1),3))
2. =REDUCE(F1:J1,UNIQUE(B2:B25),LAMBDA(s,r,VSTACK(s,LET(a,FILTER(C2:D25,B2:B25=r),b,DROP(a,,1),IFNA(HSTACK(r,DROP(GROUPBY(SCAN(0,TAKE(a,,1)=C2,SUM),b,HSTACK(MIN,MAX,LAMBDA(s,1440*SUM(WRAPROWS(s,2)*{-1,1}))),,0),1)),r)))))
3.=LET(i,SORT(B2:D25),a,DROP(GROUPBY(HSTACK(SCAN(0,INDEX(i,,2)=C2,SUM),TAKE(i,,1)),DROP(i,,2),HSTACK(MIN,MAX,LAMBDA(a,1440*SUM(WRAPROWS(a,2)*{-1,1}))),,0,3),1,1),b,TAKE(a,,1),c,SEQUENCE(ROWS(a)),HSTACK(b,BYROW((b=TOROW(b))*(c>=TOROW(c)),SUM),DROP(a,,1)))
4. =LET(b,B2:B25,c,C2:C25,d,D2:D25,DROP(GROUPBY(IF({1,0},b,MAP(b,c,LAMBDA(x,y,COUNTIFS(B2:x,x,C2:y,C2)))),IF({1,1,0},d,(1-2*((c=C2)+(c=C6)))*d*1440),HSTACK(MIN,MAX,SUM),,0,3,,1),1))
5. =LET(I,INDEX,s,SORT(B2:D25),a,SWITCH(I(s,,2),"Login",-1,"Unlock",-1,1),b,SCAN(0,I(s,,2)="Login",SUM),n,b-XLOOKUP(I(s,,1),I(s,,1),b)+1,DROP(GROUPBY(HSTACK(I(s,,1),n),I(s,,3)*IF({1,1,0},1,a*1440),HSTACK(MIN,MAX,SUM),,0,3,,1),1))
6.=LET(i,B2:B25,j,C2:C25,k,D2:D25,h,HSTACK,SORT(DROP(GROUPBY(h(i,MAP(i,j,LAMBDA(x,y,COUNTIFS(B2:x,x,C2:y,"Login")))),h(k,k,IF(REGEXTEST(j,"(?:U|i)n"),-1,1)*k*1440),h(MIN,MAX,SUM),,0),1),3,))
7.Python (Xem file đính kèm)
