Forum Discussion

Julius410's avatar
Julius410
Frequent Visitor
3 years ago

COUNT MONTHS for FY

Hi there,

 

I am trying to calculate a measure that allows me to divide an achieved result for a financial year by the number of months that have passed in the financial year. For example, 420 were achieved in FY22. This means for FY22 I want 420 / 12 = 35. For FY24, 2 months should be considered (our FY starts in July and we're in August) and should show 46 / 2 = 23.

 

Please see graph below:

 

 

How could this be achieved?


Thank you.

 

Julius

 

4 Replies

    • Julius410's avatar
      Julius410
      Frequent Visitor

      Hi,

       

      I can't upload the file here or create a link to download it.

       

      Essentially, the file can contain two tables: 1) Date Table and 2) Data Table. For the date table you can use this code - starting month is 7:

       

      let fnDateTable = (StartDate as date, EndDate as date, FYStartMonth as number) as table =>
      let
      DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
      Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
      TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
      ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
      RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
      InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date]),type text),
      InsertYearNumber = Table.AddColumn(RenamedColumns, "YearNumber", each Date.Year([Date])),
      InsertQuarter = Table.AddColumn(InsertYear, "QuarterOfYear", each Date.QuarterOfYear([Date])),
      InsertMonth = Table.AddColumn(InsertQuarter, "MonthOfYear", each Date.Month([Date]), type text),
      InsertDay = Table.AddColumn(InsertMonth, "DayOfMonth", each Date.Day([Date])),
      InsertDayInt = Table.AddColumn(InsertDay, "DateInt", each [Year] * 10000 + [MonthOfYear] * 100 + [DayOfMonth]),
      InsertMonthName = Table.AddColumn(InsertDayInt, "MonthName", each Date.ToText([Date], "MMMM"), type text),
      InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MonthInCalendar", each (try(Text.Range([MonthName],0,3)) otherwise [MonthName]) & " " & Number.ToText([Year])),
      InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "QuarterInCalendar", each "Q" & Number.ToText([QuarterOfYear]) & " " & Number.ToText([Year])),
      InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "DayInWeek", each Date.DayOfWeek([Date])),
      InsertDayName = Table.AddColumn(InsertDayWeek, "DayOfWeekName", each Date.ToText([Date], "dddd"), type text),
      InsertWeekEnding = Table.AddColumn(InsertDayName, "WeekEnding", each Date.EndOfWeek([Date]), type date),
      InsertWeekNumber= Table.AddColumn(InsertWeekEnding, "Week Number", each Date.WeekOfYear([Date])),
      InsertMonthnYear = Table.AddColumn(InsertWeekNumber,"MonthnYear", each [Year] * 10000 + [MonthOfYear] * 100),
      InsertQuarternYear = Table.AddColumn(InsertMonthnYear,"QuarternYear", each [Year] * 10000 + [QuarterOfYear] * 100),
      ChangedType1 = Table.TransformColumnTypes(InsertQuarternYear,{{"QuarternYear", Int64.Type},{"Week Number", Int64.Type},{"Year", type text},{"MonthnYear", Int64.Type}, {"DateInt", Int64.Type}, {"DayOfMonth", Int64.Type}, {"MonthOfYear", Int64.Type}, {"QuarterOfYear", Int64.Type}, {"MonthInCalendar", type text}, {"QuarterInCalendar", type text}, {"DayInWeek", Int64.Type}}),
      InsertShortYear = Table.AddColumn(ChangedType1, "ShortYear", each Text.End(Text.From([Year]), 2), type text),
      AddFY = Table.AddColumn(InsertShortYear, "FY", each "FY"&(if [MonthOfYear]>=FYStartMonth then Text.From(Number.From([ShortYear])+1) else [ShortYear]))
      in
      AddFY
      in
      fnDateTable

       

      The data table only needs two columns:

       

      DateData
      01/06/2021420
      01/06/2022371
      01/07/202346

       

      And then connect the date table with the data table via the date column.

       

      Does that work for you?


      Thank you.


      Julius