प्रारंभ / समाप्ति समय के आधार पर समवर्ती सत्रों की संख्या की गणना करने के लिए एक्सेल


3

मेरे पास डेटा का एक विशाल सेट है जिसके माध्यम से मैं काम करने की कोशिश कर रहा हूं। कॉलम A में, मेरा एक उपयोगकर्ता नाम है, कॉलम B में मेरे पास सत्र प्रारंभ तिथि / समय है, कॉलम C में मेरे पास सत्र समाप्ति तिथि / समय है।

मैं यह गणना करने की कोशिश कर रहा हूं कि उपयोगकर्ता खाते के आधार पर किसी भी समय कितने समवर्ती सत्र चल रहे हैं। मेरे द्वारा चलाए जा रहे कठिन स्थान यह है कि एक उपयोगकर्ता एक समय में कई सत्र चला सकता है।

उदाहरण के लिए:

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

चौथा स्तंभ उस परिणाम को दर्शाता है जिसे मैं गणना करने में सक्षम होना चाहता हूं एक सूत्र के साथ। उपरोक्त डेटा को रेखांकन के रूप में दिखाया जा सकता है:

bar chart

जैसा कि आप उदाहरण के अंत में देख सकते हैं (और चार्ट के नीचे), उपयोगकर्ता सीटी में एक समय में कई सत्र होते हैं। उन कनेक्शनों को केवल एक लाइसेंस के रूप में गिना जाएगा।

अगर मुझे यह स्पष्ट करने की आवश्यकता है तो मुझे बताएं।


1
शायद आप उस छोटे डेटासेट के लिए अपना अपेक्षित परिणाम दे सकें, ताकि हम जान सकें कि हम क्या लक्ष्य बना रहे हैं?
XOR LX

तो आप विभिन्न उपयोगकर्ताओं द्वारा समवर्ती सत्रों को गिनने की कोशिश कर रहे हैं? समय निरंतर है। आप कैसे गिनना और रिपोर्ट करना चाहते हैं? क्या यह एक समयरेखा की तरह होगा, जहां समवर्ती सत्रों की बदलती संख्या उस आरंभ समय के लिए एक प्रविष्टि ट्रिगर करती है? क्या डेटा सभी कालानुक्रमिक अनुक्रम में है?
fixer1234

हां हम उपयोगकर्ताओं द्वारा समवर्ती सत्रों को गिनने का प्रयास कर रहे हैं। मैं उपयोगकर्ता नाम से गणना करना चाहता हूं और फिर रिपोर्ट करना चाहता हूं कि जब प्रत्येक सत्र शुरू होता है, तो एक ही समय में कितने अन्य अलग-अलग सहमति वाले उपयोगकर्ताओं का सत्र खुला होता है। डेटा सभी कालानुक्रमिक अनुक्रम में है।
user439742

सुनिश्चित नहीं हैं कि टिप्पणियों में अपेक्षित परिणामों का एक स्क्रीन शॉट कैसे प्राप्त करें, इसलिए सलाह देने के लिए स्वतंत्र महसूस करें। :) उपरोक्त उदाहरण के लिए अपेक्षित लाइसेंस संख्या इस प्रकार होगी: 4 3 3 2 2 1 1 1 1 1 1 1 1 1 1 नया सत्र की शुरूआत लाइसेंस उपयोग गणना को पुन: गणना करने के लिए ट्रिगर होगी।
user439742

@ user439742: FYI, आपको टिप्पणियों को संबोधित करने की आवश्यकता है जैसे मैंने यहां किया था या किसी को भी आपकी पोस्टिंग के बारे में पता नहीं होगा। आपकी टिप्पणियां भ्रमित कर रही हैं। यदि समान उपयोगकर्ता के लिए समवर्ती सत्र 1 के रूप में गिना जाता है, तो उपयोगकर्ता द्वारा गणना सभी 1 का उत्पादन करेगी, जब तक कि आप केवल विश्लेषण के लिए तैयारी में डेटा को समेकित करने के बारे में बात कर रहे हों। अलग-अलग उपयोगकर्ता एक ही समय में शुरू और समाप्त नहीं होते हैं। जब एक सत्र समाप्त होता है, तो क्या यह भी एक घटना को ट्रिगर करता है जहां गिनती कम हो जाती है?
fixer1234

जवाबों:


5

मान लें कि आपका डेटा कॉलम में है A सेवा मेरे C, पंक्ति 2 पर शुरू करके आप इस "सरणी सूत्र" का उपयोग कर सकते हैं D2

=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))

के साथ पुष्टि की CTRL + खिसक जाना + दर्ज और कॉलम को कॉपी किया

स्पष्टीकरण:

यह एक सामान्य तकनीक है जिसका उपयोग एक कॉलम (इस मामले में उपयोगकर्ताओं) में अलग-अलग मानों की गिनती प्राप्त करने के लिए किया जाता है, जहां कुछ मापदंड अन्य कॉलमों में मिलते हैं (इस मामले में कि नवीनतम प्रारंभ समय / तिथि प्रारंभ समय / तिथि और अंत के बीच है) अन्य कॉलम में समय / तारीख)।

के लिए "डेटा ऐरे" FREQUENCY का परिणाम है MATCH उन पंक्तियों के लिए कार्य करें जहाँ समय मानदंड मिले हैं - और MATCH मिल जाएगा प्रथम मूल्य मिलान, तो जहाँ आप उपयोगकर्ताओं को दोहराना है MATCH प्रत्येक के लिए एक ही नंबर देता है (और आपको मिलता है FALSE उन पंक्तियों के लिए जहाँ स्थितियाँ पूरी नहीं होती हैं)

FREQUENCY "बिन" के लिए सभी संभावित परिणामों से मिलकर बनता है MATCH (इस मामले में 1 से 15), इसलिए यदि शर्तें (कि टाइम बैंड में नवीनतम प्रारंभ समय होता है) मिले हैं और उपयोगकर्ता एक ही है, एक जैसी संख्या डेटा ऐरे में वापस आ जाता है और उसी में चला जाता है bin...... इसलिए विभिन्न उपयोगकर्ताओं की संख्या प्राप्त करने के लिए & B; 0; की संख्या गिनना पर्याप्त है।

विशेष रूप से पंक्ति 2 के लिए, उदाहरण के लिए, डेटा सरणी यह ​​बन जाता है:

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

और 4 अलग-अलग मानों को 4 अलग-अलग डिब्बे में लौटाया जाता है ताकि आपको 4 का परिणाम मिल सके

.... लेकिन पंक्ति 10 के लिए डेटा सरणी यह ​​हो जाता है:

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

जहाँ 3 पंक्तियाँ हैं जो समय स्थितियों से मेल खाती हैं ..... लेकिन सभी एक ही उपयोगकर्ता के लिए ( CT ), ऐसा MATCH फ़ंक्शन रिटर्न 9 (पहले "सीटी" प्रविष्टि की स्थिति A2:A16 ) तीनों के लिए, तो FREQUENCY एक ही बिन में 3 मान मिलते हैं, इसलिए सूत्र इसका समाधान करता है:

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

IF फ़ंक्शन द्वारा दिए गए सरणी में प्रत्येक गैर-शून्य मान के लिए 1 देता है FREQUENCY तथा SUM उन 1s sums ..... लेकिन परिणाम केवल एक गैर-शून्य मूल्य है 1 (उस समय खुले सत्रों के साथ विभिन्न उपयोगकर्ताओं की संख्या का प्रतिनिधित्व करते हुए)

संलग्न स्क्रीनशॉट देखें

enter image description here


आपको ओपी की टिप्पणी में पूछे गए परिणाम मिलते हैं, इसलिए यह स्पष्ट रूप से काम करता है। क्या आप यह समझाने के लिए अपने उत्तर का विस्तार कर सकते हैं कि यह कैसे काम करता है? इससे लोगों को अन्य समस्याओं पर लागू करने में मदद मिलेगी। धन्यवाद।
fixer1234

@ fixer1234 - कोई बात नहीं, मैंने एक स्पष्टीकरण जोड़ा
barry houdini

अच्छी व्याख्या।
fixer1234

धन्यवाद बैरी - महान विवरण और वास्तव में मैं क्या देख रहा था। मेरी 20,000+ पंक्तियों को संसाधित करने के लिए केवल एक्सेल के लिए ~ 45 मिनट का समय लगा।
user439742

क्या आप सभी फ़ार्मुलों में सभी 20,000 पंक्तियों का उल्लेख कर रहे हैं? आपके डेटा के आधार पर आप छोटी श्रेणियों का उपयोग करके इसे गति देने में सक्षम हो सकते हैं - यदि डेटा को समय के अनुसार क्रमबद्ध किया जाता है, तो संभवत: केवल कुछ सौ पंक्तियों में होगा जो वर्तमान पंक्ति के साथ ओवरलैप हो सकता है?
barry houdini

0

यहां वांछित परिणाम उत्पन्न करने वाला बहुत छोटा, सरल सूत्र है, जो लगता है

  • इसके लिए नीचे दी गई पंक्तियों की संख्या
    • समय सीमा अतिव्याप्त होती है, और
    • उपयोगकर्ता अलग है
  • एक और।

पहला कदम यह पता लगाना है कि अंतराल प्रारंभ 1 /समाप्त 1 ओवरलैप्स अंतराल शुरू 2 /समाप्त 2 यदि और केवल यदि प्रारंभ करें 1 & LT; समाप्त 2 और अंत 1 & Gt; शुरु 2 । (यदि आप इसके बारे में सोचते हैं तो यह देखना आसान है; यदि आप इसे आकर्षित करते हैं तो आसान है।)

बैरी हुडिनी का इस्तेमाल किया used और used , इसलिए मैं एक ही सम्मेलन का उपयोग करूंगा। AFAICT, उदाहरण के डाटासेट में कोई उदाहरण नहीं हैं जहां एक सत्र की शुरुआत या अंत समय बिल्कुल मेल खाता है किसी भिन्न उपयोगकर्ता से संबंधित सत्र के प्रारंभ या समाप्ति समय के साथ, इसलिए दृष्टिकोण में यह अंतर अलग-अलग परिणाम नहीं होना चाहिए (उदाहरण के डाटासेट के लिए)।

इसलिए, प्रत्येक पंक्ति के लिए, हम इस एक के नीचे की पंक्तियों को गिनना चाहते हैं प्रारंभ / समाप्ति रिकॉर्ड जिसके लिए उपरोक्त सत्य है, और उपयोगकर्ता इस पंक्ति के लिए UserID के बराबर नहीं है। और जोड़ें 1. वह बस है

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

ध्यान दें कि मैंने अपनी सीमाओं को वर्तमान पंक्ति से जाने के लिए परिभाषित किया है (पंक्ति 2 के रूप में दर्शाया गया है, जिसमें कोशिकाएं हैं A2, B2 तथा C2 ) निरपेक्ष पंक्ति 16 को (रो $ 16 के रूप में प्रतिनिधित्व किया, जिसमें सेल होते हैं A16, B16 तथा C16 )। यह कारण बनता है COUNTIF में देखने के लिए केवल वर्तमान पंक्ति और निम्नलिखित वाले। और ध्यान दें कि यह है नहीं एक सरणी सूत्र।

मैं एक स्क्रीनशॉट पोस्ट करूंगा, लेकिन यह (प्रभावी रूप से) बैरी के समान होगा ( और इसलिए बैंडविड्थ की बर्बादी।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.