Forum Discussion

baijumohan1990's avatar
4 years ago
Solved

Dynamic line chart axis based on the date selection

Hi ,

 

I am creating a simple sales dashboard with last week & current week sales. The requirement is to have the last week sales and current week sales in seperate line charts. The axis of the last week sales line chart should be the last week start date & end date of the selected date range.  I created following measures 

Startdate = CALCULATE ( MIN ( 'Date'[Date] ), ALLSELECTED ( 'Date'[Date] ) )
Enddate= CALCULATE ( MAX( 'Date'[Date] ), ALLSELECTED ( 'Date'[Date] ) )
LastWkStart = [Startdate] - 7
LastWkEnd =   [Enddate]  - 7
LastWkSales = CALCULATE(sum('Table'[Sales]),DATESBETWEEN('Date'[Date],[LastWkStart],[LastWkEnd]))
 
For the last week date range, i created a calender table.
 
DateLw = CALENDAR([LastWkStart],'Table'[LastWkEnd])
 
Data model is looks like below. 
 

 

I created a line chart with DateLw as X axis & LastWkSales  as Y axis.  

 

 This chart is showing Selected Date range as the X axis. The expected output is to show dates between the Last week start & End date as the X axis. For eg :  If the daterange selected is between Jan 9th & Jan 15th , the chart should show the X axis with dates between Jan 2nd & jan 8th 

 
  • Hi baijumohan1990 ,

    According to your description, you want to create a dynamic DateLw table changed by the Date slicer, but a calculated table/column can't affected by slicers, it's by design. You can go to the Data view of the DateLw table to see, it always stays the same no matter how the slicer changes.

    Here's my solution. 

    1. Modify the DateLw table like below. Don't make relationship between DateLw table and other tables.

    DateLw = CALENDARAUTO()

    2. Modify the LastWkSales measure:

    LastWkSales =
    IF (
        MAX ( 'DateLw'[Date] ) >= [LastWkStart]
            && MAX ( 'DateLw'[Date] ) <= [LastWkEnd],
        CALCULATE (
            SUM ( 'Table'[Sales] ),
            FILTER ( ALL ( 'Table' ), 'Table'[Date] = MAX ( 'DateLw'[Date] ) )
        ),
        BLANK ()
    )
    

    Get the correct result.

    I attach my sample below for reference.

     

    Best Regards,
    Community Support Team _ kalyj

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

4 Replies

  • baijumohan1990 , In case you need display a range different then what you selected. You need an independent date table

    Need of an Independent Date Table:https://www.youtube.com/watch?v=44fGGmg9fHI

     

     

    //Date1 is independent Date table, Date is joined with Table 
    new measure =
    var _max =maxx(allseleceted(date1),date1[date])
    var _min =maxx(allseleceted(date1),date1[date])
    var datediff1 = datediff(_min,_max,day)+1
    var _maxX = _max-datediff1
    var _minX = _min -datediff1
    return
    calculate( sum(Table[Value]), filter('Date', 'Date'[Date] >=_minX && 'Date'[Date] <=_maxX))

  • hi amitchandak    

    I tried your solution as suggested 

    1. Created an indepdendant date table 

    Date_LW = CALENDAR("2021-01-01","2022-12-31")
    2. Data model looks like below now
     
     3. Created mesaure LWSales .I changed Maxx to Minx for variable var _min . Thought it was a typo error. 
    LWSales =
    var _max =maxx(ALLSELECTED(Date_LW),Date_LW[Date])
    var _min =MAXX(ALLSELECTED(Date_LW),Date_LW[Date])
    var datediff1 = datediff(_min,_max,day)+1
    var _maxX = _max-datediff1
    var _minX = _min -datediff1
    return
    calculate( sum('Table'[Sales]), filter('Date', 'Date'[Date] >=_minX && 'Date'[Date] <=_maxX))
     
    3. Created the chart as below. But its not giving any output.
     

     

     
     
  • Hi baijumohan1990 ,

    According to your description, you want to create a dynamic DateLw table changed by the Date slicer, but a calculated table/column can't affected by slicers, it's by design. You can go to the Data view of the DateLw table to see, it always stays the same no matter how the slicer changes.

    Here's my solution. 

    1. Modify the DateLw table like below. Don't make relationship between DateLw table and other tables.

    DateLw = CALENDARAUTO()

    2. Modify the LastWkSales measure:

    LastWkSales =
    IF (
        MAX ( 'DateLw'[Date] ) >= [LastWkStart]
            && MAX ( 'DateLw'[Date] ) <= [LastWkEnd],
        CALCULATE (
            SUM ( 'Table'[Sales] ),
            FILTER ( ALL ( 'Table' ), 'Table'[Date] = MAX ( 'DateLw'[Date] ) )
        ),
        BLANK ()
    )
    

    Get the correct result.

    I attach my sample below for reference.

     

    Best Regards,
    Community Support Team _ kalyj

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