cancel
Showing results for
Did you mean:
Regular Visitor

## Time Intelligence Measures with dynamic Time Periods

Hello together,

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.

Regards,
Florian

9 REPLIES 9
Microsoft

Hi @FN,

Any chance you can post a sample set of data, including a mock up of what you might expect once you have everything working?

Cheers,

Phil

Proud to be a Datanaut!

Microsoft

Hi @FN,

Based on my understanding, you can transfer the formula to DAX, which is used to create a measure.

`active amount=CALCULATE(SUM(Table[Revenue]),Filter(Table, AND(Table[contract start data]<DateX[Date],Table[contract end data]>DateX[Date])))`

Then create a measure to calculate the amount of concelled contracts.

`concelled amount=CALCULATE(SUM(Table[Revenue]),Filter(Table, Table[contract end data]>=DateX[Date1],Table[contract end data]<=DateX[Date2])))`

Then calculate the percentage.

`percentage=[active amount]/[concelled amount]`

Then you can create a line chart, then select the Datex[Date] as axis, the [percentage] as value level, you will get expected result.

If this is not want you want, please post the sample data as @Phil_Seamark suggested.

Best Regards,
Angelia

Regular Visitor

Hi Phil,

Yes, here I have some sample data:

So this is my model with the realtionships:

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.

Do you have any idea of how I could do that?

Thank you and Regards,
Florian

Regular Visitor

Hi Angelia,

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.

Thank you,

Florian

Regular Visitor

@Phil_Seamark

@v-huizhn-msft

I don't know if you receive a notification when I didn't mark you in my replying post.

If you received a notification, then I am sorry for this post. 🙂

Thank you so much for your help,

Florian

Microsoft

Hi @FN,

Any chance you can share some sample data in text form rather than as an image to save lots of key-ing in 🙂

Proud to be a Datanaut!

Regular Visitor

here is some sample data for you. Thank you so much already. I really appreciate it.

 Customer Contract Type Total Price Contract Start Date Contract End Date Address 1: Country (Customer) Customer 1 Update Contract 1.687,44 8.1.2005 7.31.2017 Austria Customer 2 Update Contract 2.595,00 6.1.2003 5.31.2017 United States Customer 3 Support Contract 6.923,04 3.1.2016 9.30.2020 Germany Customer 4 Update Contract 1.119,96 11.1.2006 10.31.2017 Germany Customer 5 Support Contract 4.560,00 7.30.2010 8.31.2014 United States Customer 6 Cloud Agreement 1.932,00 10.1.2015 9.30.2016 Spain Customer 7 Support Contract 7.856,28 4.1.2015 3.31.2018 United Kingdom Customer 8 Update Contract 798,72 1.1.2001 12.31.2005 Switzerland Customer 9 Cloud Agreement 1.890,00 12.1.2016 11.30.2017 United States Customer 10 Update Contract 309,00 1.1.2011 12.31.2014 Isle Of Man Customer 11 Cloud Agreement 343,00 8.15.2014 3.31.2017 Germany Customer 12 Update Contract 6.319,44 5.1.2002 4.30.2017 Germany Customer 13 Update Contract 4.535,16 10.1.2006 9.30.2017 Germany Customer 14 Cloud Agreement 4.116,00 10.1.2015 9.30.2017 Germany Customer 15 Support Contract 6.996,00 7.7.2011 8.31.2017 United States Customer 16 Support Contract 193,80 1.1.2011 12.31.2017 Switzerland Customer 17 Update Contract 232,92 8.1.2011 7.31.2017 Germany Customer 18 Support Contract 329,76 2.1.2008 1.31.2018 Germany Customer 19 Support Contract 1.644,00 9.1.2007 8.31.2008 United States Customer 20 Support Contract 312,00 7.17.2009 7.31.2016 United States Customer 21 Support Contract 2.814,00 11.26.2014 11.30.2016 Mexico Customer 22 Support Contract 744,00 3.16.2011 3.31.2012 Mexico Customer 23 Update Contract 1.610,64 5.1.2002 4.30.2013 Germany Customer 24 Update Contract 1.545,24 12.1.2011 11.30.2017 Germany Customer 25 Update Contract 5.355,00 7.30.2010 8.31.2017 United States Customer 26 Support Contract 200,00 2.18.1998 2.18.2002 United States Customer 27 Update Contract 1.771,20 3.1.2005 12.31.2017 Germany Customer 28 Support Contract 4.902,00 12.31.2008 10.31.2017 United States Customer 29 Update Contract 1.279,56 6.1.2015 12.31.2017 Austria Customer 30 Support Contract 312,00 9.30.2008 9.30.2014 United States Customer 31 Support Contract 2.719,80 1.1.1980 2.28.2018 United States Customer 32 Support Contract 4.999,92 12.10.2003 12.31.2017 United States Customer 33 Support Contract 312,00 6.24.2013 6.30.2014 United States Customer 34 Support Contract 32.325,00 9.1.2015 8.31.2020 United States Customer 35 Cloud Agreement 4.116,00 6.1.2016 5.31.2017 Germany Customer 36 Support Contract 8.397,00 10.19.2011 6.30.2017 Brazil Customer 37 Update Contract 1.437,84 5.1.2015 4.30.2017 Switzerland Customer 38 Update Contract 6.624,24 9.1.2007 8.31.2017 Germany Customer 39 Support Contract 3.153,12 11.1.2010 12.31.2017 Germany
Microsoft

Hi @FN

There are a few moving parts to this one so rather than type it up, here is a PBIX file for you to have a play with

https://wgtnpowerbi-my.sharepoint.com/personal/phil_wgtnpowerbi_onmicrosoft_com/_layouts/15/guestacc...

I think it is close, but once we have applied any tweaks, we can post more detail in here for future searches.

Feel free to ask any questions you have 🙂

Proud to be a Datanaut!

Regular Visitor

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.

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)

)

I am really looking forward hearing from you.

Cheers,
Florian

Announcements

#### Power Platform Community Conference

Check out the on demand sessions that are available now!

#### Power Platform October Community Highlights

Check out the top community contributors across all of the communities

#### Create an end-to-end data and analytics solution

Learn how Power BI works with the latest Azure data and analytics innovations at the digital event with Microsoft CEO Satya Nadella.

Top Solution Authors
Top Kudoed Authors