2.2 Editable Planning and Reporting Visual
When you have completed exercise 2.1, you can move on to exercise 2.2 where you convert your orignal report to a planning report with write-back functionality.
Start off by duplicating the page where you have created your Structured Report in exercise 2.1 and name the duplicated page 2.2 Planning Table.
Before you start working with getting your Aimplan Visual to be editable, you need to create a slicer where you filter out which Scenario you will store data on. This is found in the table DimScenario. You always want to make sure the end user is only working with one scenario at the time when planning, therefore, single select in the slicer is a good option. You can read more about scenarios here.
In the Aimplan Portal, it is possible to create a start- and stop date for scenarios. This can then be used to rule which months the end user can plan on for each scenario. In the training we have generated a measure that identifies the period in between these dates and generate the value 1 for each of those dates, making it possible to choose your period filter through your scenario slicer. This means, you can remove your Year-slicer and only use the Scenario-slicer which would filter out dates between 2025-01-01 and 2025-12-31 if scenario Budget2025 is chosen.
It's important to remember that you are filtering the entire visual, and all measures in it. If you are currently in year 2024 and want to plan on Budget2025, there are no values in ActualCosts as 2025 have not yet started. Therefore, you need to show LastYearCosts to be able to see actuals for an earlier period, in this case year 2024, one year earlier than your chosen period 2025.
To filter out your planning period using the scenario period, drag the measure ScenarioPeriod from Calculated Measures;Aimplan Setup as a filter on the visual and select the value 1.
*Remember to also delete the slicer Year, as this filters out another period, which would give you zero rows as a result.
Lets move on to the actual Aimplan Visual!
Start by clicking on the three dots in the upper right corner of the report and pick Edit in the menu. You are now in edit mode.
In your upper left corner, you have Visual Settings. If you click on Data Settings you can choose a table in your instance to write to. Here, you chose the fact table in which you want to store data, in this case FactPlanOPEX. When you have chosen your table, you can toggle on Allow Editing which means you can now write data to the table FactPlanOPEX through this visual. We recommend turning Live Edit and Allow Top-Down Allocation off while setting up the report so that you have a clear understanding of what is being stored before actually starting to save data.
When you set the report into Input Mode, Aimplan will warn you about missing key fields.
The red section highlights the minimum mandatory fields for being able to save values, e.g System Dimensions.
The yellow section highlights additional fields that are identified as strong recommendation to keep data integrity when saving values. I.e keeping a value tied to all and every releveant dimension that describes that value.

In this exersice, and decided from the demo data we are working with, Aimplan requires Scenario and Date key-fields. This is the minimum criteria when storing a value using this data set. Most often, and in this case, you want to store values on more keys than these. Aimplan has detected two more key fields that you may want to add (Account and CostCenter) based on the key fields in your chosen storage table.
In this case, we want all key fields that Aimplan suggests. We add them by dragging the key value from each dimension table to Key Fields in the visual. Wait with the DateIntKey.

When the original report were created, we displayed Year as the lowest level granularity. In this case, we want to plan on months, making month is the lowest date level we want to store our values on. Aimplan must have a valid date to store on and the format must be YYYYMMDD so we need to create a calculated column in our date table that returns a valid date. In this case we want the first date of the month so if we store a value for 202406, the date in the table should be 20240601. Read more on how to do that here.
In the training, this column is already created and simply needs to be dragged into Key Fields and renamed to DateIntKey there.

You now have all the Key fields you want to store values on, and only need to add your plan measure and your current user key. In exercise 1. Base setup, we walked through how you can set up the CurrentUserKey Measure. You can now drag that measure to the Aimplan User Key field.
Note! If you are using Microsoft Entra ID, the Aimplan User Key is redundant and therefor does not need to be added.
The Aimplan User Key is mandatory in a report when you want to write back data if you are not working with Microsoft Entra ID. However, since it will also cause a cross joins with data from other tables, empty data rows will automatically show up in the report.

To read more about how to use the user key measure to limit and expand rows you can click here.
You now need a field to store your planned values on. In the training, these measures are already prepared in Calculated Measures;Plan Measures. Drag the measure PlanAmountOPEX into the Value field in the visual.
You can read more on how to set up plan measures here: Configure editable write-back measures in Power BI.
To clarify what you have created and what Aimplan is given to work with, make a duplicate of page 2.2 Planning Table. When you have done so, change your Aimplan Planning Visual into a normal Power BI table. The table you now see is the table that Aimplan uses to create new rows in your storage table. When entering and saving values in the visual, values are stored on these exact rows, split of course on the sections- and filter dividers that you implement in the visual.

When we created our report in the previous exercise, we added ActualCost to the report which showed us the costs for the chosen year. Since your chosen period now refers to a future period, you will not have any values on ActualCost. Therefore, we need to replace ActualCost with PlanAmountOPEX as there are no actuals in the chosen period. Click on your value ActualCost and drag the measure PlanAmountOPEX into the top field to replace what measure is being used. Next, enable Editing by clicking on the toggle and choose what measure you want to store values on, in this case PlanAmountOPEX.
You have now created an editable report!
However, we are not quite done yet. We wanted to plan on year and months, so lets duplicate our column section and change it a little bit. Add Year and Year-MonthName by clicking on +Add Field and remove LastYearCost and the Change-expression by clicking and dragging them away from the Value field.
In Aimplan you can look at your fields as an hierarchy. That means, you can choose if you want to see all months per quarter by default or if you want the end user only to see the higher level, Year, first and click on it to expand the months. This you decide here:
Your report should now look like this:

This looks a bit messy, so lets remove the values PlanAmountOPEX and the expression from our first column section. Remove them by draging them out of the value field. You can also change the section name to Actuals to clarify the difference between the measures. If you add an expression in this section with only a static value with an empty string, you will still show the value alias for LastYearCost, in the case when working with Budget2025, the value would be 2024. If you do not add an empty expression, the column would only show the section name, in this case Actuals.
If you enter Edit Mode and chose Preview in the top right corner, you get a preview of your report. In the top right corner of your preview, you can toggle on Show Source Count which tells you how many rows each cell consists of and therefore how many rows each input would generate to your storage table. If you have not chosen a CostCenter in your slicer, this would mean your table include all six unique CostCenterKeys, and therefore each input would generate six rows.
Since we have turned off the top-down allocation function this far, you can not enter values in the visual if you have not chosen a single CostCenter, making each input unique, consisting of only one row. To solve this, it is a good idea to alter the slicer for CostCenter to a single select.
Try again to look at source count and make sure that you only have one row for each input on the lowest granularity. If so, you are now ready to turn on Top-Down Allocation in the Visual Settings.

When doing so, you can enter values for the full year and it will allocate the values based on the default allocation key. In this case that will be based on existing values which are null and therefore even, but you could have any measure set as a default if you would like to distribute values based on some other allocation key. To be able to enter values on the total level, it might be good to add a total column also. You do this by clicking on your highest level, Year, or on the section header, and add a Total Position, in this case we set it to Before meaning it will show to the left of the monthly values.
Your visual is now fully set up to send values back to your storage table. Write in a number in your report and save it.
Since you are running Power BI Desktop, no automatic refresh is done which means you have to update your visual manually. Click on the Optimize menu and Refresh visuals. The data you entered should now show up in the same cells as you wrote them.
When you have successfully written data to the Azure database, you can go to the portal to see what data is being stored. Read more about how to do this here.
You now have a fully functioning planning table that you can use to plan your budget for a chosen scenario. There are some more features you can use to elevate your planning table, such as Row Comments and Check Boxes. Both of these work similarily as your numeric plan measure but with a few differences.
In the Training, we have already prepared your planned measures for both Row Comment and Check Boxes. The only difference with these DAX-measures as oppose to your previous plan measure PlanAmountOPEX is that you use a MAX-function instead of a SUM-function as each input will generate 12 rows (one per month) with the same value and we want to see the input value, not the sum of that value. It is important to have specific measures created in the Aimplan Portal for these measures as they will store values on all the same keys as your other plan values for each row, overriding other values on input if you would use the same measure key.
To set up your row comments, drag the measure Cost Comment from Calculated Measures;PlanMeasures into your Value-field in the visual. Then go to edit mode and create another column section that you name Comment. Add the value Cost Comment and change the data type to String. Activate the toggle Editable, and choose CostComment as your default meaure to store on. Alter the column width to be fixed at 150.
To create a checkbox, create one more column section and name it Done. Add the value CheckBoxStatus and choose the data type Boolean. Activate the toggle Editable, and choose CheckBoxStatus as your default measure to store on.

Test out your table that now should look something like this: