
Microsoft Access लिंक्ड टेबल्स पर जटिल गणनाओं को स्वचालित करने के लिए शक्तिशाली फीचर्स प्रदान करता है, जिससे मैन्युअल डेटा एंट्री कम होती है, त्रुटियां कम होती हैं, और आपका डेटाबेस रियल-टाइम में सुसंगत रहता है। परिकलित फ़ील्ड डेटाबेस को अधिक स्वचालित बना सकते हैं; उपयोगकर्ताओं से मैन्युअल रूप से टोटल, डिस्काउंट, ड्यू डेट, या प्रॉफिट मूल्यों को दर्ज करने के लिए कहने के बजाय, Access उन्हें मौजूदा फ़ील्ड से गणना कर सकता है।
इस ट्यूटोरियल में, हम दिखाएंगे कि स्वचालित क्रॉस-लिंक्ड गणनाओं के लिए Access टेबल्स में परिकलित फ़ील्ड कैसे जोड़ें। आइए उन परिकलित फ़ील्ड का निर्माण करें जो संबंधित टेबल्स में स्वचालित रूप से मान खींचते और गणना करते हैं।
याद रखें कि एक उन्नत डेटाबेस में, परिकलित फ़ील्ड का उपयोग बेतरतीब ढंग से नहीं किया जाना चाहिए। सबसे महत्वपूर्ण नियम है:
- उन मूल्यों के लिए परिकलित फ़ील्ड का उपयोग करें जो उसी रिकॉर्ड में फ़ील्ड पर निर्भर करते हैं
- लिंक्ड टेबल्स या एकाधिक रिकॉर्ड पर निर्भर गणनाओं के लिए क्वेरी का उपयोग करें
चरण 1: नमूना संबंधित टेबल्स सेट करें
टेबल्स पर पहुंचने वाला एक परिकलित फ़ील्ड ठोस संबंधों पर निर्भर करता है। एक भी एक्सप्रेशन लिखने से पहले यहां से शुरू करें।
संबंध बनाएं:
- Database Tools टैब पर जाएं >> Relationships चुनें
- टेबल्स जोड़ें।
- CustomerID को Customers टेबल से CustomerID में Orders टेबल में खींचें
- ProductID को Products टेबल से ProductID में OrderDetails टेबल में खींचें
- OrderID को Orders टेबल से OrderID में OrderDetails टेबल में खींचें
- Enforce Referential Integrity सक्षम करें
- OK पर क्लिक करें

यह सेटअप क्रॉस-लिंक्ड गणनाओं की अनुमति देता है (जैसे लाइन टोटल के योग के रूप में ऑर्डर सबटोटल)। यह लिंकेज वही है जो क्रॉस-टेबल लुकअप को विश्वसनीय बनाता है। इसके बिना, एक परिकलित फ़ील्ड चुपचाप null लौटा सकता है जब एक संदर्भित रिकॉर्ड हटा दिया जाता है या बेमेल होता है।
चरण 2: टेबल में एक साधारण परिकलित फ़ील्ड जोड़ना
- OrderDetails टेबल को Design View में खोलें
- पहली खाली पंक्ति में:
- Field Name: LineTotal
- Data Type: Calculated
- Access Expression Builder खोलता है
- अपना फॉर्मूला दर्ज करें:
- या इसे विज़ुअली बनाएं: OrderDetails टेबल का विस्तार करें >> Quantity और UnitPrice पर डबल-क्लिक करें, फिर * ऑपरेटर जोड़ें
- Result Type (Currency, Number, Text, आदि.) सेट करें ताकि यह एक्सप्रेशन से मेल खाए
- Field Properties का विस्तार करें >> Currency चुनें
- टेबल Save करें

डिस्काउंट के साथ टोटल:
[Quantity] * [UnitPrice] * (1 - [DiscountRate])

Access अब हर रिकॉर्ड के लिए LineTotal को स्वचालित रूप से गणना करेगा — न VBA, न मैन्युअल अपडेट की आवश्यकता। हर बार जब आप Datasheet View में Quantity या UnitPrice जोड़ते या संपादित करते हैं, तो LineTotal स्वचालित रूप से अपडेट होता है।

चरण 3: क्रॉस-लिंक्ड गणनाओं को संभालना — क्वेरी में डोमेन एग्रीगेट फंक्शन का उपयोग करें
टेबल परिकलित फ़ील्ड में डायरेक्ट क्रॉस-टेबल संदर्भ अनुमति नहीं है। आपको क्वेरी या VBA का उपयोग करना होगा। डोमेन एग्रीगेट फंक्शन Access का अंतर्निहित तंत्र है जो किसी अन्य टेबल या क्वेरी से गणना किए गए मानों को एक्सप्रेशन में खींचता है। सबसे उपयोगी हैं:
| Function | Purpose |
|---|---|
| DLookup() | किसी अन्य टेबल से एकल मान लौटाता है |
| DSum() | किसी शर्त से मेल खाने वाले किसी अन्य टेबल से मानों का योग करता है |
| DCount() | किसी अन्य टेबल में मिलान करने वाले रिकॉर्ड गिनता है |
| DAvg() | किसी अन्य टेबल से मानों का औसत निकालता है |
| DMax() / DMin() | किसी अन्य टेबल से अधिकतम या न्यूनतम मान लौटाता है |
एक क्वेरी बनाएं:
- Create टैब पर जाएं >> SQL Query चुनें
- Add Tables पेन से, Orders और Customers टेबल्स जोड़ें
- फ़ील्ड जोड़ें: CustomerName, OrderID
- एक खाली Field कॉलम में, Total के लिए एक परिकलित फ़ील्ड बनाएं
- निम्न एक्सप्रेशन डालें:
Total: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderID])
- DSum() मिलान करने वाले OrderID के लिए LineTotal का योग करता है (एक डोमेन एग्रीगेट फंक्शन जो टेबल्स पर काम करता है)
- qryOrderSummary के रूप में सहेजें
- Run पर क्लिक करें

क्वेरी हर रन पर पुनर्गणना करती है। इस क्वेरी को फॉर्म, रिपोर्ट के लिए Record Source के रूप में उपयोग करें, या आगे की गणनाओं के आधार के रूप में।
Currency के साथ फॉर्मेट करें:
Total: CCur(DSum("[LineTotal]","OrderDetails","[OrderID]=" & [Orders].[OrderID]))

चरण 4: एक बहु-टेबल गणना क्वेरी को गणना स्रोत के रूप में बनाना
अधिक परिष्कृत परिदृश्यों के लिए — जैसे कि एक डिस्काउंटेड टोटल की गणना करना जिसमें एक टेबल से कस्टमर का टियर और दूसरे से उत्पाद मूल्य शामिल हो — आपको एक बेस क्वेरी बनानी चाहिए जो सभी प्रासंगिक टेबल्स को जोड़ती है, फिर उस क्वेरी को अपने परिकलित फ़ील्ड या फॉर्म में संदर्भित करें।
चरण:
- Create टैब पर जाएं >> SQL Query चुनें
- Orders, Products, और OrderDetails को क्वेरी में जोड़ें
- फ़ील्ड जोड़ें: OrderID, ProductName
- एक खाली Field सेल में एक परिकलित कॉलम जोड़ें:
Profit: [DiscountedTotal] - [CostPrice]
- क्वेरी को qryOrderProfit के रूप में सहेजें
- Run पर क्लिक करें

अब आपके पास सभी ऑर्डर का प्रॉफिट रिपोर्ट है उनके Product Name के साथ।

अब कोई भी फॉर्म, रिपोर्ट, या डाउनस्ट्रीम परिकलित फ़ील्ड DLookup() या qryOrderProfit के विरुद्ध एक सबक्वेरी का उपयोग करके पूरी तरह से गणना किया गया मान प्राप्त कर सकता है — सभी क्रॉस-लिंक्ड और स्वचालित।
चरण 5: डेटा मैक्रोज़ के साथ अपडेट स्वचालित करना
जब आपको एक परिकलित परिणाम को संग्रहीत करने की आवश्यकता होती है (न केवल प्रदर्शित) — उदाहरण के लिए, हर बार OrderDetails रिकॉर्ड बदलने पर गणना किए गए टोटल को वापस Orders टेबल में लिखना — चाइल्ड टेबल से जुड़े डेटा मैक्रो का उपयोग करें।
Orders टेबल में Total फ़ील्ड जोड़ें:
- सबसे पहले, Orders टेबल को Design View में खोलें
- Field Name: Total
- Data Type: Currency
यह एक सामान्य Currency फ़ील्ड होना चाहिए, परिकलित फ़ील्ड नहीं।
सेटअप:
- OrderDetails को Design View में खोलें
- Table Tools टैब पर जाएं >> Table टैब चुनें >> After Insert / After Update चुनें

- मैक्रो एडिटर में, SetField और LookupRecord एक्शन का उपयोग करें:
- LookupRecord चुनें
Lookup Up A Record In: Orders Where Condition: [Orders].[OrderID] = [OrderDetails].[OrderID]
- EditRecord चुनें >> SetField चुनें
Name: [Orders].[Total] Value: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderID])
- Save पर क्लिक करें

यह OrderDetails में हर इंसर्ट या अपडेट पर स्वचालित रूप से फायर करता है, पुनर्गणना किए गए टोटल को पैरेंट Orders टेबल में मिलान करने वाले रिकॉर्ड में वापस भेजता है — पूरी तरह से स्वचालित, नो VBA आवश्यक।
After Update के लिए दोहराएं:
After Insert मैक्रो टोटल को केवल तभी अपडेट करता है जब एक नई डिटेल पंक्ति जोड़ी जाती है। यदि उपयोगकर्ता Quantity, UnitPrice, या DiscountRate बदलता है, तो टोटल को भी अपडेट करना होगा।
वही मैक्रो जोड़ें:
Look Up A Record In Orders Where Condition: [Orders].[OrderID]=[OrderDetails].[OrderID]
EditRecord
SetField
Name: [Orders].[Total]
Value: DSum("[LineTotal]","OrderDetails","[OrderID]=" & [OrderDetails].[OrderID])
- इसे Save करें
अब, जब भी OrderDetails में कोई रिकॉर्ड इंसर्ट या अपडेट होता है, Access स्वचालित रूप से ऑर्डर टोटल की पुनर्गणना करता है और इसे Orders टेबल में मिलान करने वाले रिकॉर्ड में संग्रहीत करता है।

चरण 6: गणनाओं को प्रदर्शित करना और उपयोग करना
- Datasheet View में: परिकलित फ़ील्ड दिखाई देते हैं और लाइव अपडेट होते हैं।
- Forms/Reports में: पूर्ण क्रॉस-लिंक्ड परिणामों के लिए फॉर्म या रिपोर्ट को क्वेरी (qryOrderSummary) पर आधारित करें। एक्सप्रेशन के साथ अनबाउंड टेक्स्ट बॉक्स जोड़ें।
- फ़िल्टरिंग/सॉर्टिंग: आप क्वेरी मानदंड या सॉर्ट में परिकलित फ़ील्ड का उपयोग कर सकते हैं।
टिप: बाद में टेबल परिकलित फ़ील्ड को संपादित करने के लिए:
- Datasheet View में: कॉलम चुनें >> Fields टैब चुनें >> Expression संशोधित करें
- या Design View पर लौटें >> Properties चुनें >> Expression चुनें।
सर्वोत्तम अभ्यास और प्रदर्शन विचार
- कई टेबल्स, एग्रीगेट्स, या भविष्य में परिवर्तनों से जुड़ी किसी भी चीज़ के लिए टेबल परिकलित फ़ील्ड्स पर क्वेरी को प्राथमिकता दें। क्वेरी अधिक पोर्टेबल हैं (जैसे SQL Server पर) और अधिक लचीली हैं।
- गणनाओं को संग्रहीत करने से बचें जब तक कि प्रदर्शन इसकी मांग न करे (जैसे बहुत बड़े डेटासेट जहां ऑन-द-फ्लाई योग धीमे हैं)। क्वेरी में पुनर्गणना करें।
- नॉर्मलाइज़ेशन: केवल रॉ इनपुट संग्रहीत करें। आउटपुट को डायनामिक रूप से गणना करें।
- टेस्टिंग: परिवर्तनों के बाद, विशेष रूप से संबंध जोड़ने के बाद नमूना डेटा के साथ हमेशा सत्यापित करें।
- प्रदर्शन: बड़ी टेबल्स पर बहुत सारे परिकलित फ़ील्ड या जटिल DSum() कॉल चीजों को धीमा कर सकते हैं। विदेशी कुंजियों को इंडेक्स करें।
- सीमाओं का पुनर्कथन:
- टेबल परिकलित एक्सप्रेशन में अन्य टेबल्स के फ़ील्ड सीधे नहीं।
- टेबल परिकलित फ़ील्ड्स में प्रतिबंधित फंक्शन (पूर्ण VBA एक्सेस के लिए क्वेरी का उपयोग करें)।
- परिणाम रीड-ओनली हैं।
- स्केलिंग टिप: बहुत उन्नत आवश्यकताओं के लिए, SQL व्यू या SQL Server जैसे बैकएंड पर लॉजिक माइग्रेट करने पर विचार करें, जहां कंप्यूटेड कॉलम अधिक शक्ति प्रदान करते हैं।
सामान्य नुकसान और समस्या निवारण
- #Error या #Name?: जांचें कि फ़ील्ड नाम ब्रैकेट [] में हैं, डेटा प्रकार मेल खाते हैं, और संबंध सक्रिय हैं।
- सर्कुलर रेफरेंस: अपने स्वयं के एक्सप्रेशन में एक परिकलित फ़ील्ड को संदर्भित न करें या लूप न बनाएं।
- डेटा प्रकार बेमेल: Result Type को स्पष्ट रूप से सेट करें (जैसे मनी फ़ील्ड के लिए Currency)।
- क्रॉस-टेबल विफल: जॉइन के साथ क्वेरी में लॉजिक ले जाएं या DSum() का उपयोग करें।
- यदि लिंक्ड टेबल्स का उपयोग कर रहे हैं (जैसे SharePoint या किसी अन्य डेटाबेस पर), तो परिकलित फ़ील्ड में पंक्ति सीमाएं या रिफ्रेश मुद्दे हो सकते हैं।
निष्कर्ष
उपरोक्त चरणों का पालन करके, आप स्वचालित क्रॉस-लिंक्ड गणनाओं के लिए Access टेबल्स में परिकलित फ़ील्ड जोड़ सकते हैं। परिकलित फ़ील्ड Microsoft Access में रो-लेवल गणनाओं को स्वचालित करने के लिए उपयोगी हैं — वे लाइन टोटल, डिस्काउंट, ड्यू डेट, और प्रति ऑर्डर लाइन प्रॉफिट जैसे मूल्यों के लिए अच्छा काम करते हैं। उन्नत क्रॉस-लिंक्ड गणनाओं के लिए, क्वेरी सही टूल हैं: वे टेबल्स के बीच संबंधों का पालन करते हैं और ऑर्डर टोटल, कस्टमर बिक्री टोटल, इन्वेंट्री बैलेंस, और प्रॉफिट सारांश की गणना करते हैं। Access में परिकलित फ़ील्ड और क्रॉस-लिंक्ड गणनाओं में महारत हासिल करने से एक स्थिर डेटा स्टोर एक जीवित, स्व-रखरखाव प्रणाली में बदल जाता है।
निःशुल्क एडवांस्ड Excel अभ्यास समाधान के साथ प्राप्त करें!