Step 2: Writing a Rules Allocation Dimension
Once we have the RDS costs we want to split grouped as an element within a dimension, we are ready to build our Rules Allocation Dimension.
Let's stub out the dimension and see what information we need to add:
...
SplitDataLake:
Type: Allocation
Name: Split Data Lake
AllocateByRules:
AllocationMethod: Proportional
SpendToAllocate:
...
AcrossElements:
...
Within the AllocateByRules
rule, we can see that there are three main pieces of information we need to add.
AllocationMethod
- Here we have chosen Proportional, since we want the costs in this dimension to follow the relative costs of our products. We could also have chosen Even, and have the cost of our RDS database spread evenly among this dimension's elements.SpendToAllocate
- This specifies what spend we want to split. In this case, it will reference the RDS spend we grouped in the previous step.AcrossElements
- This specifies how we will split the cost. The elements referenced here will be the elements of our Rules Allocation Dimension as well, and their relative costs will define the proportionality of our split.
Note: there is an additional optional element ForEachElementOf
that allows for further segmentation of SpendToAllocate
. See Optionally Partition Rules Based Allocation Using ForEachElementOf for further documentation.
If you recall, our goal is to allocate the shared RDS spend to "Product A", "Product B", and "Product C" relative to the amount we are currently spending on each of those products.
If we had chosen an
AllocationMethod
ofEven
, then $3,333 would be assigned to each of "Product A", "Product B", and "Product C" in the above image.
First, we will use SpendToAllocate
to specify the Shared Data Lake
element in the Shared RDS
dimension.
...
SplitDataLake:
Type: Allocation
Name: Split Data Lake
AllocateByRules:
AllocationMethod: Proportional
SpendToAllocate:
Source: User:Defined:SharedRDS
Conditions:
- Equals: Shared Data Lake
AcrossElements:
...
Next, we will use AcrossElements
to define the output elements for our split. In this case, we want to split relative to the elements "Product A", "Product B", and "Product C" in the dimension SingleTenantProduct
.
...
SplitDataLake:
Type: Allocation
Name: Split Data Lake
AllocateByRules:
AllocationMethod: Proportional
SpendToAllocate:
Source: User:Defined:SharedRDS
Conditions:
- Equals: Shared Data Lake
AcrossElements:
GroupBy:
Source: User:Defined:SingleTenantProduct
Conditions:
- Equals:
- Product A
- Product B
- Product C
Notice that under AcrossElements
we have used the GroupBy
shorthand to clearly express the logic. It is also possible to use the Groups
shorthand or the standard Rules
long form syntax. A full overview of how to write Rules Allocation Dimensions can be found here: Short Form Rules.
With that, we are finished! Let's review everything in the next step.
Link to Previous Step
Updated 8 months ago