Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Oodi
Frequent Visitor

EOWEEK in place of EOMONTH for Interval

Hello, 

 

Inspired from Gustaw Dudeks custom interval chart 
(Goodly video (176) Make this Creative & Insightful Line Chart in Power BI 📈 - YouTube)
LineChart.png

I have a dataset which has only four months of data and would like to use weekly interval instead of monthly. 
The DAX uses EOMONTH function for setting the correct points.

As there is no direct function for EOWEEK, what alternatives could there be to convert the below DAX to weekly? 

 

 

 

Monthly Interval Points =
var vCurrentMonth = EOMONTH(MAX(DimIntervalCalendar[Date]), 0)

var vInterval = [Interval Range]

var vIntervalLenght = DATESBETWEEN(DimIntervalCalendar[Date], EOMONTH(vCurrentMonth, - vInterval) +1, vCurrentMonth)

var vIntegratedCalendars = CALCULATETABLE(DimCalendar, TREATAS(vIntervalLenght, DimCalendar[Date]))

var vTop = DATESBETWEEN(DimCalendar[Date], EOMONTH(vCurrentMonth, - vInterval) + 1, EOMONTH(EOMONTH(vCurrentMonth, - vInterval) + 1, 0))

var vBottom = DATESBETWEEN(DimCalendar[Date], EOMONTH(vCurrentMonth, - 1) + 1, vCurrentMonth)

var vIntegrate = UNION(vTop, vBottom)

var vMaxExpression = CALCULATE(MAXX(ALLSELECTED(DimCalendar[MMM]), [Expression Stage]), vIntegratedCalendars)

var vTotalExpression = CALCULATE([Expression Stage], vIntegrate, KEEPFILTERS(DimCalendar))

return
IF(vTotalExpression, vMaxExpression * 1.3)

 

 

 

1 ACCEPTED SOLUTION
Oodi
Frequent Visitor

Was able to convert the Line chart to use weeks instead of months with the following DAX:
Screenshot 2024-05-26 153944.png

 

Interval Weekly Points = 

VAR _MaxWeek =
MAX(DimIntervalCalendar[EndofWeek])

VAR _MaxMonth =
EOMONTH(MAX(DimIntervalCalendar[Date]), 0)

VAR _Interval = 
[Interval Range]

VAR _Calendar = 
DATESBETWEEN(DimIntervalCalendar[Date], _MaxWeek - (_Interval * 7) + 1, _MaxWeek)

VAR _JoinedCalendar =
CALCULATETABLE(DimCalendar, TREATAS(_Calendar, DimCalendar[Date]))

VAR _Top =
DATESBETWEEN(DimCalendar[Date], _MaxWeek - (_Interval * 7) + 1, _MaxWeek -(_Interval * 7) + 7)

VAR _Bottom =
DATESBETWEEN(DimCalendar[Date], _MaxWeek - (1 * 7) + 1, _MaxWeek)

VAR _Joined =
UNION(_Top, _Bottom)

VAR _MaxExpression =
CALCULATE(MAXX(ALLSELECTED(DimCalendar[WeekofYear]), [Expression]), _JoinedCalendar)

VAR _TotalExpression =
CALCULATE([Expression], _Joined, KEEPFILTERS(DimCalendar))

RETURN 
IF(_TotalExpression, _MaxExpression * 1.3)

 

 

The interval can stay the same: 

Interval Range = 
GENERATESERIES(1 , 20, 1)

but month-year slicer has to be replaced with week. 

DimIntervalCalendar = 
var vCal = CALENDAR(MIN(Railway[DateofPurchase]), MAX(Railway[DateofJourney]))
var vTable =
ADDCOLUMNS(
    vCal,
    "Sort", YEAR([Date]) & UNICHAR(MONTH([Date]) + 64),
    "Year Month", FORMAT([Date], "mmm-yy"),
    "Year", FORMAT([Date], "yyyy"),
    "Month", FORMAT([Date], "mmm"),
    "Month Week", FORMAT([Date], "ww-mmm"),
    "Week", FORMAT([Date], "ww"))

    return
     vTable

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

View solution in original post

3 REPLIES 3
Oodi
Frequent Visitor

Was able to convert the Line chart to use weeks instead of months with the following DAX:
Screenshot 2024-05-26 153944.png

 

Interval Weekly Points = 

VAR _MaxWeek =
MAX(DimIntervalCalendar[EndofWeek])

VAR _MaxMonth =
EOMONTH(MAX(DimIntervalCalendar[Date]), 0)

VAR _Interval = 
[Interval Range]

VAR _Calendar = 
DATESBETWEEN(DimIntervalCalendar[Date], _MaxWeek - (_Interval * 7) + 1, _MaxWeek)

VAR _JoinedCalendar =
CALCULATETABLE(DimCalendar, TREATAS(_Calendar, DimCalendar[Date]))

VAR _Top =
DATESBETWEEN(DimCalendar[Date], _MaxWeek - (_Interval * 7) + 1, _MaxWeek -(_Interval * 7) + 7)

VAR _Bottom =
DATESBETWEEN(DimCalendar[Date], _MaxWeek - (1 * 7) + 1, _MaxWeek)

VAR _Joined =
UNION(_Top, _Bottom)

VAR _MaxExpression =
CALCULATE(MAXX(ALLSELECTED(DimCalendar[WeekofYear]), [Expression]), _JoinedCalendar)

VAR _TotalExpression =
CALCULATE([Expression], _Joined, KEEPFILTERS(DimCalendar))

RETURN 
IF(_TotalExpression, _MaxExpression * 1.3)

 

 

The interval can stay the same: 

Interval Range = 
GENERATESERIES(1 , 20, 1)

but month-year slicer has to be replaced with week. 

DimIntervalCalendar = 
var vCal = CALENDAR(MIN(Railway[DateofPurchase]), MAX(Railway[DateofJourney]))
var vTable =
ADDCOLUMNS(
    vCal,
    "Sort", YEAR([Date]) & UNICHAR(MONTH([Date]) + 64),
    "Year Month", FORMAT([Date], "mmm-yy"),
    "Year", FORMAT([Date], "yyyy"),
    "Month", FORMAT([Date], "mmm"),
    "Month Week", FORMAT([Date], "ww-mmm"),
    "Week", FORMAT([Date], "ww"))

    return
     vTable

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lbendlin
Super User
Super User

Weeks and months are incompatible. Make sure your users understand the difference.

some_bih
Super User
Super User

Hi @Oodi try to use WEEKNUM function, check link for example





Did I answer your question? Mark my post as a solution!

Proud to be a Super User!






Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.