Forum Discussion
Slicer by columns name
Hello,
I have the following table:
| Sale_ID | Unity_Price | Tax_1 | Tax_2 | Tax_3 | Tax_4 |
| 1 | 10 | 5 | 15 | 8 | 4 |
| 2 | 40 | 30 | 25 | 8 | 7 |
To calculate the final price of a sale I created a calcualted column with the following formula:
Final_Price = Unity_Price + Tax_1 + Tex_2 - Tax_3 - Tax_4
Now I want to filter the final price by my columns names:
Slicer --
| Unity_Price | Tax_1 | Tax_2 | Tax_3 | Tax_4 |
Table Visual --
| Sale_ID | Final_Price |
| 1 | 18 |
| 2 | 80 |
If I click on Unity_Price the it must shows this:
Slicer --
| Unity_Price | Tax_1 | Tax_2 | Tax_3 | Tax_4 |
| Sale_ID | Final_Price |
| 1 | 10 |
| 2 | 40 |
Or if I multiselect items, all taxes for example, it must shows this:
Slicer --
| Unity_Price | Tax_1 | Tax_2 | Tax_3 | Tax_4 |
| Sale_ID | Final_Price |
| 1 | 8 |
| 2 | 40 |
How can I do that?
Thanks.
Hi Anonymous,
I would solve this using a measure do the following:
- Create a table (do not related this with any other tables with the following structure:
- Name Slicer - Selection: Unity_Price, Tax_1, Tax_2, Tax_3, Tax_4
- Add the following measure to your data table:
Final_Price = VAR Unity_price = IF ( CONTAINS ( Slicer, Slicer[Selection], "Unity_Price" ) = TRUE (), SUM ( Sales[Unity_Price] ), 0 ) VAR Tax1 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_1" ) = TRUE (), SUM ( Sales[Tax_1] ), 0 ) VAR Tax2 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_2" ) = TRUE (), SUM ( Sales[Tax_2] ), 0 ) VAR Tax3 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_3" ) = TRUE (), SUM ( Sales[Tax_3] ), 0 ) VAR Tax4 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_4" ) = TRUE (), SUM ( Sales[Tax_4] ), 0 ) RETURN Unity_price + Tax1 + Tax2 - Tax3 - Tax4- Now just add the valuies from the table you created to a slicer and your measure to the table should give the expected result:
Regards,
MFelix
- Create a table (do not related this with any other tables with the following structure:
32 Replies
- MFelix
Super User
Hi Anonymous,
I would solve this using a measure do the following:
- Create a table (do not related this with any other tables with the following structure:
- Name Slicer - Selection: Unity_Price, Tax_1, Tax_2, Tax_3, Tax_4
- Add the following measure to your data table:
Final_Price = VAR Unity_price = IF ( CONTAINS ( Slicer, Slicer[Selection], "Unity_Price" ) = TRUE (), SUM ( Sales[Unity_Price] ), 0 ) VAR Tax1 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_1" ) = TRUE (), SUM ( Sales[Tax_1] ), 0 ) VAR Tax2 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_2" ) = TRUE (), SUM ( Sales[Tax_2] ), 0 ) VAR Tax3 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_3" ) = TRUE (), SUM ( Sales[Tax_3] ), 0 ) VAR Tax4 = IF ( CONTAINS ( Slicer, Slicer[Selection], "Tax_4" ) = TRUE (), SUM ( Sales[Tax_4] ), 0 ) RETURN Unity_price + Tax1 + Tax2 - Tax3 - Tax4- Now just add the valuies from the table you created to a slicer and your measure to the table should give the expected result:
Regards,
MFelix
- AnonymousNot applicable
Thank you, MFelix, it solved my problem.
- AnonymousNot applicable
Hey Meflix,
I've almost similar issue but I'm not able to resolve it the way you mentioned.
Following are the steps
- Slicer with four different column names
- Select a column name
- Divide the values in column with values in another column present in data
- Use this measure on the graph
I tried following the code you mentioned but instead of Sum(Sales[VAR]) I want Divide(VAR, Column Name)
The code is returning a lot of errors
ETA_Quality =
VAR On_Time =
IF (
CONTAINS ( Slicer, Slicer[V_Selection], "On Time" ) = TRUE (),
Divide( 'Volvo ETA'[On-Time], 'Volvo ETA'[Total], Blank()),
0
)
VAR Early =
IF (
CONTAINS ( Slicer, Slicer[V_Selection], "Early" ) = TRUE (),
Divide( 'Volvo ETA'[Early], 'Volvo ETA'[Total], Blank()),
0
)
VAR Late =
IF (
CONTAINS ( Slicer, Slicer[V_Selection], "Late" ) = TRUE (),
Divide( 'Volvo ETA'[Late], 'Volvo ETA'[Total], Blank()),
0
)
VAR Cancelled =
IF (
CONTAINS ( Slicer, Slicer[V_Selection], "Cancelled" ) = TRUE (),
CALCULATE( 'Volvo ETA'[Cancelled] 'Volvo ETA'[Total], Blank()),
0
) Return Cancelled+Early+Late+On_TimeAlso instead of last Return Cancelled+Early+Late+On_Time, I just want to Return all of them which will eventually display the VAR value based on Column Selection.
Thanks!
- MFelix
Super User
Hi Anonymous,
When you use measure they are calculated based on context so you cannot make the calculations based on a single value from a colum, meaning that when you have
VAR On_Time = IF ( CONTAINS ( Slicer, Slicer[V_Selection], "On Time" ) = TRUE (), Divide( 'Volvo ETA'[On-Time], 'Volvo ETA'[Total], Blank()), 0 )
You should have something like this:
VAR On_Time = IF ( CONTAINS ( Slicer, Slicer[V_Selection], "On Time" ) = TRUE (), DIVIDE ( SUM ( 'Volvo ETA'[On-Time] ), SUM ( 'Volvo ETA'[Total] ), BLANK () ), 0 )In this way you are aggregating the values, however be carefull because this can sometimes based on context not return the expected result.
Can you please share some sample data and show the expected result in that way I can adjust the formula better.
Regards,
MFelix
- AnonymousNot applicable
Hi MFelix I have similar issue and i want to create a slicer where column name will be slicer and when i click on slicer it should change the data in teh donut.
Please see the screenshot below where is have shown my whole data. I am not sure where to upload PBIx file and attaching screeshot here.. Here is the table:
BadgeID Job Title Country FirstName LastName BoothNumber Booth Name Duration Seconds 123 Engineer USA abc Woods 27 Booth 1 600 456 Engineer Germany def Woods 27 Booth 1 480 789 Engineer India ghi Sa 27 Booth 1 1320 532 Chief Information Officer USA jkl Va 14 Booth 2 240 1182304 Operations Manager USA Chet Manchester 21 Booth 3 980 1182523 Account Manager USA Travis Fulton 21 Booth 3 1080 1182657 Senior Engineer India Luisa Sangines 21 Booth 3 1680 1182879 Engineer USA Mark Skallet 21 Booth 3 480 1149995 Analyst USA Megan Hemmila 37 Booth 4 1200 1149995 Analyst India Megan Hemmila 37 Booth 4 2280 1150180 Architect|Partner India Hoa Tram 37 Booth 4 1200 1150180 Architect|Partner Germany Hoa Tram 37 Booth 4 480 117 Senior Engineer USA pqr Pa 14 Booth 2 360 - MFelix
Super User
Hi Anonymous,
You can do this making of 3 options
- Dynamic Hierarchie
- Unpivot Columns
- Bookmarks
- Dynamic Hierarchie
Using this post I adapted the situation and made the following
- Created a new table with the following code:
Country Job Hierarchy = UNION ( SELECTCOLUMNS ( 'Hierarchy'; "Badge ID"; 'Hierarchy'[BadgeID]; "Hierarchy Name"; 'Hierarchy'[Job Title]; "Level"; "Job Title"; "LevelNumber"; 1 ); SELECTCOLUMNS ( 'Hierarchy'; "Badge ID"; 'Hierarchy'[BadgeID]; "Hierarchy Name"; 'Hierarchy'[Country]; "Level"; "Country"; "LevelNumber"; 2 ) )j
- Make a relationship between this table and your main table by BadgeID: be aware that this will create a many to many relationship. If you don't have the latest version of PBI you need to make a dimension table for Uniques BadgeID and then relate this with the two other table
- Make this relationship with a cross filter in both directions
- Add the Column Hierarchy name to your legend and the count of what ever field you want from the main table.
2. Unpivot Column (link to unpivot columns)
- Query Editor Select both country and Job title column
- Transform Unpivot
- Get 2 columns atribute and value
- Add Attribute to slicer and value to legend in chart
3. Bookmarks (link to bookmarks documentation)
- Create two buttons Job title Country
- Create two donut charts one with job title and the cother with country on legend
- Hide the Job Title chart and create the bookmark named country and make it an action of the Country button and vice-versa
- Then just click on the buttons (on desktop version you have to use CTRL + CLICK)
See below the screenshot and the PBIX file with all the options above.
Regards,
MFelix
- Create a table (do not related this with any other tables with the following structure:
- neenae2860Frequent Visitor
MFelix Could you please help I wanted to create slicer from column name. Please see my data table.
Id Age Boy Girl Adult Child 1 25 TRUE FALSE TRUE FALSE 2 30 FALSE TRUE TRUE FALSE 3 12 TRUE FALSE FALSE TRUE This is my data table. I wanted to create slicer which have Boy,Girl,Adult and Child as filter.
Consider to show only true condition and ignore false condition.
For example once I select Boy. This should show up.
Id Age Boy Girl Adult Child 1 25 TRUE FALSE TRUE FALSE 3 12 TRUE FALSE FALSE TRUE Another example: If I select Adult this should show up.
Id Age Boy Girl Adult Child 1 25 TRUE FALSE TRUE FALSE 2 30 FALSE TRUE TRUE FALSE Could you please help?
Thank you
- MFelix
Super User
hI neenae2860 ,
Create a new table with the values you want to filter:
I call this table Slicer.
Now add the following measure:
Filter measure = SWITCH(SELECTEDVALUE(Slicer[Cat]), "Adult", COUNTROWS(FILTER('Table', 'Table'[Adult] = TRUE())), "Boy", COUNTROWS(FILTER('Table', 'Table'[Boy] = TRUE())), "Girl", COUNTROWS(FILTER('Table', 'Table'[Girl] = TRUE())), "Child", COUNTROWS(FILTER('Table', 'Table'[Child] = TRUE())) )Add this measure has a filter on the visualization you need and set it to is not blank.
- neenae2860Frequent Visitor
MFelix Thank you so much. This really helped me.
- SmitaaNew Member
Hi MFelix ,
I want to create a slicer of multiple columns based on another slicer having parameters.
for example raw data is like this:
Event Student ID Maths teacher Science Teacher English Teacher Exhibition 1 Ravi Chandra Spriha Das Vandana p Exhibition 2 RK Das Mamta Chobey Exhibition 3 Rajesh Ranjan Rajesh Ranjan So first slicer should have values like Maths, Science and English:
Slicer 1 Maths Science English And second slicer should filter based on Slicer 1 for example if Maths is selected in slicer 1 , then slicer 2 should have following values:
Slicer 2 Ravi Chandra RK Das And table should show this:
Event Student ID Maths teacher Exhibition 1 Ravi Chandra Exhibition 2 RK Das I tried with field parameters but it cant be used in report server
Please help me with this.
- MFelix
Super User
Hi Smitaa
For this you can use the field parameter option:
https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters
For the first slicer you select the values from this parameters and for the slicers with the values you use the new functionality:
- AnonymousNot applicable
I saw your post and wonder if you could help me as well 😁
I am also trying to create a category slicer based on the Column name, each category(product) has 3 sub-columns, and they are the same product.
Like, Volumn, MS, Rank, all same 3 columns for each product AAA, BBB, CCC.
I want to create a slicer to filter on the product name AAA, BBB, CCC, so that each time when the user click on each product, together with other row slicer (like period in this example), a different table will appear.
Thanks in advance!!!
Customer Name Period AAA-Volumn AAA-MS AAA-Rank BBB-Volumn BBB-MS BBB-Rank CCC-Volumn CCC-MS CCC-Rank Smith Month 2 10% 3 1 2% 2 4 2% 2 John Month 3 20% 2 2 3% 3 2 3% 2 Albert Month 4 30% 1 3 4% 1 3 30% 3 April Month 5 10% 3 4 5% 2 2 23% 3 Smith QTR 4 30% 3 3 2% 1 1 5% 1 John QTR 5 20% 2 2 3% 3 2 20% 3 Albert QTR 1 20% 1 1 1% 2 3 34% 2 April QTR 4 10% 3 1 2% 4 4 5% 4 Smith YTD 5 10% 3 5 5% 2 2 2% 3 John YTD 7 20% 2 2 4% 1 3 20% 1 Albert YTD 2 30% 1 3 5% 3 2 3% 2 April YTD 2 10% 3 1 3% 1 1 10% 3 Category Slicer Customer Name AAA-Volumn AAA-MS AAA-Rank AAA Smith 2 10% 3 BBB John 3 20% 2 CCC Albert 4 30% 1 April 5 10% 3 Period Slicer Month