समझिए
1. एक वाक्य में filter context
हर पिवट सेल पर फ़िल्टर का एक सेट होता है — उसकी रो, उसके कॉलम, slicers और report filters से। Measure उन्हीं फ़िल्टर के तहत गणना होता है। "North × Electronics, FY2025-26" सेल सिर्फ़ उन रो का जोड़ करता है जो तीनों से मेल खाती हैं: 6,81,10,625।
2. CALCULATE = measure + बदले हुए फ़िल्टर
CALCULATE( <measure>, <filter1>, <filter2>, ... )
यह सेल के फ़िल्टर लेता है, आपके दिए फ़िल्टर जोड़ता या बदलता है, और measure की गणना करता है।
तय फ़िल्टर:
North Revenue := CALCULATE([Total Revenue], dim_Stores[Region] = "North")
किसी भी सेल में यह North का revenue दिखाता है — "South" रो में भी, क्योंकि Region फ़िल्टर बदल दिया जाता है। FY2025-26 के लिए: 9,42,56,153।
कई शर्तें (AND):
North Electronics := CALCULATE([Total Revenue], dim_Stores[Region] = "North", dim_Products[Category] = "Electronics")
एक कॉलम के अंदर OR:
Delhi+Mumbai := CALCULATE([Total Revenue], dim_Stores[City] IN {"Delhi", "Mumbai"})
3. % of total — ALL से फ़िल्टर हटाना
All Regions Revenue := CALCULATE([Total Revenue], ALL(dim_Stores))
Region Share % := DIVIDE([Total Revenue], [All Regions Revenue])
ALL(dim_Stores) Stores टेबल से आने वाला हर फ़िल्टर हटा देता है, इसलिए भाजक (denominator) हमेशा सारे स्टोर का टोटल होता है (Category, FY और दूसरे फ़िल्टर फिर भी लागू)। FY2025-26 में North का हिस्सा = 32.0%।
Category के अंदर हिस्सा (सिर्फ़ Product फ़िल्टर हटाएँ, Category रखें):
Share of Category % := DIVIDE([Total Revenue], CALCULATE([Total Revenue], ALL(dim_Products[Product])))
Electronics में Laptop का हिस्सा = 46.4%।
REMOVEFILTERS(...) CALCULATE के अंदर ALL वाले ही काम का नया, ज़्यादा पढ़ने लायक नाम है।
4. मौजूदा फ़िल्टर रखें: KEEPFILTERS
डिफ़ॉल्ट में CALCULATE का फ़िल्टर उस कॉलम पर सेल के फ़िल्टर को बदल देता है। मिलान (intersect) करने के लिए:
North Only := CALCULATE([Total Revenue], KEEPFILTERS(dim_Stores[Region] = "North"))
अब South रो North का नंबर नहीं, blank दिखाती है (South AND North = कुछ नहीं)।
5. Measure पर फ़िल्टर: FILTER
कॉलम पर शर्त आसान है। किसी गणना पर शर्त के लिए टेबल पर FILTER इस्तेमाल करें:
Big Order Revenue := CALCULATE([Total Revenue], FILTER(fact_Sales, fact_Sales[Line Revenue] >= 50000))
FILTER रो-दर-रो चलता है, इसलिए इसे छोटी टेबल पर या तब इस्तेमाल करें जब सादा कॉलम फ़िल्टर नियम न कह सके।
6. CALCULATE को सीधे शब्दों में पढ़ना
CALCULATE([Total Revenue], ALL(dim_Stores), dim_Products[Category] = "Kitchen")
→ "Total revenue, सारे स्टोर के लिए, पर सिर्फ़ Kitchen — साथ में सेल के पहले से लगे तारीख़/दूसरे फ़िल्टर।"
आम गलतियाँ
उम्मीद करना कि [North Revenue] दूसरे रीजन में blank होगा (यह फ़िल्टर बदलता है — वही चाहिए तो KEEPFILTERS)। एक dimension की जगह fact टेबल पर ALL। base measures पर बनाने की जगह हर जगह CALCULATE(SUM(...)) लिखना।