Power BI Data Modeling: Star Schema Design for Business Intelligence

Master Power BI data modeling with star schema design, fact and dimension tables, DAX measures, calculation groups, time intelligence, and composite models.

E
ECOSIRE Research and Development Team
|17 मार्च 202623 मिनट पढ़ें5.2k शब्द|

पावर बीआई डेटा मॉडलिंग: बिजनेस इंटेलिजेंस के लिए स्टार स्कीमा डिजाइन

डेटा मॉडल प्रत्येक Power BI रिपोर्ट का आधार है। एक अच्छी तरह से डिज़ाइन किया गया मॉडल DAX उपायों को सरल, क्वेरी प्रदर्शन को तेज़ और रिपोर्ट विकास को सहज बनाता है। एक खराब डिज़ाइन किया गया मॉडल सब कुछ कठिन बना देता है --- उपायों के लिए जटिल समाधान की आवश्यकता होती है, क्वेरीज़ धीरे-धीरे चलती हैं, और डेवलपर्स अंतर्दृष्टि बनाने की तुलना में मॉडल से लड़ने में अधिक समय व्यतीत करते हैं।

स्टार स्कीमा विश्लेषणात्मक डेटा मॉडल के लिए स्वर्ण मानक है, और यह दशकों से है। रिलेशनल डेटाबेस जो आपके ईआरपी और सीआरएम सिस्टम को शक्ति प्रदान करते हैं, उन्हें दर्जनों इंटरकनेक्टेड तालिकाओं के साथ सामान्यीकृत स्कीमा का उपयोग करके लेनदेन दक्षता के लिए डिज़ाइन किया गया है। यह डिज़ाइन व्यक्तिगत लेनदेन को रिकॉर्ड करने के लिए इष्टतम है लेकिन एकत्रीकरण, तुलना और प्रवृत्ति विश्लेषण के लिए भयानक है। स्टार स्कीमा विश्लेषणात्मक प्रदर्शन के लिए उसी डेटा को तथ्य तालिकाओं (क्या हुआ) और आयाम तालिकाओं (जो हुआ उसके आसपास का संदर्भ) में अलग करके पुनर्गठित करती है।

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

मुख्य बातें

  • स्टार स्कीमा डेटा को तथ्य तालिकाओं (संख्यात्मक माप, विदेशी कुंजी) और आयाम तालिकाओं (वर्णनात्मक विशेषताएँ) में अलग करती है --- यह संरचना पावर बीआई के वर्टिपैक इंजन के लिए अनुकूलित है
  • पावर बीआई मॉडल में प्रत्येक संबंध केवल एक दिशा में क्रॉस-फ़िल्टरिंग के साथ, आयाम से तथ्य (एक-से-अनेक) की ओर प्रवाहित होना चाहिए
  • DAX माप स्टार स्कीमा पर नाटकीय रूप से बेहतर प्रदर्शन करते हैं क्योंकि VertiPaq आयाम कॉलम को कुशलता से संपीड़ित कर सकता है और रिश्तों के माध्यम से तथ्यों को फ़िल्टर कर सकता है
  • गणना समूह दर्जनों निरर्थक मापों (YTD, QTD, MTD, पूर्व वर्ष) को सभी आधार मापों पर लागू एक ही पैटर्न से प्रतिस्थापित करते हैं
  • समय बुद्धि के लिए एक समर्पित दिनांक आयाम तालिका की आवश्यकता होती है --- कभी भी ऑटो दिनांक/समय का उपयोग न करें या तथ्य तालिकाओं में दिनांक कॉलम पर भरोसा न करें
  • कंपोजिट मॉडल आपको आयातित डेटा को डायरेक्टक्वेरी कनेक्शन के साथ संयोजित करने देते हैं, जिससे आपको लाइव क्वेरीज़ की ताजगी के साथ इन-मेमोरी का प्रदर्शन मिलता है।
  • रोल-प्लेइंग आयाम (कई संबंध भूमिकाओं में उपयोग की जाने वाली एक तालिका) के लिए DAX के USERELATIONSHIP फ़ंक्शन की आवश्यकता होती है

स्टार स्कीमा बुनियादी बातें

पावर बीआई के लिए स्टार स्कीमा क्यों

Power BI का इन-मेमोरी इंजन, VertiPaq, डेटा संग्रहीत करने के लिए स्तंभ संपीड़न का उपयोग करता है। यह प्रत्येक कॉलम को स्वतंत्र रूप से संपीड़ित करता है, और कम कार्डिनैलिटी (कुछ अद्वितीय मान) वाले कॉलम नाटकीय रूप से संपीड़ित होते हैं - 10 मिलियन पंक्तियों में 40 अद्वितीय मानों वाला एक "देश" कॉलम लगभग कुछ भी संपीड़ित नहीं होता है। लेन-देन आईडी या टाइमस्टैम्प जैसे उच्च कार्डिनैलिटी (कई अद्वितीय मान) वाले कॉलम खराब रूप से संपीड़ित होते हैं।

स्टार स्कीमा उच्च-कार्डिनैलिटी लेनदेन संबंधी डेटा (तिथियां, मात्राएं) को संकीर्ण तथ्य तालिकाओं में अलग करके और कम-कार्डिनैलिटी वर्णनात्मक डेटा (नाम, श्रेणियां, क्षेत्र) को अलग-अलग आयाम तालिकाओं में रखकर इसका फायदा उठाती है। परिणाम एक डेटा मॉडल है जो मेमोरी में छोटा और क्वेरी करने में तेज़ है।

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

स्टार स्कीमा समतुल्य इसे इसमें अलग करता है:

FactSales (संकीर्ण, प्रति ऑर्डर पंक्ति एक पंक्ति): ऑर्डरडेटकी, ग्राहककी, उत्पादकुंजी, मात्रा, इकाई मूल्य, छूट, कुल राशि।

मंद ग्राहक: ग्राहक कुंजी, ग्राहक नाम, ईमेल, शहर, देश, खंड।

डिमप्रोडक्ट: उत्पादकुंजी, उत्पादनाम, श्रेणी, उपश्रेणी, ब्रांड।

डिमडेट: डेटकी, तिथि, वर्ष, तिमाही, महीना, महीने का नाम, सप्ताह का दिन।

तथ्य तालिका में 50 के बजाय केवल 7 कॉलम हैं। प्रत्येक आयाम तालिका प्रत्येक अद्वितीय मान को ठीक एक बार संग्रहीत करती है। VertiPaq इस संरचना को फ़्लैट टेबल की तुलना में 3-5x बेहतर संपीड़ित करता है, और क्वेरीज़ 2-10x तेज़ी से चलती हैं क्योंकि इंजन छोटे आयाम तालिकाओं को फ़िल्टर करता है और फिर तथ्य तालिका में केवल मेल खाने वाली पंक्तियों को हल करता है।

तथ्य तालिकाएँ: डिज़ाइन सिद्धांत

तथ्य तालिकाएँ व्यावसायिक घटनाओं को रिकॉर्ड करती हैं --- बिक्री, ऑर्डर, शिपमेंट, समर्थन टिकट, वेब विज़िट, विनिर्माण रन। प्रत्येक पंक्ति एक घटना या किसी घटना की एक पंक्ति वस्तु का प्रतिनिधित्व करती है।

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

केवल विदेशी कुंजियाँ। तथ्य तालिका में आयाम तालिकाओं की विदेशी कुंजियाँ हैं, वर्णनात्मक विशेषताएँ नहीं। तथ्य तालिका में "ग्राहक नाम" या "उत्पाद श्रेणी" नहीं होनी चाहिए --- जो आयाम तालिका में हैं। तथ्य तालिका में CustomerKey और ProductKey हैं, जो उन आयामों से लिंक होते हैं जहां वर्णनात्मक विवरण रहते हैं।

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

तथ्यों में परिकलित कॉलम से बचें। तथ्य तालिका में परिकलित कॉलम जोड़ने से तालिका की मेमोरी फ़ुटप्रिंट बढ़ जाती है और रीफ्रेश के दौरान प्रसंस्करण समय बढ़ जाता है। इसके बजाय DAX मापों में व्युत्पन्न मानों की गणना करें, जो क्वेरी समय पर गणना करते हैं और भंडारण का उपभोग नहीं करते हैं।

आयाम तालिकाएँ: डिज़ाइन सिद्धांत

आयाम तालिकाएँ व्यावसायिक घटनाओं के "कौन, क्या, कहाँ, कब, क्यों" का वर्णन करती हैं। उनमें वे विशेषताएँ शामिल हैं जिन्हें उपयोगकर्ता फ़िल्टर, समूह और स्लाइस करते हैं।

सरोगेट कुंजियाँ। आयाम तालिकाओं में प्राथमिक कुंजी के रूप में पूर्णांक सरोगेट कुंजियाँ (ग्राहक कुंजी, उत्पाद कुंजी) का उपयोग करें, न कि प्राकृतिक कुंजी (ग्राहक ईमेल, उत्पाद SKU) का। सरोगेट कुंजियाँ छोटी होती हैं, बेहतर संपीड़ित होती हैं, और स्रोत सिस्टम कुंजियों में परिवर्तन से मॉडल को बचाती हैं।

आयामों को असामान्य करें। एक स्टार स्कीमा में, आयाम तालिकाओं को जानबूझकर असामान्य किया जाता है। डिमप्रोडक्ट तालिका में श्रेणी, उपश्रेणी और ब्रांड को एक ही तालिका में कॉलम के रूप में शामिल किया जाता है, न कि अपनी कुंजियों के साथ अलग-अलग सामान्यीकृत तालिकाओं के रूप में। यह ट्रांसेक्शनल डेटाबेस डिज़ाइन के विपरीत है, और यह जानबूझकर है। असामान्यीकृत आयाम तेज़ क्वेरी और सरल DAX उत्पन्न करते हैं क्योंकि VertiPaq इंजन एकाधिक तालिकाओं को जोड़ने के बजाय एक ही तालिका को स्कैन करता है।

वर्णनात्मक पदानुक्रम शामिल करें। यदि उपयोगकर्ता श्रेणी से उपश्रेणी से उत्पाद तक ड्रिल डाउन करेंगे, तो सभी तीन स्तर डिमप्रोडक्ट में कॉलम होने चाहिए। Power BI मॉडल में एक पदानुक्रम ऑब्जेक्ट बनाएं जो इस ड्रिल पथ को परिभाषित करता है।

धीरे-धीरे बदलते आयाम। जब समय के साथ आयाम विशेषताएँ बदलती हैं (एक ग्राहक शहर बदलता है, एक उत्पाद श्रेणियाँ बदलता है), तो आपको एक रणनीति की आवश्यकता होती है। टाइप 1 (ओवरराइट) सबसे सरल है --- आयाम पंक्ति को नए मान के साथ अपडेट करें। टाइप 2 (नई पंक्ति जोड़ें) इतिहास को संरक्षित करता है --- प्रभावी दिनांक सीमा के साथ एक नई पंक्ति जोड़ें, ताकि ऐतिहासिक लेनदेन उन विशेषता मानों से जुड़े हों जो उस समय मौजूद थे। टाइप 2 अधिक जटिल है लेकिन जब ऐतिहासिक सटीकता मायने रखती है (वित्तीय ऑडिट, नियामक रिपोर्टिंग) तो यह आवश्यक है।


रिश्तों को कॉन्फ़िगर करना

पावर बीआई के लिए संबंध नियम

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

केवल एक-से-अनेक। स्टार स्कीमा में प्रत्येक संबंध एक आयाम तालिका (एक तरफ) को एक तथ्य तालिका (कई तरफ) से जोड़ता है। आयाम तालिका में कुंजी कॉलम में अद्वितीय मान हैं। तथ्य तालिका में दोहराए गए मान हैं। पावर बीआई इसकी पुष्टि करता है और उल्लंघनों को चिह्नित करता है। यदि Power BI अनेक-से-अनेक संबंध का पता लगाता है, तो आपके पास ठीक करने के लिए एक मॉडलिंग समस्या है।

एकल दिशा क्रॉस-फ़िल्टरिंग। सभी रिश्तों पर क्रॉस-फ़िल्टर दिशा को "एकल" पर सेट करें। इसका मतलब है कि फ़िल्टर आयाम से तथ्य की ओर प्रवाहित होते हैं (जब आप स्लाइसर में किसी ग्राहक का चयन करते हैं, तो केवल उस ग्राहक की पंक्तियाँ तथ्य तालिका दृश्यों में दिखाई देती हैं) लेकिन तथ्य से वापस आयाम की ओर नहीं। द्विदिश फ़िल्टरिंग कई तथ्य तालिकाओं वाले मॉडल में अस्पष्ट फ़िल्टर पथ बनाता है और बहुत विशिष्ट परिदृश्यों को छोड़कर इससे बचा जाना चाहिए।

सक्रिय बनाम निष्क्रिय संबंध। पावर बीआई किन्हीं दो तालिकाओं के बीच केवल एक सक्रिय संबंध की अनुमति देता है। यदि किसी तथ्य तालिका में एकाधिक दिनांक कॉलम (ऑर्डरडेट, शिपडेट, डिलीवरीडेट) हैं, तो एक सक्रिय संबंध बनाएं (आमतौर पर ऑर्डरडेट से डिमडेट तक) और अन्य के लिए निष्क्रिय संबंध बनाएं। जरूरत पड़ने पर निष्क्रिय संबंध को सक्रिय करने के लिए DAX उपायों में USERELATIONSHIP फ़ंक्शन का उपयोग करें:

Shipped Revenue =
CALCULATE(
    [Total Revenue],
    USERELATIONSHIP(FactSales[ShipDateKey], DimDate[DateKey])
)

भूमिका निभाने वाले आयाम

रोल-प्लेइंग आयाम एक एकल आयाम तालिका है जो मॉडल में कई भूमिकाएँ निभाती है। दिनांक आयाम सबसे आम उदाहरण है --- यह तथ्य तालिका में ऑर्डरडेट, शिपडेट और डिलीवरीडेट से जुड़ता है, प्रत्येक संबंध में एक अलग "भूमिका" निभाता है।

Power BI में, आप भूमिका-निर्वाह आयामों को दो तरीकों से संभाल सकते हैं:

निष्क्रिय संबंध + USERELATIONSHIP (अनुशंसित)। एक सक्रिय संबंध (ऑर्डरडेट तक) और अन्य दिनांक कॉलम के साथ निष्क्रिय संबंधों के साथ एक डिमडेट तालिका रखें। वैकल्पिक दिनांक परिप्रेक्ष्य के लिए USERELATIONSHIP का उपयोग करने वाले उपाय बनाएं। यह मॉडल को कॉम्पैक्ट रखता है और डेटा दोहराव से बचाता है।

डुप्लिकेट आयाम तालिकाएँ। DimDate (DimOrderDate, DimShipDate, DimDeliveryDate) की अलग-अलग प्रतियां बनाएं, जिनमें से प्रत्येक का अपने संबंधित तथ्य कॉलम से सक्रिय संबंध हो। यह दृष्टिकोण DAX परिप्रेक्ष्य से सरल है (कोई USERELATIONSHIP आवश्यक नहीं है) लेकिन मॉडल आकार और रखरखाव बोझ बढ़ाता है।

अधिकांश कार्यान्वयन के लिए, निष्क्रिय संबंध दृष्टिकोण को प्राथमिकता दी जाती है। यह थोड़ा अधिक वर्बोज़ DAX की कीमत पर एक क्लीनर मॉडल और छोटी मेमोरी फ़ुटप्रिंट तैयार करता है।

अनेक-से-अनेक संबंध

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

एक ब्रिज तालिका अनेक-से-अनेक संबंध में दो तालिकाओं के बीच बैठती है और इसमें प्रत्येक संयोजन के लिए एक पंक्ति होती है:

ब्रिजकस्टमरसेगमेंट: कस्टमरकी, सेगमेंटकी

DimCustomer ब्रिजकस्टमरसेगमेंट (CustomerKey पर एक-से-अनेक) से जुड़ता है। डिमसेगमेंट ब्रिजकस्टमरसेगमेंट (सेगमेंटकी पर एक-से-अनेक) से जुड़ता है। ब्रिज टेबल कई सेगमेंट में ग्राहकों को सही ढंग से संभालने के दौरान सेगमेंट द्वारा FactSales को फ़िल्टर करने में सक्षम बनाता है।

ब्रिज तालिकाओं से सावधान रहें --- यदि कई-से-कई आवंटन को संभालने वाले उचित DAX उपायों के साथ जोड़ा नहीं गया तो वे दोहरी गिनती उत्पन्न कर सकते हैं। यह सत्यापित करने के लिए कि कुल योग सही हैं, ज्ञात डेटा के साथ अच्छी तरह से परीक्षण करें।


DAX उपाय: पैटर्न और प्रदर्शन

आधार उपाय

प्रत्येक विश्लेषणात्मक मॉडल को आधार उपायों के एक सेट की आवश्यकता होती है जो तथ्य तालिका कॉलम पर सरल एकत्रीकरण करते हैं। पहले इन्हें परिभाषित करें --- ये अधिक जटिल गणनाओं के लिए बिल्डिंग ब्लॉक्स के रूप में काम करते हैं।

Total Revenue = SUM(FactSales[TotalAmount])
Total Quantity = SUM(FactSales[Quantity])
Total Cost = SUM(FactSales[CostAmount])
Order Count = COUNTROWS(FactSales)
Average Order Value = DIVIDE([Total Revenue], [Order Count])
Gross Margin = DIVIDE([Total Revenue] - [Total Cost], [Total Revenue])

ध्यान दें कि औसत ऑर्डर मूल्य और सकल मार्जिन एकत्रीकरण तर्क को दोहराने के बजाय अन्य उपायों का संदर्भ देते हैं। यह जानबूझकर किया गया है --- यदि कुल राजस्व की परिभाषा बदलती है (उदाहरण के लिए, रिटर्न को बाहर करने के लिए), तो डाउनस्ट्रीम उपाय स्वचालित रूप से परिवर्तन को प्रतिबिंबित करते हैं।

गणना करें: DAX का मूल

CALCULATE सबसे महत्वपूर्ण DAX फ़ंक्शन है। यह संशोधित फ़िल्टर संदर्भ में एक अभिव्यक्ति का मूल्यांकन करता है। CALCULATE को समझना DAX को समझना है।

Revenue Last Year =
CALCULATE(
    [Total Revenue],
    SAMEPERIODLASTYEAR(DimDate[Date])
)

यह माप कुल राजस्व माप लेता है और फ़िल्टर संदर्भ में इसका मूल्यांकन करता है जहां दिनांक सीमा को एक वर्ष पीछे स्थानांतरित कर दिया जाता है। यदि वर्तमान फ़िल्टर संदर्भ "जनवरी 2026" है, तो CALCULATE इसे "जनवरी 2025" में संशोधित करता है और उस संशोधित संदर्भ में कुल राजस्व का मूल्यांकन करता है।

CALCULATE कई फ़िल्टर तर्क स्वीकार करता है, और वे अपने प्रकार के आधार पर अलग-अलग तरीके से इंटरैक्ट करते हैं:

टेबल फ़िल्टर (जैसे SAMEPERIODLASTYEAR) उस तालिका के कॉलम पर मौजूदा फ़िल्टर को प्रतिस्थापित करते हैं। यदि दृश्य में पहले से ही एक महीने का फ़िल्टर है, तो SAMEPERIODLASTYEAR इसे पिछले वर्ष के संबंधित महीने के साथ ओवरराइड कर देता है।

बूलियन फ़िल्टर (जैसे DimProduct[Category] = "Electronics") मौजूदा संदर्भ में जोड़ते हैं। यदि दृश्य को 2026 पर फ़िल्टर किया जाता है, तो CALCULATE परिणाम 2026 इलेक्ट्रॉनिक्स राजस्व दिखाता है।

रिमूवफ़िल्टर मौजूदा फ़िल्टर साफ़ करता है। CALCULATE([Total Revenue], REMOVEFILTERS(DimProduct[Category])) सभी श्रेणियों में कुल राजस्व लौटाता है, चाहे कोई भी श्रेणी फ़िल्टर सक्रिय हो।

पठनीयता और प्रदर्शन के लिए चर

वेरिएबल्स (VAR) एक मान की एक बार गणना करते हैं और इसे कई बार संदर्भित करते हैं। वे जटिल मापों को पठनीय बनाते हैं और अनावश्यक गणनाओं को समाप्त करते हैं:

Revenue YoY Growth =
VAR CurrentRevenue = [Total Revenue]
VAR PriorRevenue = [Revenue Last Year]
VAR Growth = CurrentRevenue - PriorRevenue
VAR GrowthPct = DIVIDE(Growth, PriorRevenue)
RETURN
    GrowthPct

चर के बिना, यह माप कई बार (एक बार घटाव के लिए, एक बार विभाजन के लिए) [कुल राजस्व] और [पिछले वर्ष के राजस्व] की गणना करेगा, जिससे गणना लागत दोगुनी हो जाएगी। चर यह सुनिश्चित करते हैं कि प्रत्येक की गणना बिल्कुल एक बार की जाए।

इटरेटर फ़ंक्शंस: उनका उपयोग कब करें

इटरेटर फ़ंक्शंस (SUMX, AVERAGEX, MAXX, MINX, COUNTX, RANKX) एक तालिका में पंक्ति दर पंक्ति अभिव्यक्ति का मूल्यांकन करते हैं। वे शक्तिशाली हैं लेकिन महंगे हैं --- वे निर्दिष्ट तालिका में प्रत्येक पंक्ति को स्कैन करते हैं।

जब आपको एकत्रीकरण से पहले पंक्ति-स्तरीय गणना की आवश्यकता हो तो पुनरावर्तकों का उपयोग करें:

Weighted Average Price =
DIVIDE(
    SUMX(FactSales, FactSales[Quantity] * FactSales[UnitPrice]),
    SUM(FactSales[Quantity])
)

इसे साधारण SUM से प्राप्त नहीं किया जा सकता क्योंकि आपको योग से पहले प्रत्येक पंक्ति पर मात्रा को UnitPrice से गुणा करना होगा। पुनरावर्तक SUMX इस पंक्ति-दर-पंक्ति गुणन को संभालता है।

जब एक साधारण समुच्चय पर्याप्त हो तो पुनरावृत्तियों से बचें। SUMX(FactSales, FactSales[TotalAmount]) कार्यात्मक रूप से SUM(FactSales[TotalAmount]) के समतुल्य है लेकिन धीमा है क्योंकि पुनरावर्तक पंक्ति दर पंक्ति स्कैन करता है जबकि SUM स्तंभ संपीड़न का लाभ उठाता है।


गणना समूह

क्या गणना समूह हल करते हैं

गणना समूहों से पहले, 10 आधार उपायों (राजस्व, मात्रा, लागत, मार्जिन, आदि) और 5 समय खुफिया विविधताओं (YTD, QTD, MTD, पूर्व वर्ष, पूर्व वर्ष YTD) के साथ एक डेटा मॉडल को 50 अलग-अलग उपायों की आवश्यकता होती है। एक नया आधार माप जोड़ने का मतलब 5 और समय खुफिया संस्करण बनाना है। एक नए समय खुफिया पैटर्न को जोड़ने का मतलब 10 और उपाय बनाना था। इस दहनशील विस्फोट ने मॉडलों को बनाए रखना कठिन बना दिया।

गणना समूह समय बुद्धि पैटर्न को एक बार परिभाषित करके और उन्हें गतिशील रूप से किसी भी माप पर लागू करके इसे हल करते हैं।

एक समय आसूचना गणना समूह का निर्माण

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

प्रत्येक बार इंटेलिजेंस पैटर्न के लिए गणना आइटम परिभाषित करें:

वर्तमान: कोई संशोधन नहीं --- माप को यथावत लौटाता है।

SELECTEDMEASURE()

YTD (वर्ष से दिनांक):

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD(DimDate[Date])
)

पूर्व वर्ष:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date])
)

पूर्व वर्ष YTD:

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD(SAMEPERIODLASTYEAR(DimDate[Date]))
)

वर्ष-दर-वर्ष परिवर्तन:

VAR CurrentValue = SELECTEDMEASURE()
VAR PriorValue = CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))
RETURN CurrentValue - PriorValue

वर्ष-दर-वर्ष % परिवर्तन:

VAR CurrentValue = SELECTEDMEASURE()
VAR PriorValue = CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))
RETURN DIVIDE(CurrentValue - PriorValue, PriorValue)

एक बार परिभाषित होने के बाद, उपयोगकर्ता गणना समूह को विज़ुअल के कॉलम या पंक्ति अक्ष में रखते हैं, और Power BI प्रत्येक गणना आइटम को मानों में जो भी माप है, उस पर लागू करता है। 6 वस्तुओं वाला एक गणना समूह 60 व्यक्तिगत मापों (10 आधार मापों के लिए) को प्रतिस्थापित करता है।

स्ट्रिंग अभिव्यक्तियाँ प्रारूपित करें

प्रत्येक गणना आइटम में एक प्रारूप स्ट्रिंग अभिव्यक्ति हो सकती है जो गणना के आधार पर संख्या प्रारूप को गतिशील रूप से बदलती है:

पूर्ण माप के लिए (वर्तमान, YTD, पूर्व वर्ष): आधार माप के प्रारूप का उपयोग करें। प्रतिशत माप के लिए (YoY % परिवर्तन): प्रतिशत के रूप में प्रारूपित करें।

// Format string for YoY % Change
"0.0%;-0.0%;0.0%"

यह सुनिश्चित करता है कि जब कोई उपयोगकर्ता "वर्तमान" ($1,234,567 दिखा रहा है) और "YoY % परिवर्तन" (12.5% ​​दिखा रहा है) के बीच स्विच करता है, तो मैन्युअल हस्तक्षेप के बिना फ़ॉर्मेटिंग सही है।


समय की बुद्धि

दिनांक आयाम तालिका

पावर बीआई में समय की जानकारी के लिए एक समर्पित दिनांक आयाम तालिका की आवश्यकता होती है। ऑटो दिनांक/समय सुविधा पर भरोसा न करें (इसे फ़ाइल → विकल्प → डेटा लोड में अक्षम करें) --- यह प्रत्येक दिनांक कॉलम के लिए छिपी हुई दिनांक तालिकाएँ बनाता है, आपके मॉडल को फूलाता है और आपके नियंत्रण को सीमित करता है।

एक दिनांक आयाम तालिका बनाएं जो आपके डेटा की पूरी श्रृंखला और प्रत्येक पक्ष पर कम से कम एक वर्ष को कवर करे। यदि आपका प्रारंभिक लेनदेन जनवरी 2020 है, तो दिनांक तालिका जनवरी 2019 से शुरू करें। यदि आपके विश्लेषण में 2027 पूर्वानुमान शामिल होंगे, तो दिसंबर 2027 पर समाप्त होगा।

दिनांक आयाम तालिका के लिए आवश्यक कॉलम:

कॉलमउदाहरणउद्देश्य
डेटकी20260317रिश्तों के लिए पूर्णांक कुंजी
दिनांक2026-03-17पूर्ण तिथि (डेटा प्रकार: तिथि)
वर्ष2026कैलेंडर वर्ष
तिमाहीQ1क्वार्टर लेबल
तिमाही संख्या1तिमाही संख्या (छँटाई के लिए)
महीनामार्चमाह का नाम
महीनासंख्या3माह संख्या (छँटाई के लिए)
सप्ताह संख्या12आईएसओ सप्ताह संख्या
सप्ताह का दिनमंगलवारदिन का नाम
सप्ताह का दिनसंख्या3दिन संख्या (छँटाई के लिए)
सप्ताहांत हैमिथ्यासप्ताहांत ध्वज
छुट्टी हैमिथ्याअवकाश ध्वज (देश-विशेष)
वित्तीय वर्षFY2026यदि वित्तीय वर्ष कैलेंडर से भिन्न हो
वित्तीय तिमाहीFQ4राजकोषीय तिमाही

पावर क्वेरी में या DAX परिकलित तालिका के रूप में दिनांक तालिका बनाएं:

DimDate =
VAR StartDate = DATE(2019, 1, 1)
VAR EndDate = DATE(2027, 12, 31)
RETURN
ADDCOLUMNS(
    CALENDAR(StartDate, EndDate),
    "DateKey", YEAR([Date]) * 10000 + MONTH([Date]) * 100 + DAY([Date]),
    "Year", YEAR([Date]),
    "Quarter", "Q" & QUARTER([Date]),
    "MonthNumber", MONTH([Date]),
    "Month", FORMAT([Date], "MMMM"),
    "DayOfWeek", FORMAT([Date], "dddd"),
    "IsWeekend", WEEKDAY([Date], 2) >= 6
)

पावर बीआई में तालिका को दिनांक तालिका के रूप में चिह्नित करें (तालिका उपकरण → दिनांक तालिका के रूप में चिह्नित करें → दिनांक कॉलम का चयन करें)। यह अंतर्निहित समय खुफिया कार्यों को सक्षम बनाता है।

सामान्य समय इंटेलिजेंस पैटर्न

उचित दिनांक आयाम के साथ, पावर बीआई के समय खुफिया कार्य सबसे सामान्य अस्थायी गणनाओं को संभालते हैं:

वर्ष-दर-तिथि: DATESYTD(DimDate[Date]) तिमाही-से-तिथि: DATESQTD(DimDate[Date]) माह-दर-तारीख: DATESMTD(DimDate[Date]) पिछले वर्ष की समान अवधि: SAMEPERIODLASTYEAR(DimDate[Date]) रोलिंग 12 महीने: DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH) समानांतर अवधि: PARALLELPERIOD(DimDate[Date], -1, QUARTER) (समान आकार की विंडो पीछे की ओर स्थानांतरित)

CALCULATE के अंदर उपयोग किए जाने पर ये फ़ंक्शन दिनांक फ़िल्टर संदर्भ को संशोधित करते हैं। वे केवल तभी सही ढंग से काम करते हैं जब दिनांक कॉलम एक सन्निहित, पूर्ण तिथि सीमा के साथ दिनांक तालिका के रूप में चिह्नित तालिका से आता है।

वित्तीय कैलेंडर समर्थन

यदि आपके संगठन का वित्तीय वर्ष कैलेंडर वर्ष के साथ संरेखित नहीं होता है, तो वित्तीय कैलेंडर का उपयोग करने के लिए समय खुफिया गणना को संशोधित करें:

Fiscal YTD Revenue =
CALCULATE(
    [Total Revenue],
    DATESYTD(DimDate[Date], "6/30")  -- Fiscal year ends June 30
)

DATESYTD का दूसरा तर्क वित्तीय वर्ष की समाप्ति तिथि निर्दिष्ट करता है। सभी YTD गणनाएँ 31 दिसंबर के बजाय वित्तीय वर्ष सीमा का उपयोग करती हैं।


समग्र मॉडल

समग्र मॉडल का उपयोग कब करें

समग्र मॉडल एक ही मॉडल में आयातित डेटा (VertiPaq में संग्रहीत) को DirectQuery डेटा (स्रोत से लाइव पूछताछ) के साथ जोड़ते हैं। यह हाइब्रिड दृष्टिकोण तब मूल्यवान है जब आपको ऐतिहासिक विश्लेषण के लिए आयातित डेटा के प्रदर्शन और परिचालन मेट्रिक्स के लिए लाइव डेटा की ताजगी की आवश्यकता होती है।

सामान्य परिदृश्य:

ऐतिहासिक + वास्तविक समय। प्रवृत्ति विश्लेषण के लिए 3 साल का ऐतिहासिक बिक्री डेटा आयात करें (तेज़ क्वेरी, स्रोत डेटाबेस पर कोई प्रभाव नहीं)। नवीनतम परिचालन दृश्यों के लिए DirectQuery के माध्यम से चालू माह के डेटा से कनेक्ट करें।

केंद्रीय मॉडल + स्थानीय संवर्धन। DirectQuery के माध्यम से केंद्रीय रूप से प्रबंधित डेटासेट से कनेक्ट करें (सुनिश्चित करें कि आप संगठन की शासित परिभाषाओं का उपयोग करते हैं)। विभाग-विशिष्ट डेटा (बजट लक्ष्य, कस्टम वर्गीकरण) के लिए स्थानीय आयातित तालिकाएँ जोड़ें जो केंद्रीय मॉडल में मौजूद नहीं हैं।

मल्टीपल सोर्स सिस्टम। क्लाउड डेटा वेयरहाउस (स्नोफ्लेक, एज़्योर सिनैप्स) से डेटा आयात करें और उन्हें समेकित करने के लिए एक अलग ईटीएल पाइपलाइन बनाए बिना, एक ही रिपोर्ट में डायरेक्टक्वेरी के माध्यम से एक ऑपरेशनल डेटाबेस (पोस्टग्रेएसक्यूएल, एसक्यूएल सर्वर) से कनेक्ट करें।

समग्र मॉडल वास्तुकला

एक समग्र मॉडल में, प्रत्येक तालिका में एक भंडारण मोड होता है:

आयात: डेटा को VertiPaq मेमोरी में लोड किया जाता है। सबसे तेज़ क्वेरी प्रदर्शन लेकिन अपडेट करने के लिए शेड्यूल किए गए रीफ़्रेश की आवश्यकता होती है।

DirectQuery: डेटा को स्रोत से लाइव क्वेरी किया जाता है। हमेशा चालू लेकिन स्रोत डेटाबेस प्रदर्शन पर निर्भर करता है।

दोहरी: तालिका आयातित है और DirectQuery के लिए उपलब्ध है। उन आयाम तालिकाओं के लिए उपयोग किया जाता है जिन्हें आयात और DirectQuery तथ्य तालिकाओं दोनों से संबंधित होना आवश्यक है।

आयाम तालिकाएँ सेट करें जो आयात और DirectQuery तथ्यों को "दोहरी" मोड में जोड़ती हैं। यह VertiPaq इंजन को आयात तथ्यों को फ़िल्टर करते समय इन-मेमोरी कॉपी का उपयोग करने और DirectQuery तथ्यों को फ़िल्टर करते समय SQL क्वेरी उत्पन्न करने की अनुमति देता है।

प्रदर्शन संबंधी विचार

समग्र मॉडल जटिलता का परिचय देते हैं। आयात और DirectQuery तालिकाओं को विस्तारित करने वाली क्वेरीज़ को दो अलग-अलग इंजनों से परिणामों को मर्ज करने के लिए Power BI की आवश्यकता होती है, जो कि DirectQuery स्रोत अनुकूलित नहीं होने पर धीमा हो सकता है।

अपने मॉडल को संरचित करके क्रॉस-सोर्स जॉइन को कम करें ताकि अधिकांश विश्लेषणात्मक प्रश्न आयात तालिकाओं पर आएँ। DirectQuery का उपयोग केवल उन विशिष्ट तालिकाओं के लिए करें जिनके लिए वास्तविक समय की ताजगी की आवश्यकता होती है। रिश्तों और फ़िल्टर में उपयोग किए गए कॉलम पर DirectQuery स्रोत तालिकाओं को अनुक्रमित करें।

जटिल पावर बीआई डेटा मॉडल बनाने वाले संगठनों के लिए, ECOSIRE की डेटा मॉडलिंग सेवाएं आपके विशिष्ट डेटा परिदृश्य और प्रदर्शन आवश्यकताओं के अनुरूप स्टार स्कीमा डिज़ाइन, DAX अनुकूलन और समग्र मॉडल आर्किटेक्चर पर विशेषज्ञ मार्गदर्शन प्रदान करती हैं।


मॉडल अनुकूलन

मॉडल का आकार कम करना

बड़े मॉडल अधिक मेमोरी का उपभोग करते हैं, अधिक धीरे-धीरे रीफ्रेश करते हैं, और कम प्रतिक्रियाशील तरीके से क्वेरी करते हैं। इन तकनीकों के माध्यम से मॉडल आकार अनुकूलित करें:

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

कार्डिनैलिटी कम करें। लाखों अद्वितीय मानों (टाइमस्टैम्प, GUID, फ्री-टेक्स्ट फ़ील्ड) वाले कॉलम खराब रूप से संपीड़ित होते हैं। उचित ग्रैन्युलैरिटी (दैनिक, प्रति घंटा) के लिए गोल टाइमस्टैम्प। GUID को पूर्णांक सरोगेट कुंजियों से बदलें। मुक्त-पाठ फ़ील्ड को एक अलग विवरण तालिका में ले जाएं, जिसे केवल ड्रिलिंग करते समय ही पूछा जाता है।

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

ऑटो दिनांक/समय अक्षम करें। ऑटो दिनांक/समय सुविधा मॉडल में प्रत्येक दिनांक कॉलम के लिए एक छिपी हुई दिनांक तालिका बनाती है। 10 दिनांक कॉलम वाले मॉडल के लिए, स्मृति की खपत करने वाली 10 छिपी हुई दिनांक तालिकाएँ हैं। इस सुविधा को अक्षम करें और इसके बजाय एकल स्पष्ट दिनांक आयाम का उपयोग करें।

क्वेरी प्रदर्शन निदान

Power BI के अंतर्निहित प्रदर्शन विश्लेषक द्वारा दिखाए गए प्रदर्शन से परे क्वेरी प्रदर्शन का विश्लेषण करने के लिए DAX स्टूडियो का उपयोग करें। DAX स्टूडियो ने खुलासा किया:

स्टोरेज इंजन क्वेरीज़। वर्टिपैक इंजन को कितनी क्वेरीज़ भेजी जाती हैं और वे कितना डेटा स्कैन करते हैं। कम डेटा को स्कैन करने वाली कम क्वेरीज़ का मतलब बेहतर प्रदर्शन है।

फॉर्मूला इंजन गतिविधि। फॉर्मूला इंजन कितना काम करता है (पंक्ति-दर-पंक्ति गणना, जटिल अभिव्यक्ति)। उच्च फॉर्मूला इंजन समय उन उपायों को इंगित करता है जिन्हें स्टोरेज इंजन पर अधिक काम करने के लिए फिर से लिखा जाना चाहिए।

क्वेरी योजना। DAX क्वेरी के लिए तार्किक और भौतिक निष्पादन योजना, यह दिखाती है कि पावर बीआई एक माप को स्टोरेज इंजन क्वेरी और फॉर्मूला इंजन संचालन में कैसे विघटित करता है।

इंटरैक्टिव विज़ुअल के लिए क्वेरी समय को 500ms से कम लक्षित करें। 2 सेकंड से अधिक की क्वेरीज़ सुस्त लगती हैं और डैशबोर्ड के उपयोग को हतोत्साहित करती हैं। यदि कोई विशिष्ट दृश्य लगातार 2 सेकंड से अधिक समय तक चलता है, तो उसके DAX को सरल बनाएं, उसके द्वारा संसाधित किए जाने वाले डेटा की मात्रा को कम करें, या उसे एक ड्रिल-थ्रू पृष्ठ पर ले जाएं जहां उपयोगकर्ता एक संक्षिप्त प्रतीक्षा स्वीकार करते हैं।


अक्सर पूछे जाने वाले प्रश्न

क्या मुझे पावर बीआई में स्टार स्कीमा या स्नोफ्लेक स्कीमा का उपयोग करना चाहिए?

पावर बीआई के लिए स्टार स्कीमा लगभग हमेशा बेहतर विकल्प होता है। स्नोफ्लेक स्कीमा आयाम तालिकाओं को उप-सारणी (श्रेणी → उपश्रेणी → उत्पाद) में सामान्यीकृत करती है, जो संबंधपरक डेटाबेस में अच्छी तरह से काम करती है लेकिन पावर बीआई के वर्टिपैक इंजन में अनावश्यक जोड़ बनाती है। VertiPaq असामान्य आयाम वाले स्तंभों को बेहद कुशलता से संपीड़ित करता है, इसलिए बर्फ के टुकड़े से होने वाली जगह की बचत नगण्य होती है जबकि अतिरिक्त संबंधों की प्रदर्शन लागत वास्तविक होती है। अपने आयामों को स्टार स्कीमा में समतल करें जब तक कि आपके पास ऐसा न करने का कोई विशिष्ट तकनीकी कारण न हो (जैसे कि शायद ही कभी उपयोग किए जाने वाले उच्च-कार्डिनैलिटी कॉलम के साथ एक बहुत बड़ी आयाम तालिका जिसे आप अलग करना चाहते हैं)।

पावर बीआई में अधिकतम डेटासेट आकार क्या है?

पावर बीआई प्रो 1 जीबी तक संपीड़ित डेटासेट का समर्थन करता है। प्रति उपयोगकर्ता प्रीमियम 100GB तक का समर्थन करता है। प्रीमियम क्षमता (P1 और ऊपर) बड़े डेटासेट स्टोरेज सक्षम होने के साथ 400GB तक का समर्थन करती है। ये सीमाएँ संपीड़ित इन-मेमोरी आकार को संदर्भित करती हैं, स्रोत डेटा आकार को नहीं। VertiPaq आमतौर पर 10:1 अनुपात पर डेटा को संपीड़ित करता है, इसलिए 1GB संपीड़ित डेटासेट 10GB स्रोत डेटा का प्रतिनिधित्व कर सकता है। इन सीमाओं तक पहुंचने वाले डेटासेट के लिए, विस्तार-स्तरीय डेटा के लिए एकत्रीकरण, वृद्धिशील ताज़ा, या DirectQuery के साथ समग्र मॉडल पर विचार करें।

मैं स्टार स्कीमा में अनेक-से-अनेक संबंधों को कैसे संभालूं?

ब्रिज टेबल (जिसे तथ्यहीन तथ्य टेबल या जंक्शन टेबल भी कहा जाता है) का उपयोग करें। ब्रिज तालिका में अनेक-से-अनेक संबंध में प्रत्येक संयोजन के लिए एक पंक्ति होती है --- उदाहरण के लिए, प्रत्येक ग्राहक-सेगमेंट असाइनमेंट के लिए एक पंक्ति। प्रत्येक आयाम से ब्रिज टेबल तक एक-से-अनेक संबंध बनाएं। सावधान रहें कि ब्रिज टेबल दोहरी गिनती का कारण बन सकती हैं; फ़िल्टर प्रसार को नियंत्रित करने के लिए उन्हें DISTINCTCOUNT उपायों के साथ जोड़ें या DAX में क्रॉसफ़िल्टर का उपयोग करें। यह सुनिश्चित करने के लिए कि कुल योग सही है, ज्ञात डेटा के साथ अच्छी तरह से परीक्षण करें।

क्या मुझे परिकलित कॉलम या DAX माप बनाने चाहिए?

लगभग सभी मामलों में परिकलित कॉलमों की तुलना में मापों को प्राथमिकता दें। मापों की गणना क्वेरी के समय की जाती है और भंडारण की खपत नहीं होती है। रिफ्रेश के दौरान परिकलित कॉलम की गणना की जाती है और मेमोरी में संग्रहीत किया जाता है, जिससे मॉडल का आकार बढ़ता है। गणना किए गए कॉलम का उपयोग केवल तभी करें जब आपको फ़िल्टरिंग, सॉर्टिंग या रिश्तों के लिए उपलब्ध मूल्य की आवश्यकता हो (आप स्लाइसर में माप द्वारा फ़िल्टर नहीं कर सकते हैं, लेकिन आप गणना किए गए कॉलम द्वारा फ़िल्टर कर सकते हैं)। एक सामान्य अपवाद पंक्ति-स्तरीय लेबल (पूर्ण नाम = प्रथम नाम + " " + अंतिम नाम) के लिए एक संक्षिप्त कॉलम है जिसकी उपयोगकर्ताओं को स्लाइसर या टेबल विज़ुअल में आवश्यकता होती है।

गणना समूह मौजूदा उपायों के साथ कैसे इंटरैक्ट करते हैं?

गणना समूह गणना आइटम की अभिव्यक्ति में माप को लपेटकर माप मूल्यांकन को रोकते हैं। जब किसी विज़ुअल में एक माप और एक गणना समूह होता है, तो Power BI SELECTEDMEASURE() फ़ंक्शन के माध्यम से गणना आइटम को माप पर लागू करता है। इसका मतलब है कि आपके आधार उपायों को संशोधित करने की आवश्यकता नहीं है। हालाँकि, जिन उपायों में पहले से ही समय की बुद्धिमत्ता (हार्डकोडेड YTD माप की तरह) शामिल है, उनमें गणना समूह को शीर्ष पर लागू किया जाएगा, जो संभावित रूप से दोहरा-अनुप्रयोग उत्पन्न करेगा। इससे बचने के लिए, केवल आधार माप (सरल एकत्रीकरण) को परिभाषित करें और सभी समय की बुद्धिमत्ता और तुलना तर्क के लिए विशेष रूप से गणना समूहों का उपयोग करें।

शेयर करें:
E

लेखक

ECOSIRE Research and Development Team

ECOSIRE में एंटरप्राइज़-ग्रेड डिजिटल उत्पाद बना रहे हैं। Odoo एकीकरण, ई-कॉमर्स ऑटोमेशन, और AI-संचालित व्यावसायिक समाधानों पर अंतर्दृष्टि साझा कर रहे हैं।

WhatsApp पर चैट करें