Time Intelligence Measures with dynamic Time Periods
I am working on a Power BI report and wasn't able to find a solution for my problem so far.
I want to calculate a so called Cancellation Rate for my company, meaning how many contracts were active at the beginning of a period (e.g. 01/01/2015) and how many of these contracts were cancelled in a certain period (e.g. from 01/01/2015 until 12/31/2015) and then calculating the percentage.
Therefore I am importing all contracts from the CRM into Power Bi. Every Contract has a Contract Start Date and a Contract End Date.
I used to calculate this in Excel with =SUMIFS(Revenue; Contract Start Date < DateX; Contract End Date > DateX)
to calculate how many contracts were active on a certain DateX, e.g. 01/01/2015.
Do you have any recommendations on how I could solve this in Power BI?
My goal would be to have all the different periods in a chart on the axis and the according percentage as the value.
I would be so thankful if someone here could help me.
Account = All the Customers with its information regarding the customer's adress, country, etc.
Contract = All Contracts with information like Contract Start Date, Contract End Date, etc (matched to Account with the Customer ID)
Subterritories = More detailled analysis for regions, so I match a subterritory (like UK) from the Customer's account to the firm of the company, Regions, etc. (not really important for the problem here)
Exchange Rate = As we have contracts in many countries, I am matching the currency from contract to Exchange rate (also not really important for this problem)
Dates = I don't know if this is necessary. It is a date table, with dates in it. As I want to measure the different things (Active Revenue, Cancelled Revenue) on a quarterly period, so I have all the dates of the start of a quarter period there, e.g. 01/01/2015, 04/01/2015, 07/01/2015 and so on. Then I am referring to this date when I am calculating how much revenue was valid at a certain date. Also the same with expired contracts. So far everything clear?
So at the moment, I am calculating the revenue that is valid like this:
=CALCULATE(SUM(Revenue); FILTER(Contracts, Contract Start Date < Dates.QuarterBeginnDate); FILTER(Contracts, Contract End Date > Dates.QuarterBeginnDate)
It is an extra column, because when I try to calculate is as a measure, the 'Dates.QuarterBeginnDate' is not possible to select in the formula from above. I don't know the reason.
Same for the expired contracts:
=CALCULATE(SUM(Revenue);FILTER(Contracts, Contract Start Date < Dates.QuarterBeginnDate); FILTER(Contract End Date > Dates.QuarterBeginnDate); FILTER(Contract End Date > Dates.Period End Date)
Like this, I am calculating a percentage. Also here, it is again not possible to create a measure, because these column names do not appear when I try to enter it in the formula. So I created an extra column again.
What I would love to have is something like this:
So to calculate a rate for every period. This is how I did it in Excel and then I graph it in a chart.
What I want in Power BI is basically the same, to calculate this (only for help) and then graph the rates in a chart. What I want is that with Slicer in Power BI I can easily re calculate the rates for different contract types, for different countries, for different Sales Partner. I don't know in this case if Power BI with its time intelligence is intelligent enough to aleady calculate the rates for periods itself or if I need these date tables or maybe something different.
I posted some sample data minutes ago. I already tried it like in your suggestion, but as the coloumns Dates['Period Dates'] and Contracts['Contract Start Date'] are in different tables, I can't refere to both in one measure unfortunately, but I can do so in an extra column. I don't know why this is the case or what I am doing wrong here.
This is the column I have:
Do you know why this doesn't work as a measure?
In the analysis part I then want to split this rate up into different contract types, regions, etc. As long as the rate is just an extra column it is not working unfortunately.
it took me a while to try to apply this format to the whole data set from our company.
Your solution looks really good, it is definitely going in the right direction. Thank you so much for your help already!
I only do not understand, how you created this "Processed Data" Table. I can see that you typed in the following formula there, but I don't know where to type this formula in, when I create a new Power BI sheet with the whole data from the company. Did you do "Merge Queries" or did you start the new table with "Enter new Data"? Or is there a completely different way you did this? Once I know how to create this Processed Data Tab, I think it should be working.
Processed Data = ADDCOLUMNS( FILTER( CROSSJOIN('Raw Data';Quarters); ( -- Started before start of Quarter and was active during the quarter [Contract Start Date]<=[QuarterStart] && [Contract End Date] > [QuarterStart] ) || ( -- Started During the Quarter [Contract Start Date]<=[QuarterEnd] && [Contract Start Date]>=[QuarterStart] ) ) ; "Contracts Started" ; if([Contract Start Date]<[QuarterEnd] && [Contract Start Date]>=[QuarterStart];1;0); "Contracts Ended" ; if([Contract End Date]<[QuarterEnd] && [Contract End Date]>=[QuarterStart];1;0) )