Forum Discussion
Custom Column Conundrum
I am trying to replicate this excel calculation in Power Bi to create a Period Offset column:-
=[@Index]-XLOOKUP(TODAY(),[Date],[Index])
Can this be done as a Custom Column?
Loving Power BI but very new to its calculations.
Regards
CorniTiger21
Something like this might work.
Go to Transform Data and paste this into the advanced editor of a blank query...
let Source = Table.FromRows( Json.Document( Binary.Decompress( Binary.FromText( "i45WMjDUNzDRNzIwtFDSUTKyQOIYAjGKLEjAsaAIpA4ioGsCJEBY18xAKVaHoGFG1DTMmJqGmVDTMFPiDYsFAA==", BinaryEncoding.Base64 ), Compression.Deflate ) ), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ #"Period Start Date" = _t, #"Period End Date" = _t, Index = _t, Date = _t, Period = _t, Month = _t, Year = _t, CurYearOffset = _t, MonthNum = _t, PeriodOffset = _t ] ), ChangeType = Table.TransformColumnTypes( Source, { {"Period Start Date", type date}, {"Period End Date", type date}, {"Date", type date}, {"Index", Int64.Type}, {"Period", Int64.Type}, {"Year", Int64.Type}, {"CurYearOffset", Int64.Type}, {"MonthNum", Int64.Type}, {"PeriodOffset", Int64.Type} } ), AddDaysInPeriod = Table.AddColumn( ChangeType, "DaysInPeriod", each Number.RoundTowardZero(Duration.TotalDays([Period End Date] - [Period Start Date])) + 1, Int64.Type ), AddNewPeriodOffset = Table.AddColumn( AddDaysInPeriod, "NewPeriodOffset", each Number.RoundTowardZero( Duration.TotalDays([Period Start Date] - DateTime.Date(DateTime.FixedLocalNow())) / [DaysInPeriod] ), Int64.Type ) in AddNewPeriodOffset
8 Replies
- KNPSuper User
Would be good to provide some sample data/example output so we don't have to create it manually.
Typically, I'd recommend doing this in Power Query but if you want to create a calculated column, you could look into the OFFSET function.
Intellisense doesn't work for it yet as it is relatively new but there's a good article here...
https://data-marc.com/2022/09/21/how-offset-in-dax-will-make-your-life-easier/
Alternately, if you provide some sample data and expected output, I'll see if I can offer a PQ solution.
- CorniTiger21New Member
Here is an extract of the table, a few columns removed for space. Happy for any solution, calculated column or custom column, etc. Sorry rookie error not supplying some data
Period Start Date Period End Date Index Date Period Month Year CurYearOffset MonthNum PeriodOffset 01/04/2018 28/04/2018 1 01/04/2018 1 Apr 2018 -4 4 -60 01/04/2018 28/04/2018 1 02/04/2018 1 Apr 2018 -4 4 -60 01/04/2018 28/04/2018 1 03/04/2018 1 Apr 2018 -4 4 -60 01/04/2018 28/04/2018 1 04/04/2018 1 Apr 2018 -4 4 -60 01/04/2018 28/04/2018 1 05/04/2018 1 Apr 2018 -4 4 -60 - KNPSuper User
What are your periods? Are you working with 4-5-4 or 13 week or similar?
I assume on the 29/04/2018 the Index changes to 2 and keeps incrementing?
What do you use the PeriodOffset for?
- KNPSuper User
Something like this might work.
Go to Transform Data and paste this into the advanced editor of a blank query...
let Source = Table.FromRows( Json.Document( Binary.Decompress( Binary.FromText( "i45WMjDUNzDRNzIwtFDSUTKyQOIYAjGKLEjAsaAIpA4ioGsCJEBY18xAKVaHoGFG1DTMmJqGmVDTMFPiDYsFAA==", BinaryEncoding.Base64 ), Compression.Deflate ) ), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ #"Period Start Date" = _t, #"Period End Date" = _t, Index = _t, Date = _t, Period = _t, Month = _t, Year = _t, CurYearOffset = _t, MonthNum = _t, PeriodOffset = _t ] ), ChangeType = Table.TransformColumnTypes( Source, { {"Period Start Date", type date}, {"Period End Date", type date}, {"Date", type date}, {"Index", Int64.Type}, {"Period", Int64.Type}, {"Year", Int64.Type}, {"CurYearOffset", Int64.Type}, {"MonthNum", Int64.Type}, {"PeriodOffset", Int64.Type} } ), AddDaysInPeriod = Table.AddColumn( ChangeType, "DaysInPeriod", each Number.RoundTowardZero(Duration.TotalDays([Period End Date] - [Period Start Date])) + 1, Int64.Type ), AddNewPeriodOffset = Table.AddColumn( AddDaysInPeriod, "NewPeriodOffset", each Number.RoundTowardZero( Duration.TotalDays([Period Start Date] - DateTime.Date(DateTime.FixedLocalNow())) / [DaysInPeriod] ), Int64.Type ) in AddNewPeriodOffset
- v-jingzhangCommunity Support
Hi CorniTiger21
Have you solved this problem? If yes, you can accept a helpful reply as solution to close this thread. Or post your own solution and accept it.
If not, you can try the following solution with a calculated column. LOOKUPVALUE function (DAX)
PeriodOffset = 'Table (2)'[Period] - LOOKUPVALUE('Table (2)'[Period],'Table (2)'[Date],TODAY())Best Regards,
Community Support Team _ Jing
If this post helps, please Accept it as Solution to help other members find it.