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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Anonymous
Not applicable

HASONEVALUE() not working inside a Table definition formula

Task:

To show top 5 products out of 100s,  user can select a period with a slicer.

 

So I create a table using the following DAX formula

 

TablaTop = filter(

                   SUMMARIZE(Historia,Historia[Marca],Historia[Tema],Historia[Año],"Dato",SUM(Historia[Dato])),

                   Historia[Tema]="PDM"

                   &&

                   Historia[Año]=IF(HASONEVALUE('Años'[Año]),VALUES('Años'[Año]),MAX('Años'[Año])))

 

There is, additionaly, a calculated column to distinguish the top 5 from the others

 

Top = IF(RANKX(TablaTop,TablaTop[Dato],,DESC,Skip)<=5,TablaTop[Marca],"Otros")

 

Tables related:

Historia is read from excel. Has several years of data.

Años is a one column table that is derived from Historia from Query editor.

 

let
    Source = Historia,
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Año"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Sorted Rows" = Table.Sort(#"Removed Duplicates",{{"Año", Order.Ascending}})
in
    #"Sorted Rows"

 

 

 

If I put IF(HASONEVALUE('Años'[Año]),VALUES('Años'[Año]),MAX('Años'[Año]))) in a measure and put the result in a card visualization it shows the correct result the measure reacts to changes from a slicer with 'Años'[Año] in it. So it works.

 

The issue:

 

Table TablaTop does not refreshes at all to slicer selection.

 

If I replace IF(HASONEVALUE('Años'[Año]),VALUES('Años'[Año]),MAX('Años'[Año])))  in TablaTop definition with a valid year number the results are perfect.

 i.e.

TablaTop = filter(

                   SUMMARIZE(Historia,Historia[Marca],Historia[Tema],Historia[Año],"Dato",SUM(Historia[Dato])),

                   Historia[Tema]="PDM" &&

                   Historia[Año]=2016)

 

This works

 

 

Need help to resolve this issue. Any alternative formula is accepted.

 

Thank you in advance

1 ACCEPTED SOLUTION

@Anonymous

 

hi, please try this

 

Change your table Top to: 

 

TablaTopVV=
filter(SUMMARIZE(Historia;Historia[Marca];Historia[Tema];Historia[Año];"Dato";SUM(Historia[Dato]));Historia[Tema]="PDM")

 

Create a calculated Column:

 

TOP = if(RANKX(FILTER(TablaTopVV,TablaTopVV[Año]=EARLIER(TablaTopVV[Año])),TablaTopVV[Dato])<=5,TablaTopVV[Marca],"OTROS")

 

 

A new Measure:

 

ElDato = CALCULATE(SUM(TablaTopVV[Dato]),FILTER(TablaTopVV,TablaTopVV[Año]=[Año seleccionado]))

 

 

Finally in Visual Chart:

 

Rank.png

 

Ready!!

 

 

 

 




Lima - Peru

View solution in original post

9 REPLIES 9

Just curious, why not try adding a filter (page or visual level) and setting it for TopN?  Then your table will show the top 5 and, provided the relationship is established between Years and the fact table, it should slice it appropriately.

Anonymous
Not applicable

Thank you.

 

The issue is that it is requiered to include the rest of the data as "Others", so for example, calculating % over Total will include the Top 5 and the rest of the data as well.

 

Formulas work well when I hard coded the month number, just need to be dynamic. Data is read on a monthly basis and it is not nice to change hard coded formulas every month. Easy to forget!!!.

 

Pie 2.PNG

 

 

 

So essentially your question is how to pass in the slicer value for time period to your calculated table instead of hard coding it?

Can you share some sample data?
Anonymous
Not applicable

Hi, I posted a reply with a link to a pbix file to doanload.

 

Regards

@Anonymous

 

hi, please try this

 

Change your table Top to: 

 

TablaTopVV=
filter(SUMMARIZE(Historia;Historia[Marca];Historia[Tema];Historia[Año];"Dato";SUM(Historia[Dato]));Historia[Tema]="PDM")

 

Create a calculated Column:

 

TOP = if(RANKX(FILTER(TablaTopVV,TablaTopVV[Año]=EARLIER(TablaTopVV[Año])),TablaTopVV[Dato])<=5,TablaTopVV[Marca],"OTROS")

 

 

A new Measure:

 

ElDato = CALCULATE(SUM(TablaTopVV[Dato]),FILTER(TablaTopVV,TablaTopVV[Año]=[Año seleccionado]))

 

 

Finally in Visual Chart:

 

Rank.png

 

Ready!!

 

 

 

 




Lima - Peru
Anonymous
Not applicable

Great!!!

 

 @VvelardeThank you very much!!!

 

Could you please explain the logic of the solution.

 

Regards

Anonymous
Not applicable

Exactly,

 

I'll will work a little to strip sensitive data and create a sample in order to upload it.

 

Thank you.

Hi @Anonymous,

Have you resolved your issue? Where is your sample data? 

In addition, you can create a measure to show the value in slicer.

selected value=CALCULATE(Max(Table[data]),ALLSELECTED(Table))


Best Regards,

Angelia

Anonymous
Not applicable

Hi,

 

I have not resolved it yet.

 

I am attaching a link to download a stripped down page, isolating the issue.

 

Your help is greatly appreciated.

 

Regards

 

https://1drv.ms/u/s!AvtcxjkBouSbqk6Wg_E82PODDz3U

 

 

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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