<पी> Microsoft Access मैन्युअल डेटा प्रविष्टि को कम करके, त्रुटियों को कम करके और आपके डेटाबेस को वास्तविक समय में सुसंगत रखते हुए लिंक की गई तालिकाओं में जटिल गणनाओं को स्वचालित करने के लिए शक्तिशाली सुविधाएँ प्रदान करता है। परिकलित फ़ील्ड डेटाबेस को अधिक स्वचालित बना सकते हैं; उपयोगकर्ताओं को मैन्युअल रूप से कुल योग, छूट, देय तिथियां या लाभ मूल्य दर्ज करने के लिए कहने के बजाय, एक्सेस मौजूदा फ़ील्ड से उनकी गणना कर सकता है। <पी> इस ट्यूटोरियल में, हम दिखाएंगे कि स्वचालित क्रॉस-लिंक्ड गणनाओं के लिए एक्सेस टेबल में परिकलित फ़ील्ड कैसे जोड़ें। आइए परिकलित फ़ील्ड बनाएं जो स्वचालित रूप से संबंधित तालिकाओं में मान खींचते हैं और उनकी गणना करते हैं। <पी> याद रखें कि एक उन्नत डेटाबेस में, परिकलित फ़ील्ड का उपयोग यादृच्छिक रूप से नहीं किया जाना चाहिए। सबसे महत्वपूर्ण नियम है:
- उन मानों के लिए परिकलित फ़ील्ड का उपयोग करें जो एक ही रिकॉर्ड में फ़ील्ड पर निर्भर करते हैं
- गणना के लिए क्वेरी का उपयोग करें जो लिंक की गई तालिकाओं या एकाधिक रिकॉर्ड पर निर्भर करती हैं
चरण 1:नमूना संबंधित तालिकाएँ सेट करें
<पी> एक परिकलित फ़ील्ड जो तालिकाओं तक पहुँचती है, ठोस संबंधों पर निर्भर करती है। कोई भी अभिव्यक्ति लिखने से पहले यहां से शुरुआत करें। <पी> रिश्ता बनाएं: पी>- डेटाबेस टूल्स पर जाएं टैब>> रिश्ते चुनें
- टेबल जोड़ें.
- खींचें ग्राहकआईडी ग्राहक तालिका से ग्राहकआईडी तक ऑर्डर तालिका में
- खींचें ProductID उत्पाद तालिका से ProductID तक ऑर्डर विवरण तालिका में
- खींचें ऑर्डर आईडी ऑर्डर तालिका से ऑर्डरआईडी तक ऑर्डर विवरण तालिका में
- सक्षम संदर्भात्मक सत्यनिष्ठा लागू करें
- ठीक क्लिक करें
<पी> यह सेटअप क्रॉस-लिंक्ड गणनाओं की अनुमति देता है (उदाहरण के लिए लाइन योग के योग के रूप में सबटोटल ऑर्डर करें)। यह लिंकेज ही क्रॉस-टेबल लुकअप को विश्वसनीय बनाता है। इसके बिना, जब कोई संदर्भित रिकॉर्ड हटा दिया जाता है या बेमेल हो जाता है, तो गणना की गई फ़ील्ड चुपचाप शून्य हो सकती है। चरण 2:तालिका में एक सरल परिकलित फ़ील्ड जोड़ना
- ऑर्डर विवरण खोलें डिज़ाइन दृश्य में तालिका
- पहली खाली पंक्ति में:
- फ़ील्ड का नाम:लाइनटोटल
- डेटा प्रकार:गणना
- एक्सेस एक्सप्रेशन बिल्डर खोलता है
- अपना फॉर्मूला दर्ज करें:
- या इसे दृश्य रूप से बनाएं:ऑर्डर विवरण का विस्तार करें तालिका>> मात्रा पर डबल-क्लिक करें और यूनिटप्राइस , फिर * जोड़ें ऑपरेटर
- परिणाम प्रकार सेट करें (मुद्रा, संख्या, पाठ, आदि) यह मिलान करने के लिए कि अभिव्यक्ति क्या लौटाती है
- फ़ील्ड प्रॉपर्टी का विस्तार करें>>मुद्राचुनें
- सहेजें टेबल
<पी> छूट सहित कुल: पी> [Quantity] * [UnitPrice] * (1 - [DiscountRate])<पी>
<पी> एक्सेस अब प्रत्येक रिकॉर्ड के लिए स्वचालित रूप से लाइनटोटल की गणना करेगा - कोई वीबीए नहीं, कोई मैन्युअल अपडेट की आवश्यकता नहीं है। हर बार जब आप डेटाशीट व्यू में क्वांटिटी या यूनिटप्राइस जोड़ते या संपादित करते हैं, तो लाइनटोटल स्वचालित रूप से अपडेट हो जाता है। <पी>
चरण 3:क्रॉस-लिंक्ड संगणनाओं को संभालना - क्वेरीज़ में डोमेन एग्रीगेट फ़ंक्शंस का उपयोग करें
<पी> तालिका परिकलित फ़ील्ड में सीधे क्रॉस-टेबल संदर्भों की अनुमति नहीं है। आपको क्वेरीज़ या वीबीए का उपयोग करने की आवश्यकता है। डोमेन एग्रीगेट फ़ंक्शंस किसी अन्य तालिका या क्वेरी से गणना किए गए मानों को अभिव्यक्ति में खींचने के लिए एक्सेस का अंतर्निहित तंत्र है। सबसे उपयोगी हैं: कार्य उद्देश्य DLookup() किसी अन्य तालिका से एकल मान लौटाता हैDSum() किसी शर्त से मेल खाने वाली किसी अन्य तालिका से मानों का योग करता हैDCount() किसी अन्य तालिका में मेल खाने वाले रिकॉर्ड की गणना करता हैDAvg() किसी अन्य तालिका से औसत मान DMax() / DMin() किसी अन्य तालिका से अधिकतम या न्यूनतम मान लौटाता है <पी> एक क्वेरी बनाएं: पी>- बनाएं पर जाएं टैब>> SQL क्वेरी चुनें
- तालिकाएँ जोड़ें से फलक, ऑर्डर और ग्राहक तालिकाएँ जोड़ें
- फ़ील्ड जोड़ें:ग्राहक नाम, ऑर्डरआईडी
- एक रिक्त फ़ील्ड कॉलम में, कुल के लिए एक परिकलित फ़ील्ड बनाएं
- निम्नलिखित अभिव्यक्ति सम्मिलित करें:
Total: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderID])
- DSum() मिलान वाले ऑर्डरआईडी (एक डोमेन एग्रीगेट फ़ंक्शन जो तालिकाओं में काम करता है) के लिए लाइनटोटल का योग करता है
- qryOrderSummary के रूप में सहेजें
- चलाएँ क्लिक करें
<पी> क्वेरी प्रत्येक रन पर पुन:गणना करती है। इस क्वेरी का उपयोग प्रपत्रों, रिपोर्टों के लिए रिकॉर्ड स्रोत या आगे की गणना के आधार के रूप में करें। <पी> मुद्रा के साथ प्रारूप: पी> Total: CCur(DSum("[LineTotal]","OrderDetails","[OrderID]=" & [Orders].[OrderID]))
<पी>
चरण 4:गणना स्रोत के रूप में एक मल्टी-टेबल कंप्यूटेड क्वेरी बनाना
<पी> अधिक परिष्कृत परिदृश्यों के लिए - जैसे कि एक रियायती कुल की गणना करना जिसमें एक तालिका से ग्राहक का स्तर और दूसरे से उत्पाद की कीमत शामिल होती है - आपको एक आधार क्वेरी बनानी चाहिए जो सभी प्रासंगिक तालिकाओं को जोड़ती है, फिर उस क्वेरी को अपने गणना किए गए फ़ील्ड या फ़ॉर्म में संदर्भित करें। <पी> कदम: पी>- बनाएं पर जाएं टैब>> SQL क्वेरी चुनें
- ऑर्डर जोड़ें , उत्पाद , और ऑर्डर विवरण क्वेरी के लिए
- फ़ील्ड जोड़ें:ऑर्डर आईडी, उत्पाद का नाम
- खाली फ़ील्ड सेल में परिकलित कॉलम जोड़ें:
Profit: [DiscountedTotal] - [CostPrice]
- क्वेरी को qryOrderProfit के रूप में सहेजें
- चलाएँ क्लिक करें
<पी> अब आपके पास सभी ऑर्डरों के लिए उनके उत्पाद नाम के साथ लाभ रिपोर्ट है। <पी>
<पी> अब कोई भी फॉर्म, रिपोर्ट, या डाउनस्ट्रीम परिकलित फ़ील्ड पूरी तरह से गणना किए गए मान प्राप्त करने के लिए DLookup() या qryOrderProfit के विरुद्ध एक सबक्वेरी का उपयोग कर सकता है - सभी क्रॉस-लिंक्ड और स्वचालित। चरण 5:डेटा मैक्रोज़ के साथ अपडेट को स्वचालित करना
<पी> जब आपको गणना किए गए परिणाम को संग्रहीत करने की आवश्यकता होती है (सिर्फ प्रदर्शित नहीं) - उदाहरण के लिए, जब भी ऑर्डर विवरण रिकॉर्ड बदलता है तो गणना किए गए कुल को ऑर्डर तालिका में वापस लिखना - चाइल्ड टेबल से जुड़े डेटा मैक्रो का उपयोग करें।पी> <पी> ऑर्डर तालिका में कुल फ़ील्ड जोड़ें: पी>- सबसे पहले, ऑर्डर खोलें डिज़ाइन दृश्य में तालिका
- फ़ील्ड का नाम:कुल
- डेटा प्रकार:मुद्रा
- ऑर्डर विवरण खोलें डिज़ाइन दृश्य में
- टेबल टूल्स पर जाएं टैब>> तालिका का चयन करें टैब>> इन्सर्ट करने के बाद / अपडेट के बाद चुनें
- मैक्रो एडिटर में, SetField का उपयोग करें और लुकअपरिकॉर्ड क्रियाएँ:
- LookupRecord चुनें
Lookup Up A Record In: Orders Where Condition: [Orders].[OrderID] = [OrderDetails].[OrderID]
- EditRecord चुनें>> सेटफ़ील्ड चुनें
Name: [Orders].[Total]
Value: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderID])
- सहेजें क्लिक करें
<पी> यह ऑर्डर विवरण में प्रत्येक प्रविष्टि या अद्यतन पर स्वचालित रूप से सक्रिय हो जाता है, पुनर्गणना किए गए कुल को मूल ऑर्डर तालिका में वापस भेज देता है - पूरी तरह से स्वचालित, कोई वीबीए आवश्यक नहीं है।पी> <पी> अपडेट के बाद के लिए दोहराएँ: पी> <पी> सम्मिलित करने के बाद मैक्रो कुल को तभी अपडेट करता है जब कोई नई विवरण पंक्ति जोड़ी जाती है। यदि उपयोगकर्ता मात्रा, इकाई मूल्य, या डिस्काउंट रेट बदलता है, तो कुल को भी अपडेट करना होगा। <पी> वही मैक्रो जोड़ें: Look Up A Record In Orders
Where Condition: [Orders].[OrderID]=[OrderDetails].[OrderID]
EditRecord
SetField
Name: [Orders].[Total]
Value: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderDetails].[OrderID])
- सहेजें यह
चरण 6:संगणनाएँ प्रदर्शित करना और उपयोग करना
- डेटाशीट दृश्य में: परिकलित फ़ील्ड दिखाई देते हैं और लाइव अपडेट होते हैं।
- फॉर्म/रिपोर्ट में: पूर्ण क्रॉस-लिंक्ड परिणामों के लिए फॉर्म या रिपोर्ट को क्वेरी (qryOrderSummary) पर आधारित करें। भावों के साथ अनबाउंड टेक्स्ट बॉक्स जोड़ें।
- फ़िल्टरिंग/सॉर्टिंग: आप क्वेरी मानदंड या प्रकार में परिकलित फ़ील्ड का उपयोग कर सकते हैं।
- डेटाशीट दृश्य में:कॉलम का चयन करें>> फ़ील्ड चुनें टैब>> अभिव्यक्ति को संशोधित करें
- या डिज़ाइन व्यू पर वापस लौटें>> गुण चुनें>> अभिव्यक्ति चुनें .
सर्वोत्तम अभ्यास और प्रदर्शन संबंधी विचार
- तालिका परिकलित फ़ील्ड के बजाय क्वेरीज़ को प्राथमिकता दें एकाधिक तालिकाओं, समुच्चय, या भविष्य में होने वाले परिवर्तनों से संबंधित किसी भी चीज़ के लिए। क्वेरीज़ अधिक पोर्टेबल हैं (उदाहरण के लिए SQL सर्वर के लिए) और लचीली।
- गणना संग्रहित करने से बचें जब तक प्रदर्शन इसकी मांग नहीं करता (उदाहरण के लिए बहुत बड़े डेटासेट जहां ऑन-द-फ्लाई रकम धीमी होती है)। इसके बजाय प्रश्नों में पुनर्गणना करें।
- सामान्यीकरण: केवल कच्चे इनपुट को संग्रहित करें। आउटपुट की गतिशील रूप से गणना करें।
- परीक्षण: परिवर्तनों के बाद, हमेशा नमूना डेटा से सत्यापित करें, विशेषकर संबंध जोड़ने के बाद।
- प्रदर्शन: बड़ी तालिकाओं पर बहुत अधिक परिकलित फ़ील्ड या जटिल DSum() कॉल चीज़ें धीमी कर सकती हैं। विदेशी कुंजियाँ अनुक्रमित करें।
- सीमाएं पुनर्कथन:
- तालिका परिकलित अभिव्यक्तियों में सीधे अन्य तालिकाओं से कोई फ़ील्ड नहीं।
- तालिका परिकलित फ़ील्ड में प्रतिबंधित फ़ंक्शन (पूर्ण VBA एक्सेस के लिए क्वेरी का उपयोग करें)।
- परिणाम केवल पढ़ने के लिए हैं।
- स्केलिंग युक्ति: बहुत उन्नत आवश्यकताओं के लिए, तर्क को SQL दृश्यों या SQL सर्वर जैसे बैकएंड पर स्थानांतरित करने पर विचार करें, जहां गणना किए गए कॉलम अधिक शक्ति प्रदान करते हैं।
सामान्य नुकसान और समस्या निवारण
- #त्रुटि या #नाम?: जांचें कि फ़ील्ड नाम कोष्ठक में हैं [], डेटा प्रकार मेल खाते हैं, और संबंध सक्रिय हैं।
- परिपत्र संदर्भ: किसी परिकलित फ़ील्ड को उसकी अपनी अभिव्यक्ति में संदर्भित न करें या लूप न बनाएं।
- डेटा प्रकार बेमेल: परिणाम प्रकार को स्पष्ट रूप से सेट करें (उदाहरण के लिए धन फ़ील्ड के लिए मुद्रा)।
- क्रॉस-टेबल विफल: तर्क को जॉइन वाली क्वेरी में ले जाएं या DSum() का उपयोग करें।
- यदि लिंक की गई तालिकाओं (उदाहरण के लिए SharePoint या किसी अन्य डेटाबेस) का उपयोग कर रहे हैं, तो परिकलित फ़ील्ड में पंक्ति सीमाएँ या ताज़ा समस्याएँ हो सकती हैं।