Forum Discussion

jpereztang's avatar
jpereztang
Helper I
10 years ago

Weekday Last Year Comparison

Hi everybody !

 

I have a requeriment that i don't know how to achieve. Question is simple, how can I compare this year sales with exactly the same weekday sales of last year. take for instance, Today is July 1st 2016 i must compare today sales with sales on 29th June 2015 because this two days are monday of the same week.

 

You can think that's piece of cake, just DATEADD -365 days or DATEADD -1 year but I have to say there are some years that doesn't have 365days. For instance, this febrary have 29 days and febrary of last year have just 28, aka leap-year.

I think this could resolve my problem but actually dax doesn't accept 'week' as parameter

 

Ventas cliente preferente YTD:=CALCULATE(
                                                                          [Ventas cliente preferente]
                                                                         , DATEADD(Tiempo[Fecha],-52,week)
)

I hope you can help me 

Thanks in advance

 

 

 

20 Replies

    • Vvelarde's avatar
      Vvelarde
      Community Champion

      the dax maybe was:

       

      Calendar[Date] - 364

       

  • Hi Vvelarde, yep you're right it was 3th July 2015 I confused it with August.

     

    About your answer, It work for this year, but what happen if the year is a leap-year? It has 366 days and a normal year has 365. It have to be dynamic or something like that. My solution have to work to infinity and beyond

    • Anonymous's avatar
      Anonymous
      Not applicable

      jpereztang

       

      One solution that came to mind is on the date (calendar) table

       

      1. create a  column WeekNo= Weeknum([Calendar[FullDate])   ( Full Date is the Date column in DD/MM/YYYY format)

      2. Create a column WeekDayNo = WeekDay(Calendar([FullDate])

      3. Create a column Year = Year(Calendar[FullDate])

      4. Create a column DWY = ([WeekDayNo]*100+[WeekNo])*10000+[Year] . This will create numbers like 5012015, 5012016, etc. etc

          depending on the Date.

      5. Join your fact table to the Calendar table

      6. Create a measure sya for Sales = sum(Facttable[SalesAmount])

      7. Create a measure to compute the sales for same day same week last year as

           SalesLYDWY = Calculate([Sales], Filter(ALL(Calendar),Calendar[DWY] = Max( Calendar[DWY]) -1 ))

      8. You should now be able to view the Sales and SalesLYDWY side by side.

      Sample of what I did

       Column Labels             
       1 2 3 4 5 6 7 
      Row LabelsSales2SWLYSales2SWLYSales2SWLYSales2SWLYSales2SWLYSales2SWLYSales2SWLY
      2015              
      24          41 43 
      2545 47 49 51 53 55 57 
      2659 61 63 65 67 69 71 
      2773             
      2015 Total177 108 112 116 120 165 171 
      2016              
      24           41 43
      254145434745494751495351555357
      265559576159636165636765696771
      27697371 73         
      2016 Total165 171 177 108 112 116 120 

       

      This should work for all years and weeks for eternity.

       

      If this solves your requirement please accept this as a solution and also give KUDOS.

       

      Cheers

      CheenuSing

      • Mikkelnaes's avatar
        Mikkelnaes
        Helper I

        Dear Anonymous, 

         

        Thank you, this is great. 

         

        The only challenge I have is that my last year based on your number. 7 has one drawback. 

         

        Net Sales LY test = CALCULATE([Net Sales test];FILTER(ALL('TestDWH Date');'TestDWH Date'[DWY] = MAX('TestDWH Date'[DWY])-1))

         

        When I have it on days, i.e. monday, tuesday etc, my "total" row in f.ex. a table only show value for sunday LY. Do I need any IF statement? 

         

        Thank you,

        Mikkel 

    • donsvensen's avatar
      donsvensen
      Skilled Sharer

      Hi

       

      A leep year still has 52 weeks so you will hit the same weekday.

       

      But in years with 53 weeks you have to decide whether you want to go 364 days (52*7) back or (53*7) - the easy way is always to use 364 (52*7) :-)

       

      br

      Erik

  • AlexChen's avatar
    AlexChen
    Microsoft Employee

    Hi,

     

    I want to know if your Tiempo[Fecha] is continuous date or not.

     

    If it’s continuous date you can create a measure like below:

     

    Measure yourMeasure = CALCULATE(SUM('Tiempo'[yourColumn]),SAMEPERIODLASTYEAR('Tiempo'[Fecha]))

     

    When you use filter on this measure, remember to remove date hierarchy, just use date.

     

    On the other way, if your Tiempo[Fecha] is not continuous date, there is not way to come to that result you want.

     

    Best Regards

    Alex

  • Hello!
    I can see that donsvensen & Vvelarde suggested easy approach and it seems to work in my report. Many thanks!
    My measure is 

    Sales LYSD = CALCULATE([BIG PROFIT],DATEADD('Calendar'[Date],-364,DAY))
  • vapid128's avatar
    vapid128
    Solution Specialist

    YOUR DATE LIKE THIS TABLE:

    create weeknum and year colnum

    and

    SUMMARIZE(weeknum,year,"total sales", sum(sales))
     
     

    last year = lookupvalue([total sales],[weeknum],[weeknum],[year],[year]-1)

    • vapid128's avatar
      vapid128
      Solution Specialist

      AND question about your weeknum.

       

      It is depends on how you want to read your week. 

      You week is from Monday to Sunday.

      if you feel the week number may be some problem.

      You can try make 01/01 - 01/07 of each year to week number 1, and  08 - 14 to week number 2.

      weeknum = int(([date] - DATE(year([date],1,1)+1)/7)