2017-09-17 12 views
5

के साथ कुल योग चलाना है, तो मैं छुट्टी के बारे में एक टेबल बनाना चाहता हूं और कुल संचयी कुल की आवश्यकता है।यदि अधिकतम और अधिकतम मूल्य DAX

image

वार्षिक छुट्टी Column2 DAX

Annual Leave Column2 = 
CALCULATE (
    SUM (Sheet1[Debit/Credit]), 
    ALL (Sheet1), 
    FILTER(Sheet1, SUM(Sheet1[Debit/Credit])>20), Sheet1[Date] <= EARLIER (Sheet1[Date]) 
) 

है और स्तंभ के लिए 3

column 3 = IF(Sheet1[Annual Leave Column2]>20, 20, Sheet1[Annual Leave Column2]) 

है लेकिन परिणाम जब यह पहले से ही 20 और वहाँ अगले में एक -1 है तारीख यह अभी भी 20 गिनती होगी और 20 में फंस जाएगी। और मुझे जो परिणाम चाहिए वह है:

image

मुझे लगता है, क्या हम पहले से ही 20 मान की गणना रोक सकते हैं? और यदि -1 से मिले तो गणना जारी रखें। या एक और तरीका यह कैसे करना है? ऐसा लगता है कि अगर मैं आईएफ का उपयोग कर रहा हूं तो यह सिर्फ 20 में विज़ुअलाइज़ेशन कर रहा है लेकिन डेटा को 20 में सेट नहीं किया गया है, यही कारण है कि यह 20 में फंस गया है क्योंकि सभी योग 20 से अधिक है।

+0

मुझे नहीं लगता कि आप [सर्कुलर निर्भरता] (https://www.sqlbi.com/articles/understanding-circular-dependencies/) मुद्दों के कारण PowerBI/DAX में ऐसा कर सकते हैं। – user5226582

+0

क्या हम किसी अन्य तरीके से उपयोग कर सकते हैं? संपादन क्वेरी में उन्नत संपादक की तरह, या पावर क्वेरी, या परिणाम प्राप्त करने के लिए कुछ भी? @ user5226582 –

+0

(अगर कोई गलत है तो कोई मुझे सही करता है) कुछ गंदा कामकाज हो सकता है, लेकिन उचित सामान्य समाधान नहीं है। पावरबी एक्सेल की तरह काम नहीं करता है - अगर वह जगह है जहां से आप डेटा आयात कर रहे हैं, तो आयात से पहले एक्सेल में इसे करना आसान हो सकता है। एक साइड सवाल के रूप में, यथार्थवादी अधिकतम संख्या "वार्षिक छुट्टी" कैप (प्रति तालिका) तक पहुंच जाएगी? – user5226582

उत्तर

1

आपकी सर्वश्रेष्ठ शर्त आपके स्रोत सिस्टम के लिए है वार्षिक कैप से अधिक वार्षिक क्रेडिट की अनुमति न दें, या आपको सीधे कैप्ड वार्षिक छुट्टी राशि प्रदान करने के लिए (पावर बीआई में इसकी गणना करने की कोशिश करने के बजाय) प्रदान करें।

भले ही स्रोत सिस्टम कैप्ड वार्षिक छुट्टी राशि को संग्रहीत न करे, फिर भी Power BI का उपयोग करने से SQL का उपयोग करके क्वेरी में इसकी गणना करना आसान हो सकता है। (मैं इसके लिए एक अलग सवाल की सिफारिश करता हूं।)

मैं यह क्यों कहूं?

एक्सेल में, एक चलती (या संचयी) कुल की पंक्ति पिछले पंक्ति से मूल्य के आधार पर पंक्ति-दर-पंक्ति की गणना की जाती है। यह चल रहे कुल को "ओवरराइड" करना आसान बनाता है और उस ओवरराइड को प्रत्येक आगामी पंक्ति पर लागू होता है। जैसे आप दौड़ने वाले कुल 20 पर कैप कर सकते हैं, और नीचे चलने वाला सेल कार्य करता है जैसे कि चल रहा कुल 20 है। टोपी के नीचे की कोशिकाओं को यह नहीं पता है कि चलने वाला कुल वास्तव में 20 नहीं है।

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

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

गंदा & अधूरा वर्कअराउंड

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

उदाहरण के लिए, 1-मई-17 पर, वास्तविक चलने वाला कुल 20.5 है, लेकिन आप 0.5 को फेंक देते हैं। इसका मतलब है कि सभी भविष्य की पंक्तियां 1-मई -17 को 20.5 के कुल 20 पर आधारित हैं, 20.5 नहीं।

आप निश्चित रूप से गणना की गई कॉलम बना सकते हैं जो पहली बार चलने वाले कुल को कैप्ड (1-मई-2017) की पहचान करता है। इसके बाद आप एक समायोजित रनिंग कुल की गणना करेंगे जो 1-मई -17 से पहले पहले गणना की गई कुल संख्या का उपयोग करता है, लेकिन 1-मई-17 के बाद पूर्व चलने वाले कुल को अनदेखा करता है और इसके बजाय 1-मई- से [डेबिट/क्रेडिट] कॉलम को दर्शाता है। 17 केवल प्लस 20 (20 जोड़ा जा रहा है क्योंकि हम जानते हैं चल रहा है कुल 20 में पर 1 मई -17 है और वह [डेबिट/क्रेडिट] स्तंभ का योग में दिखाई नहीं देंगे।)

Running Total Is Capped = IF([Annual Leave Column2] > 20, 1, 0) 

Running Count of Capped = 
CALCULATE (
    SUM (Sheet1[Running Total Is Capped]), 
    ALL (Sheet1), 
    FILTER (Sheet1, Sheet1[Date] <= EARLIER (Sheet1[Date])) 
) 

Adjusted Running Total = 
IF (
    [Running Count of Capped] = 0, 
    [Annual Leave Column2], 
    20 
     + CALCULATE (
      SUM (Sheet1[Debit/Credit]), 
      ALL (Sheet1), 
      FILTER (
       Sheet1, 
       Sheet1[Date] <= EARLIER (Sheet1[Date]) 
        && Sheet1[Running Count of Capped] > 1 
      ) 
     ) 
) 

यह समाधान तब तक नहीं पकड़ता है क्योंकि यह केवल पहली बार काम करता है जब टोपी मारा जाता है। प्रत्येक बार आप टोपी हिट करते हैं, तो आपको समायोजित रनिंग कुल समायोजित करने वाले गणना किए गए कॉलम के एक नए सेट के साथ चलने वाले कुल को समायोजित करने की आवश्यकता होगी। यदि आप टोपी 20 बार या 50 बार हिट कर सकते हैं, तो आपको गणना की गई कॉलम के उपरोक्त सेट को 20 या 50 बार दोहराया जाएगा।

आप सभी पंक्तियों में टोपी के लिए समायोजित नहीं कर सकते हैं, क्योंकि अगला समायोजन तब होता है जब अगला समायोजन होता है। आपके उदाहरण डेटा में, 5-अगस्त -17 पर सच्चा चलने वाला कुल 21 है, जिसका अर्थ है कि हम इसे 20 तक कम करना चाहते हैं। हालांकि, क्योंकि हम 3 बार पहले टोपी पर चले गए हैं, हमने पहले ही 3.5 दिनों का मुकाबला कर लिया है परिणामस्वरूप चलने वाले कुल से, और इसलिए समायोजित रनिंग कुल 17.5 है और इसलिए कैपिंग की आवश्यकता नहीं है।

गणना की गई कॉलम की भारी संख्या के अलावा, मॉडल भी डेटा की बढ़ती मात्रा को अच्छी तरह से बनाए रखेगा। EARLIER फ़ंक्शन पुनरावृत्त है, जिसका अर्थ है कि यह प्रत्येक पंक्ति के लिए एक बार इसकी गणना चलाता है। अधिक पंक्तियां, जितनी देर लगती है। & से अधिक EARLIER फ़ंक्शन का उपयोग करके इस त्वरित & गंदे कामकाज प्रदर्शन प्रदर्शनकर्ता होगा। डेटा पावर बीआई तक पहुंचने से पहले, मैं दृढ़ता से एक और समाधान खोजने की सलाह देता हूं।

सिडेनोट: यदि आप ईरिलर फ़ंक्शन का उपयोग करने जा रहे हैं, तो मैं प्रत्येक पंक्ति को अनुक्रमणित करने की अनुशंसा करता हूं ताकि उन्हें दिनांक फ़ील्ड पर इंडेक्स के रूप में निर्भर होने की बजाय एक अद्वितीय संख्या की गारंटी दी जा सके। किसी सूचकांक के रूप में दिनांक फ़ील्ड का उपयोग अप्रत्याशित परिणाम हो सकता है यदि आपके पास एक ही तारीख पर एकाधिक क्रेडिट/डेबिट हैं।

+0

गंदे कामकाज को जटिल बना सकता है एक और कारक यह है कि टोपी अधिक गतिशील है। जैसे कुछ लोगों के लिए टोपी 20 है, और दूसरों के लिए यह 24 है। या 2017 में टोपी 20 है, और 2020 में टोपी 18 में बदल जाती है। – Leonard

संबंधित मुद्दे