Greetings,
I am having some trouble with a logic script that seems to be ignoring the *XDIM_NOSCAN instruction. I am running BPC 10.0 MS SP12.
Logic Script
The script below (simplified for testing purposes) is designed to add the Sales Account to the prior period's AUM Account value:
*XDIM_ADDMEMBERSET DATASRC=Calculation
*XDIM_ADDMEMBERSET TIME=PRIOR
*XDIM_NOSCAN TIME=PRIOR
*CALC_EACH_PERIOD
*WHEN ACCOUNT
*IS Sales
*REC(EXPRESSION= GET(ACCOUNT="AUM", DATASRC="Input", TIME=PRIOR) + GET(ACCOUNT="AUM", DATASRC="Calculation", TIME=PRIOR) - %VALUE%, ACCOUNT="AUM", DATASRC="Calculation")
*ENDWHEN
Script explanation
This script adds up three pieces of information:
- Prior period AUM from the Input DataSrc (users would input this for the starting period)
- Prior period AUM from the Calculation DataSrc (this would have been calculated by this very logic script)
- Current period Sales (entered by the user) - this is subtracted in the script due to the Account Type
The result is stored in the AUM Account, Calculation DataSrc.
The first three lines of the script are required because the users will submit Sales via an input form, so the initial record set will only include the current time period and the Input DataSrc. Thus the *XDIM_ADDMEMBERSET instructions are used to include the Calculation DataSrc and prior time periods in the record set. Subsequently the *XDIM_NOSCAN instruction is used to prevent the script from recalculating the prior time period, despite it being included in the record set.
Sample data & results
Here's what's going on. Let's say the user inputs initial AUM of $10,000 in July, and $50 of Sales in August-October:
Account | DataSrc | Time | Amount |
---|---|---|---|
AUM | Input | 2015.JUL | $10,000 |
Sales | Input | 2015.AUG | $50 |
Sales | Input | 2015.SEP | $50 |
Sales | Input | 2015.OCT | $50 |
The script successfully calculates the expected results shown below:
Account | DataSrc | Time | Amount |
---|---|---|---|
AUM | Calculation | 2015.AUG | $10,050 |
AUM | Calculation | 2015.SEP | $10,100 |
AUM | Calculation | 2015.OCT | $10,150 |
Now let's say a user wants to submit a new Sales value in October:
Account | DataSrc | Time | Amount |
---|---|---|---|
Sales | Input | 2015.OCT | $100 |
Here's what we would expect the script to calculate:
Account | DataSrc | Time | Amount |
---|---|---|---|
AUM | Calculation | 2015.AUG | $10,050 |
AUM | Calculation | 2015.SEP | $10,100 |
AUM | Calculation | 2015.OCT | $10,200 |
However, here's what's happening:
Account | DataSrc | Time | Amount |
---|---|---|---|
AUM | Calculation | 2015.AUG | $10,050 |
AUM | Calculation | 2015.SEP | $50 |
AUM | Calculation | 2015.OCT | $150 |
My theory
My troubleshooting indicates that the script is ignoring the *XDIM_NOSCAN instruction.
The user had input Sales into October, and the *XDIM_ADDMEMBERSET instruction added September to the record set. Despite the *XDIM_NOSCAN instruction telling the script not to recalculate September, it is still recalculating September. This would not be an issue, if not for the fact that the record set does not contain August's AUM. So, when trying to calculate September, the record set sees $0 for August AUM, adds that to the $50 Sales in September, and finds the result to the $50 instead of $10,100.
I have tried substituting the *XDIM_ADDMEMBERSET instruction with *XDIM_MEMBERSET TIME=%TIME_SET%,PRIOR, and substituting the *XDIM_NOSCAN instruction with *XDIM_NOSCAN TIME<>%TIME_SET%, but those do not seem to work either. Do you have any idea how to make the *XDIM_NOSCAN instruction work in this scenario?