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

Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now

Reply
schoden
Post Partisan
Post Partisan

SWITCH function problem

Hi Community, 

 

I want to group customer based on years of transaction using SWITCH function.

For example customer A first transaction in 2010 , last transaction in 2020 , so years of transaction is 10.

Like wise for other customers. 

 

Date Diff(measure)

 

MAX('Table'[Year ])-MIN('Table'[Year ])

 

 

Loyalty(New Column)

 

Loyalty = SWITCH(TRUE(), 
[DateDiff]>=0 && [DateDiff]<=2, "BRONZE", 
[DateDiff]>=3 && [DateDiff]<=5, "SILVER",
[DateDiff]>=6 && [DateDiff]<=8, "GOLD")

 

 

But the column Loyalty when put in a slicer, it doesnt show all groups.

 

Please check the sample data.

 

https://netlinkgroup-my.sharepoint.com/:u:/g/personal/schoden_netlinkgroup_com_au/EXs9DuXKukVPvzVPZD...

 

 

Thank you in advance.

 

 

1 ACCEPTED SOLUTION
AllisonKennedy
Community Champion
Community Champion

You need to give it a row context to evaluate the DateDiff before you can do the switch, try doing the datediff as a column in the table: 

 

Years as Customer =
var customer = 'Table'[Customer ]
var firstyear = MINX(FILTER(ALL('Table'),'Table'[Customer ] = customer), 'Table'[Year ])
var lastyear = MAXX(FILTER(ALL('Table'),'Table'[Customer ] = customer), 'Table'[Year ])
RETURN lastyear-firstyear

 

 

Loyalty = SWITCH(TRUE(),
[Years as Customer]>=0 && [Years as Customer]<=2, "BRONZE",
[Years as Customer]>=3 && [Years as Customer]<=5, "SILVER",
[Years as Customer]>=6 && [Years as Customer]<=8, "GOLD")

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

View solution in original post

2 REPLIES 2
schoden
Post Partisan
Post Partisan

@AllisonKennedy   Thank you so much for the solution. 

 

 

AllisonKennedy
Community Champion
Community Champion

You need to give it a row context to evaluate the DateDiff before you can do the switch, try doing the datediff as a column in the table: 

 

Years as Customer =
var customer = 'Table'[Customer ]
var firstyear = MINX(FILTER(ALL('Table'),'Table'[Customer ] = customer), 'Table'[Year ])
var lastyear = MAXX(FILTER(ALL('Table'),'Table'[Customer ] = customer), 'Table'[Year ])
RETURN lastyear-firstyear

 

 

Loyalty = SWITCH(TRUE(),
[Years as Customer]>=0 && [Years as Customer]<=2, "BRONZE",
[Years as Customer]>=3 && [Years as Customer]<=5, "SILVER",
[Years as Customer]>=6 && [Years as Customer]<=8, "GOLD")

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Helpful resources

Announcements
Join our Fabric User Panel

Join our Fabric User Panel

Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.

February Power BI Update Carousel

Power BI Monthly Update - February 2026

Check out the February 2026 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.