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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

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
July 2025 community update carousel

Fabric Community Update - July 2025

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

July PBI25 Carousel

Power BI Monthly Update - July 2025

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