# 8.12 Calculated column विरुद्ध measure

Source: https://ravindrabagale.com/mr/powerbi/ch08-adding-columns-power-query-add-column-tab-and/8-12-calculated-columns-vs-measures-in-depth.html
Language: mr (Marathi with English technical terms)

Sample data definition: या course च्या Orders[Amount] मध्ये discount आधीच वजा आहे. खाली Amount − Discount हे generic formula शिकवण्यासाठीचं example आहे; आपल्या sample वर पुन्हा discount वजा करू नका. Sample Net Sales = SUM(Orders[Amount]); discountपूर्व gross = Amount + Discount.

Calculated column: Import model मध्ये refresh वेळी row-by-row result तयार व store होतो. Measure: formula store होतो; result visual च्या सध्याच्या filter context मध्ये query वेळी calculate होतो.

Column file size व RAM वाढवतो; high-cardinality text मोठा पडू शकतो. Measure चा per-row result store नसतो, पण evaluation ला CPU आणि temporary memory लागते.

Row context म्हणजे सध्याची row. Filter context म्हणजे slicers, visual rows / columns, Filters pane आणि RLS मधून आलेले filters.

समान logic चे दोन मार्ग

-- Option A: calculated column + implicit/explicit sum
Net Amount = Orders[Amount] - Orders[Discount]           -- column, stored per row
Net Sales (A) = SUM(Orders[Net Amount])                   -- measure over the column

-- Option B: measure only (iterator), nothing stored
Net Sales (B) = SUMX(Orders, Orders[Amount] - Orders[Discount])

-- Column (row level flag) – good for slicing
Within 10 Min = IF(Orders[Delivery Time Mins] <= 10, 1, 0)

-- Measure (ratio) – must be a measure, because a ratio cannot be summed
% Under 10 Mins =
DIVIDE(
    CALCULATE(DISTINCTCOUNT(Orders[Order ID]), Orders[Delivery Time Mins] <= 10),
    CALCULATE(DISTINCTCOUNT(Orders[Order ID]), Orders[Order Status] = "Delivered")
)

Net Sales (A) stored Net Amount column sum करतो; (B) SUMX वापरतो. योग्य data वर City नुसार दोन्ही सारखे मिळतात. Net Amount वर slicing / bucketing हवं असेल तर column उपयोगी; फक्त total हवा तर measure पुरू शकतो.

Under-10 ratio example मधली महत्त्वाची दुरुस्ती: BLANK time DAX comparison मध्ये 0 सारखा वागू शकतो. Numerator मध्ये Delivered status आणि nonblank delivery time स्पष्ट लावा. खाली सुरक्षित स्पष्ट रूप दिलं आहे.

% Under 10 Mins Safe =
DIVIDE(
    CALCULATE(
        DISTINCTCOUNT(Orders[Order ID]),
        Orders[Order Status] = "Delivered",
        NOT ISBLANK(Orders[Delivery Time Mins]),
        Orders[Delivery Time Mins] <= 10
    ),
    CALCULATE(DISTINCTCOUNT(Orders[Order ID]), Orders[Order Status] = "Delivered")
)

एका Order ID च्या lines वर time / status सारखे आहेत हेही तपासा. वेगवेगळ्या cities च्या percentages चा साधा average हा overall percentage असेलच असं नाही.

 | मुद्दा | Column | Measure

 | Result | प्रत्येक row ची value | Current filter context ची value

 | Calculate | Import refresh वेळी | Visual query वेळी

 | Storage | Per-row result store | Formula store; result गरजेनुसार

 | Context | Row context | Filter context

 | Slicer response | Stored value बदलत नाही | Result पुन्हा calculate होतो

 | कुठे वापर? | Slicer, axis, grouping, relationship, sort | Values आणि measures स्वीकारणारे visual fields / filters

 | सामान्य उपयोग | Categories, flags, keys, bands | Totals, ratios, KPIs, YTD, ranking

निर्णय: value वर group / slice करायचं असेल तर column, शक्यतो Power Query. Filters नुसार calculation दाखवायचं असेल तर measure.

रवींद्र बागले यांची tip

Profit % column बनवून average करू नका. योग्य overall ratio साठी DIVIDE([Gross Profit], [Total Sales]) सारखा measure वापरा. Today असलेला stored column शेवटच्या refresh वेळेपुरता स्थिर असतो.
