Forum Discussion

frankhofmans's avatar
frankhofmans
Icon for Helper IV rankHelper IV
2 years ago
Solved

Previous quarters from selected quarter

hi all,

 

I want to create a quarterly report, where the user can select one quarter. In the underlying date table every quarter has a quarter offset (so q2 2024 is offset -1, q1 2024 is offset -2). I want to create different measures, where i compare the data from the selected quarter with the data from the same quarter last year and with the data from the previous quarter, and the average from the previous 4 quarters. Also, in the graphs i present, i only want to show the selected quarters and the 4 previous quarters.

 

I have a sales table with sales and salesdate. I have a direct relationship between salesdate and date in datetable.

 

So: user selects Q1 2024

 

Total sales: sales in quarter offset -2

Total sales previous quarter: sales in quarter offset -3

Total sales same quarter previous year: sales in quarter offset -6

Average sales previous 4 quarters: average from sales quarter, -3,-4,-5,-6

 

In graphs i want to present offset -6, -5, -4, -3, -2

 

Any suggestions for this?

 

Thanks in advance,

Regards, Frank

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi frankhofmans 

     

    My solution is as follows, you can try it out.

    1. Create new columns “OFFSET” “QY” “sort” in SalesTable.
      OFFSET = VAR CurrentYear = YEAR(TODAY())
      VAR CurrentQuarter = ROUNDUP(MONTH(TODAY())/3, 0)
      VAR DateYear = YEAR([salesdate])
      VAR DateQuarter = ROUNDUP(MONTH([salesdate])/3, 0)
      RETURN (DateYear - CurrentYear)*4 + (DateQuarter - CurrentQuarter)

      QY = "Q"&QUARTER([salesdate])&" "&YEAR([salesdate])

      sort = FORMAT([salesdate],"YYYYQQ") 
    2. Select “QY” column and click Sort by column “sort”. 

       

    3. Creat a DateTable by DAX as follow:
      DateTable = ADDCOLUMNS(
      CALENDAR(MIN(SalesTable[salesdate]), MAX(SalesTable[salesdate])),
      "Year", YEAR([Date]),
      "Quarter", "Q" & FORMAT([Date], "Q") & " " & YEAR([Date]),
      "QuarterOffset",
      VAR CurrentYear = YEAR(TODAY())
      VAR CurrentQuarter = ROUNDUP(MONTH(TODAY())/3, 0)
      VAR DateYear = YEAR([Date])
      VAR DateQuarter = ROUNDUP(MONTH([Date])/3, 0)
      RETURN (DateYear - CurrentYear)*4 + (DateQuarter - CurrentQuarter)
      )
    4. Create a measure by DAX as follow:
      Measure =
      var _dateoffset=SELECTEDVALUE(DateTable[QuarterOffset])
      var _salesoffset=MAX('SalesTable'[OFFSET])
      return IF(_salesoffset<=_dateoffset&&_salesoffset>=_dateoffset-4,1)
    5. Put “sales” ”QY” ”OFFSET” of SalesTable into a new created table visual. Create a slicer and put “Quarter” of DateTable into the slicer. 
    6.  Use “Measure” in the table visual, and apply filter to "is" "1". 

       

    7. Here is my final result. 

       

      Best Regards,

      Jarvis Tang

      If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

2 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi frankhofmans 

     

    My solution is as follows, you can try it out.

    1. Create new columns “OFFSET” “QY” “sort” in SalesTable.
      OFFSET = VAR CurrentYear = YEAR(TODAY())
      VAR CurrentQuarter = ROUNDUP(MONTH(TODAY())/3, 0)
      VAR DateYear = YEAR([salesdate])
      VAR DateQuarter = ROUNDUP(MONTH([salesdate])/3, 0)
      RETURN (DateYear - CurrentYear)*4 + (DateQuarter - CurrentQuarter)

      QY = "Q"&QUARTER([salesdate])&" "&YEAR([salesdate])

      sort = FORMAT([salesdate],"YYYYQQ") 
    2. Select “QY” column and click Sort by column “sort”. 

       

    3. Creat a DateTable by DAX as follow:
      DateTable = ADDCOLUMNS(
      CALENDAR(MIN(SalesTable[salesdate]), MAX(SalesTable[salesdate])),
      "Year", YEAR([Date]),
      "Quarter", "Q" & FORMAT([Date], "Q") & " " & YEAR([Date]),
      "QuarterOffset",
      VAR CurrentYear = YEAR(TODAY())
      VAR CurrentQuarter = ROUNDUP(MONTH(TODAY())/3, 0)
      VAR DateYear = YEAR([Date])
      VAR DateQuarter = ROUNDUP(MONTH([Date])/3, 0)
      RETURN (DateYear - CurrentYear)*4 + (DateQuarter - CurrentQuarter)
      )
    4. Create a measure by DAX as follow:
      Measure =
      var _dateoffset=SELECTEDVALUE(DateTable[QuarterOffset])
      var _salesoffset=MAX('SalesTable'[OFFSET])
      return IF(_salesoffset<=_dateoffset&&_salesoffset>=_dateoffset-4,1)
    5. Put “sales” ”QY” ”OFFSET” of SalesTable into a new created table visual. Create a slicer and put “Quarter” of DateTable into the slicer. 
    6.  Use “Measure” in the table visual, and apply filter to "is" "1". 

       

    7. Here is my final result. 

       

      Best Regards,

      Jarvis Tang

      If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.