cancel
Showing results for
Did you mean:

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Helper I

## filter problem in a calculate function - power bi desktop

Hello !

I don't understand why my measure in Power Bi for Desktop doesn't work : it is a calculate function with a filter function (as I saw here: https://msdn.microsoft.com/fr-fr/library/dn727121.aspx )

As you can see below, I would like to see the sum of amount only if the day corresponds to the last day in my database (here the last day is Wednesday, so day 3, and in the first table we can see that the amount for day 3 is 886K and not 6,76M which corresponds to the total of all amounts !) What is wrong in my formula?

sumjoursemaine = CALCULATE(SUM(Transactions[amount]);FILTER(ALL(Transactions);Transactions[joursemaine]=[jourdernierjour]))

Thanks !!

1 ACCEPTED SOLUTION
Super User

@jessicaf31 - I believe your problem is context with your jourdernierjour and/or DernierJour measure. In the context of your report, it shows 3, but in the row context when your sumjoursemaine measure is calculating, DernierJour always equals the MAX of that row and thus jourdernierjour always equals the joursemaine column.

Try changing your DernierJour measure to this:

`DernierJour = MAXX(ALL(Transactions),Transactions[Date])`

What this does is force DernierJour to always evaluate in the context of all of the rows, which means that DerierJour will always be the MAX date within the table, which means that jourdernierjour will always be the value of the weekday of the MAX date in the table, which *should* mean that you get the right answer in your report.

Become an expert!: Enterprise DNA
External Tools: MSHGQM
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
10 REPLIES 10
Super User

I believe that you are missing a "MAX" in your FILTER. I did this measure:

`Last Value = CALCULATE(SUM([Value]),FILTER(ALL(dates),[date]=MAX([Date])))`

My table had a Date column and Value column, this returned the value from the last date in the table.

I am not sure how day 3 (Wednesday) is the last date in your table but I assume that's just how your data model works.

Become an expert!: Enterprise DNA
External Tools: MSHGQM
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Helper I

Dear Greg,

right now I'm struggling with a FILTER formula in my calculation - COUNTROWS /FILTER combination to be precise, but it doesn't work for me..

I see that your solutions are always workable and I take a dare to ask:

could you advise maybe, what do I do wrong? 🙂

Katia

Helper I

Hi !

Thanks for your answer but I also have this measure, which works.

But the other is different : it is not the max of a date that I want to filter, but only the days which are equals to my last day.

My max(date)=wednesday 24 february, so it is day 3, so I want the sum(value) for all the days 3, and I have this total in my table at the left (886K).

This formula shows me the good results :

sumjoursemaine = CALCULATE(SUM(Transactions[amount]);FILTER(ALL(Transactions);Transactions[joursemaine]=3))

But I want the last parameter : 3, to be a variable ("jourdernierjour") :

When it is a variable it doesn't work :

Thanks again !

Jessica

Super User

@jessicaf31 - So, I am not super familiar with your data model, but here if you can replicate this, it should get you there.

```Sum of Last Value =
VAR LastDayofWeek = AVERAGEX(FILTER(ALL(dates),[date]=MAX([Date])),[DayofWeek])
RETURN (
CALCULATE(SUM([Value]),FILTER(ALL(dates),[DayofWeek]=LastDayofWeek)))```

So, first, figure out the MAX of the date and what the DayofWeek translates to. Assuming that all Wednesdays are "3", then taking the average will return 3 no matter how many 3's there are. My table has a Date column and a DayofWeek column calculated from the date using WEEKDAY().

Use that value to filter the rows in the table and sum the appropriate column ([Value])

Become an expert!: Enterprise DNA
External Tools: MSHGQM
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Helper I

@Greg_Deckler Thanks again for taking time to answer and help me.

I have done the same but it is still not working.

I will describe all the steps I have done and maybe you will detect my mistake

1) I've created a measure DernierJour = MAX(Transactions[Date])  (DernierJour means LastDay in french  )

-> it returns Wednesday 24 February 2016

2) I've created a measure jourdernierjour = WEEKDAY([DernierJour];2)  (for knowing the day of the LastDay)

-> it returns 3

3) I've created a column joursemaine = WEEKDAY(Transactions[Date];2) (for knowing each weekday for each date)

3) Now I want to know the total of amount only for the days which are wednesdays (LastDay) so I've created the measure :

sumjoursemaine = CALCULATE(SUM(Transactions[amount]);FILTER(ALL(Transactions);Transactions[joursemaine]=[jourdernierjour]))

-> it returns the total of all Transactions[amount] (6,8M) without filtering on the last day (I want 886K)

Whereas when I enter this formula :

sumjoursemaine = CALCULATE(SUM(Transactions[amount]);FILTER(ALL(Transactions);Transactions[joursemaine]=3))

It works...

Thanks again !!

Kudo Kingpin

OK, It is very hard to help you when I dont have to much information about your data, BUT, using the values you showed us I found a way to help you with your problem, I can send you the Power BI file if you want just give me your email. Let me know if this helps.

Best

Miguel Myers

Helper I

@Mykhael Thanks a lot for all these screenshots !! I will try to do the same 🙂

The measure suggested by @Greg_Deckler worked too

Jessica

Super User

@jessicaf31 - I believe your problem is context with your jourdernierjour and/or DernierJour measure. In the context of your report, it shows 3, but in the row context when your sumjoursemaine measure is calculating, DernierJour always equals the MAX of that row and thus jourdernierjour always equals the joursemaine column.

Try changing your DernierJour measure to this:

`DernierJour = MAXX(ALL(Transactions),Transactions[Date])`

What this does is force DernierJour to always evaluate in the context of all of the rows, which means that DerierJour will always be the MAX date within the table, which means that jourdernierjour will always be the value of the weekday of the MAX date in the table, which *should* mean that you get the right answer in your report.

Become an expert!: Enterprise DNA
External Tools: MSHGQM
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Helper I

@Greg_Deckler Thanks a lot it worked !!!

Kudo Kingpin

Hello Jessicaf31

Can you send me the file? I want to see it and check where the problem comes from? In that way I will help you ASAP on that problem you have.

Best

Mykhael

Announcements

#### Fabric certifications survey

Certification feedback opportunity for the community.

#### Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

#### Fabric Community Update - April 2024

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

Top Solution Authors
Top Kudoed Authors