Budgeting Model - Revenue Planning
In this tutorial video series we will guide you through developing a collaborative annual budgeting model for Whizz, a stationery company, including Revenue, OPEX, Labour, Marketing and Balance Sheet modules. We begin with Whizz's Revenue Planning module, which comprises of a price planning, discount planning and volume planning work-view; this includes a technical guide on building dimensions, cubes and processes; and writing formula to calculate specific cells.
To follow along with this tutorial you can sign up to a free trial account on MODLR by registering an account here, you can find the formulas and sales file data in the instructions below.
We will set up three workviews (or reports), which will allow us to do some simple forecasting of retail sales for Whizz:
- A price planning workview which will allow us to easily adjust product prices.
- A discount planning workview which will allow us to plan discounts and see how it affects a product’s price.
- And a volume planning workview which will allow us to forecast unit volumes and see how that translates into sales revenue and margin.
Revenue Cube - 01:29
- First, let’s create the model which we will call “Whizz Performance Management”.
- Set the time granularity as months - as this will be the lowest level of our time dimension.
- Set the Financial Year to July to June.
Creating Dimensions - 01:52
- Now that we have our model we will create a time dimension, by clicking ‘Dimensions’ in the model’s navigation menu to the left and click ‘New dimension’.
- We will name the dimension “Time” and the dimension type will be ‘Time’.
Creating Variables - 02:45
- We should also create some initial variables for the current month and current year.
- To create a variable for the current month, click on ‘Variables’ in the model’s navigation menu and click ‘New variable’.
- In the open new variable modal, in the key field we will write “Time.Current Month” making sure there’s no space in between time and current.
- For the value we will write “2019 - Jul” and click ‘Create variable’.
- We will create another variable for the current year, by clicking on ‘New variable’ again, and in the modal, change the word month to year. We will edit our value field this time to be “2020” because the time dimension uses the financial year. Tip: These variables are useful when building reports or if you want actuals to be pulled into your rolling forecast scenario.
- Now, we have Whizz’s Actuals Sales data for their stationary products which we want to use to create and populate a cube.
- To use this data, we can upload the Sales data file into ‘MODLR’s file manager’ on the far left navigation menu. And Click the ‘Upload File Button’ and then either browse for the file in question by clicking ‘Choose file’ or simply drag and drop the file and click ‘Upload’.
Building the cube - 04:15
- Now, the file is in the system, let’s build a cube with it.
- We will create a process called “Load Sales”.
- Go to ‘Processes’ in the navigation menu and click ‘New Process’ and we will call it ”Load Sales”.
- Double click on ‘Load Sales’ in the processes, to open it in a new tab and we can then edit it.
- We want to select the action ‘Build a cube from data’, we will call the cube “Revenue”.
- Then in the ‘Datasource’ field to the right we need to select the ‘MODLR File System’, and then as our table choose the ‘Sales.csv’ and click Preview.
- This will show us a preview of the table’s first 8 rows of our sales file and now we can open the 'Build actions' by clicking the dash icon on the right hand side, and start to map the table’s columns.
Mapping Columns - 05:25
- Data will be an element, so click the build dropdown and select ‘Element’, name the dimension “Product”.
- Product_name will be an Element alias in the Product dimension. We will call this dimension “Product” and we will call the alias “Name” and select ‘Sku’ under the Element Field.
- Brands will be used to group the products in the product dimension, so select ‘Grouping’ in the build dropdown field, the dimension again will be “Product” and we will create a hierarchy called “All Products by Brand”, and once again that will affect sku, so select ‘Sku’ in the Child Field.
- The brand_name will also be an alias for the product dimension, so we will select the ‘Element Alias’ in the build the dropdown and the dimension will be “Product” and again the alias will be “Name” but we will instead select ‘Brand’ under the element field.
- For the department column we will select ‘Element’ in the build dropdown and we will create a “Department” dimension.
- For the scenario column, we will select this time, ‘Element (scenario)’ under the build field and create a dimension called “Scenario”.
- The next four columns are filled with values for different measures. We have units, price, cost price, and discount %.
- So for units we choose ‘Data’, and the measures is “Units”.
- For price, it’s ‘Data’, and the measure is “Price”.
- For cost price, it’s ‘Data’, and the measure is “Cost Price”.
- And discount % is ‘Data’, and the measure is “Discount %”.
- And the final column will match the date to the month elements in our Time dimension. We will select the ‘Element (Time)’ in the build and call the dimension “Time”, and the format we will be using is dd/MM/YYYY.
- We will also add a calculated column which will group Brands under a parent called “All Brands”, so click ‘Add Calculated Field’.
- So in the build dropdown we choose ‘Grouping’ and add a field calculation, by clicking the small calculator icon on the left and in the open modal, type under field formula “All Brands”, still in speech marks.
- The dimension for ‘All Brands’ will be ‘Product’ and the hierarchy will be called “All products by Brand”, we want this hierarchy to exactly match the hierarchy we used for Brands. And the child field will be ‘Brand’.
Execute Process - 08:55
- We have named the process “Load Sales” and then click ‘Validate and Save’, and then Execute the process.
- And in the open modal, click ‘Execute’.
- We can look at the logs for the process at the bottom of the page and because the data set is quite small, it only took a couple of seconds to run.
Revenue Cube elements - 09:45
- Now we will need to add some new elements which were not included in the sales file into some of the dimensions, so we will go back.
- We will go into ‘Dimensions’, and in the ‘Scenario’ dimension, which we double click to open, we will add a Scenario Hierarchy by clicking the ‘Add’ button next to it, and call it “Planning Scenarios”.
- We will then edit the ‘Planning Scenarios’ hierarchy, and replace the information there with “Live Forecast”. Then click ‘save changes’ and go back to ‘dimensions’.
- Open the ‘Revenue Measures’ dimension and here we will also add “Price Override” and “Cost Price Override” and “Price and (post Discount)”, we will also add “Sales”, “Cost”, “Margin” and “Margin %”.
- And click ‘Save Changes’.
Calculations Workview - 11:28
- Now we have those elements in, let's create our first workview so go into ‘Workviews’. This workview won’t be used by planners, we will simply use it to make it easier for us to set up the initial formulas for the Revenue cube.
- You can create a new workview by selecting ‘New workview’ or by selecting ‘Actions’ ‘New Workview’, our action will be ‘Create a new workview on an existing cube’, and the workview name will be “Revenue Calculations” and working off of the ‘Revenue Cube’.
- We will double click to open the ‘Revenue Calculations’ workview.
- Now we’re in the workview we can rearrange the dimensions. We will put ‘Measures’ on rows and ‘Time’ on columns, and the rest we will leave as ‘Selectable Dimensions’.
- We will change the instructions for the time dimension so it can be entirely expanded, by double clicking on the time dimension to open it and removing ‘enable drill down’ from the set instructions and selecting ‘Expand All’ by double clicking it, from the group set manipulation in the instruction dictionary.
- And now we can see all years, quarters and months expanded.
- We will also change the settings for the product and department dimensions so we can select any element from their drop down, by clicking on the icon to the right of their drop downs menus to open the set instructions and deselecting ‘Enable Drill Down’ and selecting ‘Expand All’ and click ‘Save’.
- And we repeat these steps for the department dimension.
- We will select ‘Brisbane’ as the department and ‘Binders’ as the product.
- For the scenario dimension, we can change the hierarchy settings to ‘planning scenarios’, from the hierarchy dropdown under the dimension structure on the left, and now we can double click ‘Live Forecast’ to add it to the set instructions.
- We will also remove ‘enable drill down’ from the set instructions. And click save.
- When there’s a red dot visible in the workview tab, it means it has unsaved changes. So I’ll save the workview by clicking the workview dropdown and click ‘save’.
- Now, we can start adding in our formulas by right clicking on a cell where we want the formula to apply and selecting ‘Edit Formula’.
- For Sales, the formula is simply “Units x Price x (1 - Discount %)”, and click ‘Save’.
- Next, the Cost formula is “Units x Cost Price”.
- And, then the Margin formula is “Sales - Cost”.
- And, the Margin % formula is “Margin / Sales”. And we will select this to be an ‘Average or Rate Calculation’ so that it works on parent elements.
- The next formula is a bit more complicated. We want a rolling forecast, so we want values in historic months to equal actuals.
- So we will select ‘Live forecast’ in the scenario dropdown. Then open the formula editor on any cell. Because we want this formula to apply across all measures we will click on ‘Revenue Measures’ and change the setting to ‘Don’t Restrict’. However we want this formula to only apply to the Live Forecast, so we will click on Scenario and change the setting to ‘Restrict to Live Forecast’.
- It’s important to call this formula, “Actuals into Forecast” and we will use this formula here:
- And then we will ‘save’ that formula.
- Then open the formula editor and rearrange the formula in the formula list so “actuals into forecast” is at the top which is the highest priority and then update the new order.
POSITION("Time","Month List",VARIABLE("Time.Current Month"))
Price Planning Workview - Viewed by planners - 17:30
- Now we have the initial formulas setup, let’s create some new workviews for Whizz. We can either leave the workview and open a new workview and start from scratch. Or instead we can use this workview as our base by making a copy of it.
- So let’s hit ‘Save As’ and call our new workview “Price planning”.
- Now we still have our original workview but also a copy with a new name.
- For price planning we won’t need to see all measures so let’s change the instructions for the measures dimension by double clicking it, so we only show “Price”, “Price Override”, “Cost Price” and “Cost Price Override”.
- We also don’t want to have to select each product one by one, so we’ll rearrange dimensions so that ‘products’ are on rows just above measures.
- We also don’t need to see the price for all products, so we will double click on the ‘All Products’ dimension and select ‘Remove Consolidations’ from the instruction dictionary.
- Now, to tidy up the report, we can add a blank space after each cost price override to separate the products, choose ‘Add Blank Space’ from the set formatting in the instruction dictionary.
- Let’s ‘save’ the workview.
- We can also tidy up the time dimension by double clicking a time dimension cell and ‘Removing set - Default’ and ‘Expand All’ and adding ‘Insert Variable Time: Current Year’ from the model variables group, and add a blank space after from the set formatting group, then we will add from the sequential functions, ‘insert next member from default’. We can then add ‘Expand All’ and ‘Remove Consolidations’.
- Also because this report will only be used for planning we will open and edit the scenario, and remove the ‘default to actuals’ instruction and leave the Live Forecast in the instructions, so now we have restricted the scenario elements and we can only see the ‘Live Forecast’ in the scenario dropdown.
- And ‘save’ the workview.
Formula for rolling selling price and cost price forward - 20:24
- Now we’ve built this report's dimensions, let’s create two formulas which roll the sale price and cost price forward.
- Open the formula editor and we will restrict the scenario to the Live Forecast. As this formula will only be used in future periods.
- For ‘Price’, we will use the formula below, this formula grabs the previous month’s Price, which is what we want however we also need a way to change the Price, this is where the Overrides come in.
- So we will go back into the formula editor and change it to:
- And now if we add a Price Override, such as 6, we can see the price in August 2019 grabs the Price Override.
- You can then copy this formula for the price and add it to Cost Price.
- We will also restrict the scenario to Live Forecast and in the formula we will replace all ‘Prices’ with ‘Cost Prices’ instead.
- And if we add a Cost Price Override, of say 2, the Cost Price in August 2019 grabs the Override.
SEQUENCE("Time", "Month List", -1, ["Price"])
SEQUENCE("Time", "Month List", -1, ["Price"]),
IF(["Cost Price Override"]=0,
SEQUENCE("Time", "Month List", -1, ["Cost Price"]),
["Cost Price Override"])
Discount Planning Workview - Viewed by planners - 22:18
- Now we can create a new workview for Whizz’s Discount Planning.
- Once again, we will ‘Save As’ and name our new workview “Discount Planning”.
- The only things we will change are what Measures we will be showing.
- So double click on a ‘Measures’ dimension cell.
- We will show Price, Discount % and Price (post Discount).
- And we will create a formula for Price (post Discount) which is “Price x (1 - discount %)”. And ‘Save’ this formula.
- We will ‘Save’ this workview.
Volume Planning Workview - Viewed by planners - 23:22
- And, finally we will create a Volume planning workview by clicking ‘Save As’. And name it “Volume Planning”.
- In this workview we will show each product with the units measure but we will group them by brand and also show the brand’s total ‘Units’, ‘Sales’, ‘Cost’, ‘Margin’ and ‘Margin %’.
- To do this we will need to use multiple sets.
- For our first set we will select the pencil set, and change the hierarchy from default to ‘All Products by Brand’ and we want ‘Expand All’ and ‘Remove Consolidations’ and ‘Show: Alias Name’ in the set instructions for brand 1, and move brand 1 to the top.
- And we will change the measures to only use Units.
- Then to show Brand 1’s total units, sales, cost, margin, and margin % we can right click on the last row header, go to ‘Change table’ and select ‘Insert row set after selection’. So with this new set for brand 1’s totals, we will change the hierarchy again to ‘All products by brand’ we will use brand 1 and we will select ‘Show Alias Name’ from the element formatting group in the instruction dictionary.
- And for the measures, we will add ‘Units’, ‘Sales’, ‘Cost’, ‘Margin’ and ‘Margin %’. We’ll also add a ‘Blank Space’ which will separate this set from the next.
- We’ll repeat these steps and create two new sets for each brand, (a set for individual products and a set for brand totals).
- So right click on the last row header and go to ‘Change table’ and select ‘Insert row set after selection’.
- So for brand 2, begin with changing the hierarchy to ‘All Products by Brand’ and add Brand 2, in the set instructions add ‘Expand All’, ‘Remove Consolidations’ and ‘Show Alias Name’.
- For the measures we will select just ‘Units’.
- To show Brand 2’s totals, we will again add a blank product row below, and change the hierarchy to ‘All products by Brand’ and select ‘Brand 2’ and ‘Show Alias Name’. The respective measures will be ‘Units’, ‘Sales’, ‘Cost’, ‘Margin’ and ‘Margin %’ and ‘Add Blank Space’.
- Add two more new sets for Brand 3, by repeating the steps from Brand 2.
- Then we will add one more set which will hold a total for all products under the default hierarchy.
- So this time instead of selecting brands we will just select ‘All Products’.
- The measures will be ‘Units’, ‘Sales’, ‘Cost’, ‘Margin’ and ‘Margin %’.
Forecasting - 27:49
- While planning we might want to see and compare yearly totals, so once again we will right click on a row header but instead of a new row set we will select ‘Insert column set before selection’. And in this set we will use our ‘Insert Variable: Time.Current Year’ and we will use both the ‘Previous Member: from Default Hierarchy’ and ‘Next Member: from Default Hierarchy’, in the sequential functions group.
- Now we can start forecasting for 2020.
- We can enter in the numbers manually but that would be very time consuming.
- Instead because we expect sales to follow largely the same trend as 2019, we can copy 2019’s number by double clicking the units for all products for 2020’s cell and typing in “copy “2019””.
- Also to forecast an increase in sales for 2020, in the same cell, we can either set the amount by typing “set” and the amount, for example “$18,500” or we can add to the current amount by typing “add” and either an amount or a percentage increase, for example “10%”.
- Here you can see 10% has been added to 2020’s sales.