Ignore Selections "DAX Function ALL" not working - powerbi

I got a situation here, i have a measure for "Total Sales" with following expression
Total Sales = CALCULATE(SUM(Sale[total]), ALL(Customer))
I have a visualization in which i am displaying product-sales by customer.
If i make a customer-name selection in that visualization then this measure (mentioned above) changes its value. Why?
Both scenarios are shown in following screenshot (measure-value without customer-name selection & measure value with customer-name selection:
Data-Model Screenshot:

I changed the formula to ignore both tables
Total Sales = CALCULATE(SUM(Sale[total]), ALL(Customer), ALL(Product))

Related

issue in displaying visuals after creating measure in percentage

I am new to Power BI. I created two measures with two fields to be represented in percentage in chart. So I tired to pull those measures in the chart but it showed error. The tow measure that were created are:
`IgA% = CALCULATE(Count('Ig_Ops Referrals'[IgA]), FILTER('Ig_Ops Referrals,'Ig_Ops Referrals [Site]))
IgI% = CALCULATE(Count('Ig_Ops Referrals'[IgI]), FILTER('Ig_Ops Referrals','Ig_Ops Referrals'[Site_Lng_Des]))
`
It gives the error:
I am trying to represent two fields in percentage to created two measures for it and tried to use the chart visual, but it is not working?
You should use same data types columns, check if your column is both TEXT type
FILTER usage is wrong.
The syntax is - FILTER ( <Table>, <FilterExpression> ), where <FilterExpression> should evaluate to True/False.
You are asking DAX to interpret the text value of Ig_Ops Referrals [Site] as True/False. Those are not the same datatypes. Hence - the very clean and instructive error message.

Conditionally format a table based on average of dataset, but adhering to slicer selections

I have a simple CSV data set such as this.
ID,MainCategory,SubCategory,Type,Value
1,E,E1,Demo,5
2,N,N3,Install,2
3,E,E1,Demo,4
4,E,E2,Install,7
5,D,D1,Install,3
6,S,S2,PM,4
7,N,N2,Install,7
8,N,N2,Demo,1
9,E,E2,Demo,2
10,D,D2,Install,6
11,D,D3,PM,4
12,S,S1,PM,8
13,N,N1,Install,5
14,S,S3,Install,8
15,S,S1,Demo,9
16,E,E3,Demo,5
17,N,N2,Install,3
18,E,E2,PM,6
19,D,D2,PM,6
20,N,N3,Demo,6
21,S,S2,Demo,7
22,E,E3,Install,2
23,S,S1,Install,4
24,S,S2,PM,8
25,D,D1,Install,5
In my Power BI Desktop, I'd like to load this into a table, and conditionally format the Value column based on whether the value in each row is greater than or less than the average for the currently selected data set.
For instance, the average of Value considering the entire table is 5.08, so if there are no filters applied (as in, all my slicers are set to select nothing), I'd like all rows whose Value is 6 or more to be background colored in one color, and the others in another color. For this, I created two measures like so:
AvgOfVal = DIVIDE( SUM(G2G[Value]), COUNTA(G2G[ID]) )
BGColor = IF(SUM(G2G[Value]) > [AvgOfVal], "Light Pink", "Light Blue")
Then I tried to apply the BGColor measure for conditionally formatting the background, but this doesn't work as expected, and instead produces the result below.
I realize that this is due to the fact that the measure is calculated per row, so when conditional formatting is applied, as seen in the AvgOfVal column in the table, it calculates average per row instead of for the entire data set. How can I calculate a measure that takes into account the entire data set (considering slicers), and do the conditional formatting as I need.
Please keep in mind that if a user were to select a slicer filter (say, MainCategory = D), then I want the conditional formatting to reflect this. So in this case, given that AvgOfVal = 4.80 for MainCategory = D entries, I'd like all rows whose Value >= 5 to be in one color, and others in another color.
I realize that this is due to the fact that the measure is calculated per row
Yes. The key is understanding how that happens. When the measure is calculated a "context transition" happens and the current row is added to the filter context.
So what you want is a calculation that removes the row filter that was added in the context transition. So you need ALLSELECTED(), which does precisely that. eg
AvgOvVAl = CALCULATE( AVERAGE('data'[Value]), ALLSELECTED() )
Removing the "innermost" filter which in this case is the filter on the row, but leaving all other filters, ie filters added on the report, page, visual, or filters coming from interactions with other visuals like slicers.

Power BI - Conditionally format top/bottom cumulative percentage?

Looked around a long time now, and cannot find a way to conditionally format the values in a table, treemap, bar chart etc. if they are within the say, top 80% of all the values.
So let's say I have a table with sales and profit. Then I have a treemap showing the profit by city. I manage to get the percentage of total with:
% of total profit = SUM(Orders[Profit])/CALCULATE(SUM(Orders[Profit]),ALL(Orders))
..so that is no issue. But how would I go about formatting the cities that are within the top 80% of all profit? Any suggestion on approach?
Example:
Say I have the treemap below. The first four categories would fall within the top 80% of the total. Cumulatively it would be: 35%, 55%, 70% and 85%. So my need is to color only these in a specific way (and preferably any that falls outside of that range, in another color).
I take it that finding the logic to do this, likely though a measure somehow to base the formatting on, will then also be something that would be applicable to bar charts etc. (more traditional pareto).
OK, here is the solution. I will provide a traditional pareto and an adapted one according to your requirements. My data looks like this.
Create 3 measure as follows:
1
Profit Measure = SUM('Table'[Profit])
2
Pareto =
VAR amount = [Profit Measure]
VAR total = CALCULATE( [Profit Measure], REMOVEFILTERS('Table'))
VAR result = CALCULATE([Profit Measure], FILTER(ALL('Table'),[Profit Measure]>= amount))/total
RETURN result
3
Threshold =
VAR pareto = [Pareto]
VAR previousPareto = MAXX( FILTER( SUMMARIZE(ALL('Table'),'Table'[Order],'Table'[Profit],"p", [Pareto]), [p] < pareto), [Pareto])
RETURN IF( ISBLANK( previousPareto), pareto, previousPareto)
Create a table visual so you can see what is happening. In the table below, the Pareto measure is creating a cumulative percentage based on profit. If you were to use this, you can see that only A and B are cumulatively the only values actually < 80% and so they would be the only ones coloured. What you are asking for is slightly different which is what the threshold measure is showing. This outputs the previous pareto (or current if there is no previous).
In the tree map, I have created the conditional formatting as follows for standard pareto.
And as follows for the adapted pareto.
Click the fx icon under colors.
Select Rules for Format style, your measure as the field and then set up a rule (in your case, >= 0.2 for top 80%).

Creating Visual on Line and Clustered Column Chart

I have line and clustered column chart (shown on "Graph" image) and I want to add a visual like drawn on "Graph" image
Clustered Columns : Planned Labor Data and Actual Labor Data
Lines : Cumulative Planned Labor data and Cumulative Labor Data
I keep data for both planned (P_Planned_Labor) and actual (Z_Labor) in 2 column table (date and data). Also I have a Date table (Z_Tarih) and it has only dates which has relation with planned and actual tables.
Dax Measures:
[Toplam Bugdeted] = Sum of Planned Bugdet
Columns;
Labor_Earned % İlerleme = DIVIDE(sum(Z_Labor[Değer]),[Toplam Budgeted],0) "percentage of actual labor of this week)
Labor_Plan % İlerleme = DIVIDE(SUM(P_Planned_Labor[Değer]),[Toplam Budgeted],0) "percentage of planned labor of this week)
Lines;
Labor_Earned Küm. % İlerleme = DIVIDE(CALCULATE(SUM(Z_Labor[Değer]),FILTER(ALL(Z_Tarih),Z_Tarih[Tarih]<=MAX(Z_Labor[Tarih]))),[Toplam Budgeted],0) "percentage of all actual from begining"
Labor_Plan Küm. % İlerleme = DIVIDE(CALCULATE(SUM(P_Planned_Labor[Değer]),FILTER(ALL(Z_Tarih),Z_Tarih[Tarih]<=MAX(Z_Tarih[Tarih]))),[Toplam Budgeted],0) "percentage of all planned from begining"
the chart i used doesnt allow (or i couldn't figure it out) to add visual which show difference value among lines.
Is there any chart that allow me to do that ?
or what measure should i add ?
Graph
Data
I think you simply can't achieve a chart like that (in which you plot the difference in that way), you will have to find a different way to show it.
for the difference itself, just create a measure like AB difference = [Measure A] - [Measure B], let's call it "difference"
Idea 1
you can then show the "difference" in the tooltip section, it will be visible only on hover (and you can put there as many differences as you want, one for "earned" and one for "planned"
Idea 2
Use the "Line and Stacked Column Chart", split the current chart in 2
In the "column values" put "labor" and "difference"
in the "line values" put the total value
This will allow seeing the current value and the difference like you asked BUT you won't be able to have multiple "categories" of measure in the same chart, as all the values will be stacked. therefore you will need to have one chart for "labor earned" and one for "labor planned".
You might want to put the 2 chart side by side (or one below the other) and maybe with a somehow fixed scale in order to make the comparison between the two easier

Show "no data" for Visuals which becomes blank after selection of filter

I am trying to hide or mask such visuals which becomes blank after selection of filter(s). Following is an example.
I have table like -
Following is report -
Where, I have used Metric column as Slicer and the visuals are Metric wise. So, When I do select metric(s) , Then the visual(s) shows chart for the metric(s), but other shows as blank or nothing. So I want to show "No Preview" or "No data" for the blank visuals.
Like below -
Please suggest.
Thanks and Appreciation in advance !!
This is possible on cards and matrix only, and not on the bar and many other types of chart.
You will have to create a measure like the following:
Total Revenue =
VAR TotalRevenu = SUM(Table1[Revenue])
RETURN
IF(
ISBLANK(TotalRevenue),
"No Data",
TotalRevenue
)
As mentioned, this will work for cards and matrix values only.