Power BI · मराठी आवृत्ती
6.9 M language ची सोपी ओळख
प्रत्येक query ही M expression असते. Home › Advanced Editor मध्ये पूर्ण code दिसतो. let … in block मध्ये named steps लिहिलेले असतात. प्रत्येक step सहसा आधीच्या step चा वापर करतो.
पहिलं example CSV आणतं, headers व types सेट करतं, columns rename करतं, Quantity > 0 filter लावतं आणि Order Date / Order Hour तयार करतं. दुसरं UTC timestamp IST मध्ये बदलतं. शेवटचं delivery band function आहे.
let
Source = Csv.Document(
File.Contents("C:\QuickCommerce\Blinkit_Orders_2025.csv"),
[Delimiter = ",", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars = true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers", {
{"OrderID", type text},
{"OrderDateTime", type datetime},
{"Quantity", Int64.Type},
{"Amount", Currency.Type},
{"DeliveryTimeMins", Int64.Type}
}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type", {
{"OrderID", "Order ID"}, {"OrderDateTime", "Order DateTime"},
{"DeliveryTimeMins", "Delivery Time Mins"}
}),
#"Filtered Rows" = Table.SelectRows(#"Renamed Columns", each [Quantity] > 0),
#"Added Order Date" = Table.AddColumn(#"Filtered Rows", "Order Date",
each DateTime.Date([Order DateTime]), type date),
#"Added Order Hour" = Table.AddColumn(#"Added Order Date", "Order Hour",
each Time.Hour([Order DateTime]), Int64.Type)
in
#"Added Order Hour"
= Table.AddColumn(Source, "Order DateTime", each
DateTimeZone.RemoveZone(
DateTimeZone.SwitchZone(DateTime.AddZone([OrderDateTimeUTC], 0), 5, 30)
), type datetime)
// Query named fnDeliveryBand
(mins as nullable number) as text =>
if mins = null then "Not delivered"
else if mins <= 10 then "Within 10 min"
else if mins <= 20 then "11-20 min"
else "Over 20 min"
M मधल्या महत्त्वाच्या गोष्टी
- M case-sensitive आहे. Table.SelectRows योग्य; table.selectrows वेगळं आणि चुकीचं नाव आहे.
- Spaces असलेलं step नाव
#"Step Name"असं लिहितात. eachfunction लिहिण्याचा छोटा मार्ग आहे. Row context मध्ये [Column] त्या row ची value दाखवतो.inनंतर दिलेली value query चा output असते.- Comments साठी
//किंवा/* … */वापरा.
UTC ते IST
DateTime.AddZone(…, 0) timezone नसलेल्या value ला UTC म्हणून ओळख देतं; DateTimeZone.SwitchZone(…, 5, 30) IST मध्ये बदलतं; RemoveZone पुन्हा साधा Date/Time देतं. आपल्या sample files आधीच IST मध्ये आहेत; त्यांना पुन्हा 5:30 जोडू नका.
Function वापरा
fnDeliveryBand query save करा. Add Column › Invoke Custom Function किंवा fnDeliveryBand([Delivery Time Mins]) वापरा. Null साठी Not delivered, 10 पर्यंत Within 10 min, 20 पर्यंत 11-20 min आणि पुढे Over 20 min मिळतं.
Code पाठ करण्याची गरज नाही. UI मधून step बनवा आणि Formula bar मध्ये काय तयार झालं ते वाचा.