I'm working with claims where I use different key joins/sheets to get the whole truth.
Right now I got two different sheets with costs for each item (Price Per Unit), depending on where the repair occur. One for Asia and one for the rest of the world (WW)
Sheet 1: PN-List Asia and Sheet 2: PN-List WW
Inside the mentioned sheets there is a priority (1 - 3) of which supplier I should get prices from.
Column Prio.
I've made a column that either says Asia or WW for each job ID. Regress List [Continent].
Two problem has occurred, total cost for each ID is only the max value (most expensive item). See picture:
The total cost should be: 840,96 but it says 622,10 now.
The second problem is that my grand total is completely wrong, should be a lot more. See below picture:
The formula I've used:
Price Per unit =
IF (
SELECTEDVALUE ( 'Regress List'[Continent] ) = "Asia",
CALCULATE (
MAX ( 'PN-List Asia'[Price Per Unit] ),
FILTER ( 'PN-List Asia', 'PN-List Asia'[Prio] = MIN ( 'PN-List Asia'[Prio] ) )
),
CALCULATE (
MAX ( 'PN-List WW'[Price Per Unit] ),
FILTER ( 'PN-List WW', 'PN-List WW'[Prio] = MIN ( 'PN-List WW'[Prio] ) )
)
)
I just made a new measure:
Price Per Units = SUMX('Regress List', 'Regress List'[Qty] * [Price Per unit])
And it gave me the right answer
Thanks to Ozan Sen for leading me in the right way with Sumx
Related
I work with warranty claims and got two sheets with different suppliers, priority and prices for different part numbers for our product.
One sheet with prices/suppliers is used for our repairs in Asia and other sheet is used for the rest of the world (WW)
Sheet 1: PN-List Asia
Sheet 2: PN-List WW
I've managed to make an IF-statement that find the right price, from the right list (PPU).
The formula I've used:
Price Per unit (PPU) =
IF (
SELECTEDVALUE ( 'Regress List'[Continent] ) = "Asia",
CALCULATE (
MAX ( 'PN-List Asia'[Price Per Unit] ),
FILTER ( 'PN-List Asia', 'PN-List Asia'[Prio] = MIN ( 'PN-List Asia'[Prio] ) )
),
CALCULATE (
MAX ( 'PN-List WW'[Price Per Unit] ),
FILTER ( 'PN-List WW', 'PN-List WW'[Prio] = MIN ( 'PN-List WW'[Prio] ) )
)
)
Now I need to get the suppliers name of the product/item, into my matrix in PowerBI.
Suppliers name can be found in the two different sheets (PN-List Asia & PN-List WW) under supplier name ('PN-list WW'[supplier name]).
My guess is that I need to use an IF statement to decide if I should search in PN-List Asia or PN-List WW, but I'm not sure how to find the right supplier name with Priority (prio) and/or Price Per Unit (PPU).
Answer to #Mik
Funny enough, I should be able to make an export (to excel) from PowerBI, that looks like this:
So I can know who to invoice for all the costs. If the supplier wants more information, we will have it in our PowerBI-matrix.
What if you change your visual, for example, like this? I mean getting of supplier name through measure.
used measures
Price Per unit (PPU) =
VAR partNo = SELECTEDVALUE('Claims List (Monthly refilled'[Used Part ])
VAR priority =
CALCULATE(
MIN('PN-List (static)'[Priority])
,TREATAS({partNo},'PN-List (static)'[Part no])
)
RETURN
CALCULATE(
SELECTEDVALUE('PN-List (static)'[Price Per Unit])
,TREATAS({partNo},'PN-List (static)'[Part no])
,'PN-List (static)'[Priority]=priority
)
Supplier =
VAR Usedpart = VALUES('Claims List (Monthly refilled'[Used Part ])
RETURN
CALCULATE(
SELECTEDVALUE(
'PN-List (static)'[Supplier name]
,IF(
ISBLANK(DISTINCTCOUNT('PN-List (static)'[Supplier name]))
,BLANK()
,"- " & DISTINCTCOUNT('PN-List (static)'[Supplier name]) & " Suppliers")
)
,TREATAS(Usedpart,'PN-List (static)'[Part no])
)
I'm looking to create a line graph with accumulated revenue and -gross profit as 0-100% Value Lines on the Y-axis and then have 0-100% of the amount of customers on the X-axis.
I've managed to get the Y-axis and the accumulated lines working using Months on the X-axis. That's not the hard part though, I need to get customer count 0 - 100% on the X-AXIS and I cannot seem to figure it out.
No particular parameters desired i.r.t. the customer accumulation. We just want to be able to see how much the sales are rising along with the relative distinct count of customers in our database.
This way we can see that the first 20% of customers hold i.e. 50% of the revenue etc.
It's a bit weird, I've tried adding custom columns to calculate the percentage of a customer to the grand total of distinct counts but I cannot seem to get it to accumulate. Perhaps i'm looking entirely in the wrong direction and there's a better solution to this. I'd appreciate any help!
KR,
Maarten
You can make the x-axis as a calculated column. If you don't already have a Customer dimension table, then you can create a new calculated table as follows:
CustomerAxis =
VAR CustomerRev =
ADDCOLUMNS (
DISTINCT ( Data[Customer] ),
"CustomerRevenue", CALCULATE ( SUM ( Data[Revenue] ) )
)
VAR TotalRev = SUM ( Data[Revenue] )
VAR TotalCustomers = DISTINCTCOUNT ( Data[Customer] )
VAR CumulativeCols =
ADDCOLUMNS (
CustomerRev,
"CumulativeRevenue",
SUMX (
FILTER ( CustomerRev, [CustomerRevenue] >= EARLIER ( [CustomerRevenue] ) ),
[CustomerRevenue]
),
"CumulativeCount",
COUNTROWS (
FILTER ( CustomerRev, [CustomerRevenue] >= EARLIER ( [CustomerRevenue] ) )
)
)
RETURN
ADDCOLUMNS (
CumulativeCols,
"% of Customers", DIVIDE ( [CumulativeCount], TotalCustomers ),
"% of Revenue", DIVIDE ( [CumulativeRevenue], TotalRev )
)
Then you can drag and drop these last two % columns into a line chart to get the desired curve.
PBIX file I created: https://www.dropbox.com/s/w6trky7t0h42gkp/Pareto.pbix?dl=0
I'm hoping someone can help as I've completely run out of ideas.
I'm working on performance reporting data, producing a number of visuals to summarise the most recent data. To allow users to retrospectively produce reports from previous quarters, I have added a date slicer as a way to "View data as at xxxx date".
Here's a rough representation of my data table - the due dates are in English format (dd/mm/yyyy):
The ratings are calculated in another system (based on a set of targets), so there are no calculated columns here. In reality, there are a lot more measures that report on different time periods (some weekly, some annually, etc) and there are different lags before the data is "due".
I eventually managed to get a measure that returned the latest actual:
MostRecentActual =
VAR SlicerDate = MAX ( Dates[Day] )
RETURN
CALCULATE (
SUM ( Data[Actual] ),
Data[Data due] <= SlicerDate,
LASTDATE ( Data[Data due] )
)
I'm not completely sure I've done it right but it seems to work. I'd be happier if I understood it properly, so explanations or alternatives would be welcomed.
What I'm trying to do now is a basic summary pie chart at the beginning which shows the proportion of the measures that were red, amber, green or unrated as at the date selected. So I would need it to count the number of each rating, but only one for each measure and only for the date that is closest to (but before) the slicer date, which would vary depending on the measure. So using the above three measures, if the slicer was set to 10/10/2019 (English format - dd/mm/yyyy), it would count the RAGs for Q3 2019/20 for measures A an C and for Q2 2019/20 for measure B as there is a time lag which means the data isn't ready until the end of the month. Results:- A: Amber, B: Green, C:Red.
If I were able to create the measure that counted these RAGs, I would then want to add it to a pie chart, with a legend that is "Rating", so it would split the chart up appropriately. I currently can't seem to be able to do that without it counting all dates before the slicer (not just the most recent) or somehow missing ratings from the total for reasons I don't understand.
Any help would be very gratefully received.
Many thanks
Ben
Further update. I've been working on this for a while!
I have created a COUNTAX measure to try to do what I was wanting to do. In some circumstances, it works, but not all and not in the crucial ones. My measure is:
TestCountaxpt2 =
VAR SlicerDate = MAX ( Dates[Date] )
VAR MinDiff =
MINX (
FILTER (
ALL ( Data ),
Data[Ref] IN VALUES ( Data[Ref] ) &&
Data[Data due] <= SlicerDate
),
ABS ( SlicerDate - Data[Data due] )
)
VAR thisdate =
MINX (
FILTER (
ALL ( Data ),
Data[Ref] IN VALUES ( Data[Ref] ) &&
ABS ( SlicerDate - Data[Data due] ) = MinDiff
),
Data[Data due]
)
RETURN
COUNTAX (
FILTER ( Data, Data[Data due] = thisdate && Data[Ref] IN VALUES ( Data[Ref] ) ),
Data[RAG]
)
It produces the following table for a subset of the performance measures, which looks almost ok:
Table showing the result of the TestCountaxpt2 measure:
The third column is the measure above and it seems to be counting one RAG per measure and the dates look correct as the slicer is set to 3rd January 2020. The total for column 3 confuses me. I don't know what that is counting and I don't understand why it doesn't add up to 7.
If I add in the RAG column from the data table, it goes a bit more wrong:
Same table but with RAG Rating added:
The pie chart that is produced is also wrong. It should show 2 Green, 2 Red, 2 Grey (no rating) and 1 Amber. This is what happens.......
Pie chart for the DAX measure, with RAG Rating in the legend:
I can see what it is doing, which is to work out the most recent due date to the slicer in the whole table and using that (which is 1st Jan 2020) whereas I want it to calculate this separately for each measure.
Link to PBIX:
https://drive.google.com/file/d/1RTokOjAUADGHNXvZcnCCSS3Dskgc_4Cc/view?usp=sharing
Reworking the formula to count the ratings:
RAGCount =
VAR SlicerDate =
MAX ( Dates[Day] )
RETURN
COUNTAX (
ADDCOLUMNS (
SUMMARIZE (
FILTER ( Data, Data[Data due] <= SlicerDate ),
Data[Ref],
"LastDateDue", LASTDATE ( Data[Data due] )
),
"CountRAG", CALCULATE (
COUNTA ( Data[RAG] ),
Data[Data due] = EARLIER ( [LastDateDue] )
)
),
[CountRAG]
)
Here's the table it produces:
The reason for Total = 4 for the third column is straightforward. The SelectDate is maximal over all of the Refs in the table and there are only four Refs that match that date.
To fix this and get the totals you're after, you'll need to iterate over each Ref and calculate the SlicerDate for each independently and only then do your lookups or sums.
I haven't tested this code but it should give you an idea of a direction to try:
MostRecentActual =
VAR SlicerDate = MAX ( Dates[Day] )
RETURN
SUMX (
ADDCOLUMNS (
SUMMARIZE (
FILTER ( Data, Data[Data due] <= SlicerDate ),
Data[Ref],
"LastDateDue", LASTDATE ( Data[Data due] )
),
"SumActual", CALCULATE (
SUM ( Data[Actual] ),
Data[Data due] = EARLIER ( [LastDateDue] )
)
),
[SumActual]
)
Going inside to outside,
FILTER the table to ignore any dates beyond the SlicerDate.
Calculate the LastDateDue for each Ref using SUMMARIZE.
Sum the Actual column for each Ref value using its specific LastDateDue.
Iterate over this summary table to add up SumActual across all Refs in the current scope.
Note that for 4, only the Total row in your visual will contain multiple Refs since the innermost Data table inside FILTER is not the entire Data table but only the piece visible in the local filter context.
I have the following graph created. It tracks the count of a certain even in a quarter by groups (i erased the group names and renamed them (ABC's due to sensitive data).
I need the graph to show the cumulative value that is to say for example. Q1 A=1, Q2 A=3, Q3 A=5.
I have played around with quick measures but I can't seem to make them breakdown the accumulation by group, Only quarter (Q1 =1, Q2 =6, etc).
I think i need to create a quick-measure of a quick-measure but I am not sure the order and what the measures would look like.
There are only 2 relevant fields: date_of_event and group
X axis: date of event (by year and quarter), group
y axis: count of date_of event
Thanks
For this, you'll definitely benefit from a date dimension and a dimension for your group. There are many template date dimensions out there, but I'm partial to mine. A group dimension for you may be as simple as just taking the distinct values of your existing [Group] field.
Time intelligence is basically always easier when your model is dimensionalized.
With that, you'd set up relationships as below:
'DimDate'[Date] -1:N-> 'YourEventTable'[Date_Of_Event]
'DimGroup'[Group] -1:N-> 'YourEventTable'[Group]
With that in place, you can use the built-in time intelligence functions or roll your own (examples of rolling your own in my linked date dimension repo).
Events = COUNTROWS ( 'YourEventTable' )
Events YTD = TOTALYTD ( [Events], 'DimDate'[Date] )
If you need an all-time cumulative, instead, you can use this:
Events All-time Cumulative =
VAR CurrentDate = MAX ( 'DimDate'[Date] )
RETURN
CALCULATE (
[Events],
ALL ( 'DimDate' ),
'DimDate'[Date] <= CurrentDate
)
Make sure to always use dimension fields for axis labels and such, and never the same from the fact table.
I had encounter it early this week and below is my DAX for the Cumulative total measure,
Cumulative Total =
CALCULATE (
SUMX (
Table,
IF ( DISTINCTCOUNT ( Table[UserID] ) > 0, 1, 0 ) //Put your Group Here
),
FILTER (
ALLSELECTED ( Table ),
Table[InitialAccessDate] //Date of event
<= MAX ( Table[InitialAccessDate] ) //Date of event
)
)
I hope it helps!! Cheers!!
I have forecast and budget values for the year, and a new forecast is created every quarter. I need PowerBI to pick up the Metric Value (can be Budget, Q1F, Q2F and Q3F) for a given date based on data availability.
Example - If for a given date, data for Q3F is available, pick Q3F, else pick Q2F else Q1F else budget.
This is what my data looks like:
Date Metric Value
1/1/11 Budget 1.1
1/1/11 Q3F 1.2
1/1/11 Q2F 1.3
In this case the function should pick up Q3F since it's available.
One way to solve this would be by using both a SUMX and a SWITCH Statements.
To start with assign a constant to your forecasts, e.g. budget = 1, Q1F = 2 and so on as a column on your data. The idea more recent forecast will have a higher number, it will be used in the switch statement late. I am going to refer to it as forecast_ID in this example.
I am also assuming you have a calendar table, also that your forecasts are entered in entirely for the business and not in waves. E.g. Category A is still on budget, Category B is an updated forecast.
The idea of below, is that the SUMX iterates though each quarter that you are looking at, e.g. 2018 would run Q1, Q2, Q3, Q4 separately.
Within the context of each quarter, it is getting the MAX of your forecast IDs, which is then used in the switch to select the most recent forecast.
Measure :=
SUMX (
VALUES ( Calendar[Quarter] ),
SWITCH (
MAX ( table1[forecast_ID] ),
1, CALCULATE ( SUM ( table1[value] ), table1[Metric] = "Budget" ),
2, CALCULATE ( SUM ( table1[value] ), table1[Metric] = "Q1F" )
)
)
You could also then do something like MAX ( table1[forecast_ID] - 1) for finding the previous forecast dynamically.
If you always want to pull the most recent value then you can use LASTNONBLANK
As Marcus mentioned, the first step is to create a constant for your forecasts. I set up a separate table for this example.
Then you can create a relationship between the two tables based on Metric. Add a calculated column to your original table
MetricConstant = RELATED(Table2[Constant])
Now create a measure to pull the most recent value within each date period
Measure =
SUMX (
VALUES ( Table1[Date] ),
CALCULATE ( SUM ( Table1[Value] ), LASTNONBLANK ( Table1[MetricConstant], 1 ) )
)
Now when you pull in the Date and the Measure it will only show you the most recent available
EDIT-Updated based on comments. If you want to view which Metric is being used you need another measure
MetricMeasure = CALCULATE(MAX(Table1[Metric]),LASTNONBLANK(Table1[MetricConstant],1))
You could create an area chart based on that, and add this to the tooltip.