समझिए
1. समस्या
Revenue = Qty × UnitPrice × (1 − Discount) — हर रो के लिए। पहले जोड़ना और बाद में गुणा करना गलत है:
| तरीका | FY2025-26 नतीजा |
|---|---|
| Σ(Qty × UnitPrice × (1 − Discount)) — रो-दर-रो | 29,49,96,410 ✅ |
| Σ(Qty × UnitPrice), discount अनदेखा | 31,70,23,350 |
| SUM(Qty) × SUM(UnitPrice) | ≈ 8.4 × 10¹² ❌ बेतुका |
(मॉड्यूल 2 के पिवट calculated fields वाला ही जाल।)
2. SUM बनाम SUMX
SUM(column)एक मौजूदा कॉलम जोड़ता है। तेज़ और आसान।SUMX(table, expression)टेबल में रो-दर-रो चलता है, हर रो के लिए expression की गणना करता है, फिर नतीजे जोड़ता है।
Total Revenue X := SUMX(fact_Sales, fact_Sales[Qty] * fact_Sales[UnitPrice] * (1 - fact_Sales[Discount]))
Total Cost X := SUMX(fact_Sales, fact_Sales[Qty] * RELATED(dim_Products[UnitCost]))
लेसन 2 के calculated columns वाले ही नतीजे — 50,000 रो के लिए दो अतिरिक्त कॉलम सेव किए बिना। Measures छोटे रहते हैं; मॉडल तेज़ रहता है।
3. दो context
| Filter context | Row context | |
|---|---|---|
| कौन बनाता है | पिवट रो/कॉलम, slicers, CALCULATE | calculated columns, X-functions (SUMX, FILTER…) |
| मतलब | "कौन-सी रो दिख रही हैं" | "अभी मैं किस एक रो पर हूँ" |
| क्या लिख सकते हैं | SUM(fact_Sales[Qty]) |
fact_Sales[Qty] (इस रो की वैल्यू) |
Measure में अकेला fact_Sales[Qty] लिखना (न SUM, न X-function) एरर है: "A single value for column 'Qty' cannot be determined" — कोई मौजूदा रो नहीं है। SUMX एक बनाता है।
Calculated column में आप एक रो पर ही होते हैं, इसलिए fact_Sales[Qty] * fact_Sales[UnitPrice] सीधे चलता है।
4. दूसरे X-functions
Avg Line Value := AVERAGEX(fact_Sales, fact_Sales[Qty] * fact_Sales[UnitPrice])
Biggest Order := MAXX(fact_Sales, fact_Sales[Qty] * fact_Sales[UnitPrice] * (1 - fact_Sales[Discount]))
Avg Store Revenue := AVERAGEX(VALUES(dim_Stores[StoreName]), [Total Revenue])
आख़िरी वाला बिक्री की रो पर नहीं, स्टोर पर चलता है: हर स्टोर के लिए Total Revenue निकालता है (measure को वह स्टोर फ़िल्टर के रूप में मिलता है), फिर औसत — "प्रति स्टोर औसत revenue"। Measure के साथ dimension पर चलना बहुत आम पैटर्न है।
5. स्पीड की बातें
- 50,000 रो पर SUMX तुरंत; करोड़ों रो पर भी सादे गणित के लिए ठीक।
- Relationships की वजह से SUMX के अंदर
RELATEDकुशल है। - जब CALCULATE का कॉलम फ़िल्टर काफ़ी हो तब SUMX के अंदर
FILTER(fact_Sales, …)से बचें।
6. कौन-सा इस्तेमाल करें?
| स्थिति | इस्तेमाल |
|---|---|
| कॉलम में पहले से अंतिम नंबर है (Amount) | SUM |
| पहले हर रो पर गुणा/बदलाव (कीमत × मात्रा × discount) | SUMX |
| हर रो की गणना का औसत/अधिकतम | AVERAGEX / MAXX |
| स्टोर/प्रोडक्ट के बीच औसत या रैंक | AVERAGEX(VALUES(dim[...]), [Measure]) |
आम गलतियाँ
SUM(Qty) × SUM(Price)। Measure में अकेला कॉलम लिखना। सिर्फ़ जोड़ने के लिए कई calculated columns बनाना (इसकी जगह SUMX)।