HFM Audit
Let me ask you a few questions:
• How do you know what metadata file has been loaded into your Production system?
• How do you know it’s the same file you loaded into QA?
• How do you know the Rules file is the correct one for your metadata?
• What Rules file was used to calculate a particular subcube?
You probably already have procedures in place for making sure that all of the above can be checked. The point is there is nothing in the application that actually gives you that information. In this blog I want to talk about a way of storing the Rules and Metadata versions in the application itself. Here are some of the benefits. You can:
• Check that the correct Rules/Metadata files have been loaded.
• See if the Rules and Metadata versions are in sync.
• Ensure that the same Rules/Metadata is loaded in different environments
• See when the Rules/Metadata changed
Have a look at the screenshot below. There are two accounts; one captures the Rules Version and the other the Metadata Version. The format of the data is VersionNumber.DDMMYY and they must be the same for the Rules and Metadata. You can see that in March there is a difference between the Rules and Metadata:
You can format the version number however you like; the only restriction is it must be a number of some sort. My preferred format is VersionNumber.DDMMYY (as above). You could have it so that the Version Number and the date have to be the same or the Version Number can be different but the date must be the same. Either way it’s a very easy check to make sure that the Rules and Metadata are in step. This, of course, is in a single application and when you load the Rules and Metadata files into a different application or environment, the values should be the same.
And here is how you do it.
Metadata
In the Metadata, create two accounts to hold the Rules and Metadata Versions. You could also create one account and have a custom analysis. Set the Account type to Balance, IsCalculated to Yes and the number of decimal places to 6. For the Metadata Version account, add the VersionNumber.DDMMYY to a UserDefined field (in our case UD1). If you are using phased submissions, set the Submission Group to 0 (you could have a separate member for each phase if you wanted to but I think that’s a bit extreme).
Rules
In the Rules file, create a constant at the top of the file so that it’s easy to find and set it to the value of the Rules Version e.g.:
Const cRULES_VERSION = "23.071214"
And in Sub Calculate set the Rules Account to be equal to the constant:
HS.Exp "A#Rules = " & cRULES_VERSION
Set the Metadata Account to be equal to the value in its UD1 field:
HS.Exp "A#Metadata = " & HS.Account.UD1("Metadata")
You might want to review what members of the Value dimension this executes for. I think Entity Currency and Entity Curr Adjs is enough.
Now whenever you calculate, the data is stamped with the Rules and Metadata versions. I have also implemented for some clients a date and time stamp for the Calculation of Rules which is again quite simple.
Conclusion
I know this involves manual steps because you have to maintain the version numbers in the Rules and the Metadata but it’s not going to take more than 5 minutes once it’s set up. It’s of benefit whether you have Classic or EPMA or a mixture because you can easily check that two applications have the same Rules and Metadata. And it keeps auditors happy because they can see that there is a means to check the migration of the application from Development through to Production.