Excel untuk menghitung jumlah sesi bersamaan berdasarkan waktu mulai / berakhir

3

Saya memiliki sejumlah besar data yang saya coba selesaikan. Di Kolom A, saya punya nama pengguna, di Kolom BI ada tanggal / waktu mulai sesi, di Kolom CI ada tanggal / waktu akhir sesi.

Saya mencoba menghitung berapa sesi bersamaan yang sedang berlangsung pada satu waktu berdasarkan akun pengguna. Titik sulit yang saya temui adalah bahwa satu pengguna dapat melakukan beberapa sesi sekaligus.

Sebagai contoh:

User     Start Time               End Time            Desired Result (license count)

JW      03/24/2015 14:00:44      03/24/2015 14:09:57     -->    4
TT      03/24/2015 13:58:14      03/24/2015 14:21:08     -->    3
DQ      03/24/2015 13:53:10      03/24/2015 14:15:39     -->    3
BB      03/24/2015 13:50:55      03/24/2015 14:20:42     -->    2
BA      03/24/2015 13:43:02      03/24/2015 13:57:26     -->    2
JW      03/24/2015 13:40:30      03/24/2015 13:48:38     -->    1
BA      03/24/2015 13:18:26      03/24/2015 13:18:44     -->    1
BA      03/24/2015 13:15:18      03/24/2015 13:15:22     -->    1
CT      03/24/2015 11:56:55      03/24/2015 11:58:21     -->    1
CT      03/24/2015 11:53:23      03/24/2015 11:56:55     -->    1
CT      03/24/2015 11:51:50      03/24/2015 11:53:23     -->    1
CT      03/24/2015 11:48:11      03/24/2015 12:16:36     -->    1
CT      03/24/2015 11:36:54      03/24/2015 11:37:50     -->    1
CT      03/24/2015 11:33:52      03/24/2015 11:39:38     -->    1
CT      03/24/2015 11:31:25      03/24/2015 11:34:01     -->    1

Kolom keempat menunjukkan hasil yang ingin saya hitung dengan rumus. Data di atas dapat ditampilkan secara grafis sebagai:

grafik batang

Seperti yang Anda lihat di akhir contoh (dan bagian bawah grafik), CT pengguna memiliki beberapa sesi sekaligus. Koneksi tersebut hanya akan dihitung sebagai satu lisensi.

Beri tahu saya jika saya perlu mengklarifikasi ini.

pengguna439742
sumber
1
Mungkin Anda bisa memberikan hasil yang Anda harapkan untuk dataset kecil itu sehingga kami tahu apa yang kami tuju?
XOR LX
Jadi, Anda mencoba menghitung sesi bersamaan oleh pengguna yang berbeda? Waktu terus menerus. Bagaimana Anda ingin menghitung dan melaporkan? Apakah ini seperti garis waktu, di mana perubahan jumlah sesi bersamaan memicu entri untuk waktu mulai itu? Apakah data semuanya dalam urutan kronologis terbalik?
fixer1234
Ya kami mencoba menghitung sesi bersamaan oleh pengguna. Saya ingin menghitung berdasarkan nama pengguna dan kemudian melaporkan kembali ketika setiap sesi dimulai, berapa banyak pengguna konkuren yang berbeda memiliki sesi terbuka pada waktu yang sama. Data semuanya dalam urutan kronologis terbalik.
user439742
Tidak yakin bagaimana cara mendapatkan tangkapan layar dari hasil yang diharapkan ke dalam komentar di sini, jadi jangan ragu untuk memberi saran. :) Penghitungan lisensi yang diharapkan untuk contoh di atas adalah sebagai berikut: 4 3 3 2 2 1 1 1 1 1 1 1 1 1 1 Inisiasi sesi baru akan menjadi pemicu untuk menghitung ulang jumlah penggunaan lisensi.
user439742
@ user439742: FYI, Anda perlu alamat komentar seperti yang saya lakukan di sini atau tidak ada yang akan menyadari posting Anda. Komentar Anda membingungkan. Jika sesi bersamaan untuk pengguna yang sama dihitung sebagai 1, penghitungan oleh pengguna akan menghasilkan semua 1, kecuali jika Anda hanya berbicara tentang konsolidasi data dalam persiapan untuk analisis. Pengguna yang berbeda tidak memulai dan mengakhiri pada saat yang sama. Ketika sesi berakhir, apakah itu juga memicu suatu acara di mana jumlah berkurang?
fixer1234

Jawaban:

5

Dengan asumsi data Anda di kolom Auntuk C, mulai dari baris 2 maka Anda dapat menggunakan ini "array formula" diD2

=SUM(IF(FREQUENCY(IF(B$2:B$16<=B2,IF(C$2:C$16>=B2,MATCH(A$2:A$16,A$2:A$16,0))),ROW(A$2:A$16)-ROW(A$2)+1),1))

dikonfirmasi dengan CTRL+ SHIFT+ ENTERdan menyalin kolom

Penjelasan:

Ini adalah teknik umum yang digunakan untuk mendapatkan hitungan nilai yang berbeda dalam satu kolom (dalam hal ini pengguna) di mana beberapa kriteria dipenuhi di kolom lain (dalam hal ini bahwa waktu mulai / tanggal terbaru adalah antara waktu mulai / tanggal dan akhir waktu / tanggal di kolom lain).

"Array data" untuk FREQUENCYadalah hasil dari MATCHfungsi untuk baris di mana kriteria waktu dipenuhi - dan MATCHakan menemukan nilai yang cocok pertama , sehingga di mana Anda memiliki pengguna berulang MATCHmengembalikan angka yang sama untuk masing-masing (dan Anda mendapatkan FALSEuntuk baris di mana kondisi tidak bertemu)

The FREQUENCY"sampah" terdiri dari semua hasil yang mungkin untuk MATCH(1 sampai 15 dalam kasus ini), sehingga jika kondisi (yang saat band yang berisi waktu mulai terbaru) terpenuhi dan pengguna adalah sama, jumlah yang sama dikembalikan dalam array data dan berjalan dalam bin...... yang sama sehingga cukup untuk menghitung jumlah sampah yang> 0 untuk mendapatkan jumlah pengguna yang berbeda.

Khusus untuk baris 2, misalnya, array data menjadi ini:

{1;2;3;4;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}

dan 4 nilai berbeda dikembalikan ke 4 tempat sampah berbeda sehingga Anda mendapatkan hasil 4

.... tetapi untuk baris 10 array data menjadi ini:

{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;9;9;FALSE;9;FALSE;FALSE;FALSE}

di mana ada 3 baris yang cocok dengan kondisi waktu ..... tetapi semua untuk pengguna yang sama ( CT), sehingga MATCHfungsi mengembalikan 9 (posisi entri "CT" pertama di A2:A16) untuk ketiganya, sehingga kemudian FREQUENCYmendapatkan 3 nilai di tempat sampah yang sama, jadi rumusnya memutuskan untuk ini:

=SUM(IF({0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0},1))

The IFmengembalikan fungsi 1 untuk setiap nilai bukan nol dalam array dikembalikan oleh FREQUENCYdan SUMmerangkum mereka 1s ..... tapi hanya ada satu nilai non-nol sehingga hasilnya 1(mewakili jumlah pengguna yang berbeda dengan sesi terbuka pada waktu itu )

Lihat tangkapan layar terlampir

masukkan deskripsi gambar di sini

barry houdini
sumber
Anda mendapatkan hasil yang diminta dalam komentar OP, jadi ini jelas bekerja. Bisakah Anda sedikit memperluas jawaban untuk menjelaskan cara kerjanya? Itu akan membantu orang menerapkan ini untuk masalah lain. Terima kasih.
fixer1234
@ fixer1234 - tidak ada masalah, saya menambahkan penjelasan
barry houdini
Penjelasan yang bagus.
fixer1234
Terima kasih Barry - penjelasan yang bagus dan persis apa yang saya cari. Hanya butuh ~ 45 menit bagi Excel untuk memproses 20.000+ baris saya.
user439742
Apakah Anda merujuk ke semua 20.000 baris di semua formula? Tergantung pada data Anda, Anda mungkin dapat mempercepatnya dengan menggunakan rentang yang lebih kecil - jika data diurutkan berdasarkan waktu maka mungkin hanya akan ada paling banyak beberapa ratus baris yang dapat tumpang tindih dengan baris saat ini?
barry houdini
0

Inilah formula yang jauh lebih pendek dan sederhana yang menghasilkan hasil yang diinginkan

  • jumlah baris di bawah ini untuk yang mana
    • rentang waktu tumpang tindih, dan
    • pengguna berbeda
  • tambah satu.

Langkah pertama adalah untuk mengetahui bahwa interval Mulai 1 / Akhir 1 tumpang tindih interval Mulai 2 / Akhir 2 jika dan hanya jika Mulai 1  <Akhir 2 dan Akhir 1  > Mulai 2 . (Ini mudah dilihat apakah Anda memikirkannya; lebih mudah jika Anda menggambarnya.)

barry houdini menggunakan ≤ dan ≥ , jadi saya akan menggunakan konvensi yang sama. AFAICT, tidak ada contoh dalam dataset contoh di mana waktu mulai atau akhir dari satu sesi persis bertepatan dengan waktu mulai atau berakhirnya sesi milik pengguna yang berbeda, jadi perbedaan dalam pendekatan ini seharusnya tidak menghasilkan hasil yang berbeda (misalnya Himpunan data).

Jadi, untuk setiap baris, kami ingin menghitung baris di bawah ini dalam catatan awal / akhir yang benar di atas, dan ID Pengguna tidak sama dengan ID Pengguna untuk baris ini. Dan tambahkan 1. Itu sederhana

=COUNTIFS(B2:B$16, "<="&C2, C2:C$16, ">="&B2, A2:A$16, "<>"&A2) + 1

Perhatikan bahwa saya menetapkan rentang untuk beralih dari baris saat ini (direpresentasikan sebagai Baris 2, berisi sel A2, B2dan C2) ke nomor baris absolut 16 (diwakili sebagai Baris $ 16, berisi sel A16, B16dan C16). Ini menyebabkan hanya COUNTIFuntuk melihat baris saat ini dan yang berikut. Dan perhatikan bahwa ini bukan formula array.

Saya akan memposting tangkapan layar, tapi itu akan (secara efektif) identik dengan milik barry, dan karenanya membuang-buang bandwidth.

Scott
sumber
Pengungkapan: ini adalah adaptasi dari jawaban terakhir saya untuk Menggunakan Excel untuk menghitung jumlah sesi bersamaan berdasarkan waktu mulai / berakhir dan Nama PC .
Scott