Optimisation of cross dimensional calculations

Hi,
Here's a script which should not take too long to run. However, this script runs for hours. Any suggestions would be great. I have added some more details about the dimensions involved.
Outline of the script:
/*Script Begins*/
SET UPDATECALC OFF;
SET CREATENONMISSINGBLK ON;
SET CACHE ALL;
SET CALCPARALLEL 5;
SET CALCTASKDIMS 2;
SET NOTICE LOW;
SET MSG SUMMARY;
FIX (@ATTRIBUTE("Existing"),@Relative("Location",0),@RELATIVE("Entity",0),&pln_scenario,"BU Budget",&plan1_yr,@RELATIVE("BOM",0), @RELATIVE("YearTotal",0))
"RMQ" = "location wise Sales Volume"->"UBOM" * "RMQ per Unit SKU"->"All locations"->"YearAgg";
ENDFIX;
ENDFIX;
/*Script Ends*/
UBOM is a member of BOM, "YearAgg" is a dummy member in period dimension and "all locations" is a dummy member in location dimension.
Dimension details: Evaluation Order which has been thought through.
Dimension Members Density
Account 352 Dense
Period 35 Dense
Version 3 Sparse
Scenario 8 Sparse
Location 7 Sparse
Year 9 Sparse
Entity 20 Sparse
Product 416 Sparse
BOM 938 Sparse

Are you sure that changing the cross-dimensional order of members makes a difference?
"location wise Sales Volume"->"UBOM" * "RMQ per Unit SKU"->"YearAgg"->"All locations";instead of
"location wise Sales Volume"->"UBOM" * "RMQ per Unit SKU"->"All locations"->"YearAgg"really improves how Essbase reads its index and page files?
It seems to me that Essbase is pointing to the same block, no matter the order of the dimension combinations.
The same goes for a FIX: I can't see how the dimension order within a single FIX statement is going to cause Essbase to touch blocks differently as it will be the same list of blocks (and cells) however it's combined.
Have you benchmarked the cross-dimensional member order? I'd be really interested to hear re any differences in performance.
Regards,
Cameron Lackpour

Similar Messages

  • Local variables with cross dimensional operator

    Hi,
    I have a business rule, which has the following calculation :
    VAR TOTPROD;
    TOTPROD = "Prod1"+"Prod2"+"Prod3";
    "MBR1" = "MBR2"->"Jan"->TOTPROD/"MBR2"->"YearTotal"->"TotalProducts";
    The above statement does not run for obvious reasons that TOTPROD is not a member name.
    Is there a way to use a local variable in a cross dimensional operator statement?
    I want to use the local variable in order to avoid making an alternate hierarchy.
    I am using Essbase / HPB 11.1.2.2
    Please help.
    Thanks.

    Hi
    As you state, I dont think the approach that you have is going to work.
    What about either
    a. Creating a dummy product member in your outline and place your result on it (or use an existing 'dummy' product member)
    b. Re-write your code to handle what you wish to do....something like (assuming you are adding Prod1, 2 and 3):
    "MBR1" = ("MBR2"->"Jan"-> "Prod1"+"MBR2"->"Jan"-> "Prod2"+"MBR2"->"Jan"-> "Prod3")/"MBR2"->"YearTotal"->"TotalProducts";
    Not sure if I am missing anything here, but do either of these suggestions help?
    JB

  • Substitution variable in a cross-dimensional operator

    All,
    Essbase doesn't like this:
    "Jan"(
    ("Actuals"->"2011"->"001"->"abc") = ("Run1"->"2011"->"000"->&varAP);
    can I have a substitution variable inside a cross-dimensional operator?

    The basic construct works for me in Sample.Basic. When you say Essbase doesn't like it, what exactly happens - fails syntax check, errors on execution or just doesn't produce the right results?
    Sometimes it's necessary to include quotes in the subvar value itself, e.g. setting your subvar to *"X Y Z"* including the quotes rather than X Y Z.
    I would guess you've already tried this, but does the script validate and run successfully if you replace the subvar with the value of the subvar?

  • Alternatives for 250+ cross-dimensional operators

    Our geographical product segmentation has altered. I have to change the outline. We have departments and products. Normally we could report on the sum of departments and on the sum of products. Now because of the switch in segmentation we can only report on products. Some of the same products are made by mutiple regions. I have to make an hierarchy which can report on products for regions. In this instance in the outline, there is one product member and two department members. I have made formulas to pull the product apart to regions.
    I have done this with cross dimensional operators:
    For example product A is made by department 1 and 2. I made two formulas in the product dimension ProdAdep1 and ProdAdep2:
    Member formulas:
    ProdAdep1 = Product A -> Department 1;
    ProdAdep2 = Product A -> Department 2;
    Product A is now made ~ and ProdAdep1,ProdBdep1, ProdCdep1 count up to Total products department 1.
    I made all these formulas dynamic calc. Both the product and department dimension are sparse. There are now 250+ formulas and the caculation of the database became very slow. In my Essbase bible 'Look smarter than you are with Essbase 11' I found that the usage of a lot of cross dimensional operators is unseemly and slow.
    So I figured out an alternative, a calcscript with a fix.
    FIX("Product A")
    ProdAdep1 = "Department 1";
    ProdAdep2 = "Department 2";
    ENDFIX
    But this doens't work either. Can anyone help me to think out the best solution?

    Thank you Steve, its a bit more complicated.
    Departments roll up to regions, products also roll up to regions, but we also have shared (central) products.
    For example department 1 in region X (department dimension) can have product A (product dimension) and department 2 in region Y (department dimension) can have product A (product dimension) also. The wish is to report on products and have a full view of the regions within the product dimension.
    How it is now:
    Department dimension:
    Total Region X
    |- Department 1
    |- Department 3
    Total region Y
    |- Department 2
    |- Department 4
    Product dimension:
    Total Region X
    |-Product C
    |-Product D
    Total Region Y
    |- Product E
    |- Product F
    Central Products
    |- Product A
    The Wish:
    Department dimension:
    Total Region X
    |- Department 1
    |- Department 3
    Total region Y
    |- Department 2
    |- Department 4
    Product dimension:
    Total Region X
    |-Product C
    |-Product D
    |-Product A (for region X based on department)
    Total Region Y
    |- Product E
    |- Product F
    |- Product A (for region Y based on department)
    Central Products
    |- Product A ~
    It isnt possible to add a dimension, because the problem occurs on level 0.

  • Concatenate within Cross Dimensional Reference

    I am trying to write a calc script in Essbase 7.1.3. I am trying to assign a value to one dimension based on a cross dimensional reference. In the CDR, I want to make it dynamic. I am trying the following. The syntax will not check. What am I doing wrong? I have checked other posts and can't find a solution. I can't make this a member property, it has to be a calc.<BR><BR>Thanks for any help!<img src="i/expressions/face-icon-small-confused.gif" border="0">

    No typo. I slimmed down the calc a bit so it would be more discussion board friendly.<BR><BR>We have input currencies and reporting currencies. The data is loaded to input and translated into the reporting currencies. For example<BR><BR>CR_Loc = CR_Loc_Input + (CR_USD_Input*USD Rate)<BR> where USD rate is found using the range formula above<BR><BR>Real world example:<BR><BR>A Japan user input 100000 yen for a data point as well as 100 USD for the same data point. If we create a pure local currency view the math would be <BR><BR>100,000 Yen + (100 USD * 100 Yen/USD) so CR_LOC = 110,000<BR><BR>We use the range formula to retrieve the currency rate as stored in the data intersection for the account (1 oer currency) and the CR_USD reporting currency. So 100 is stored in CR_USD->AC_JPY_Rate.<BR><BR>I know this is probably far more detail than you needed but thought it might be useful for others if they encounter the same problem.

  • Cross Dimensional

    Hi. it is possible to be used with members dynamically in cross dimensional???

    If you are asking can the cross dimensional calc operator (->) be successfully used in a dynamic calc member formula, the answer is yes. If you are asking a different question, please clarify.Todd

  • Cross Dimensional Security in Planning

    Got a scenario where the customer is asking for cross dimension security in planning and not sure if it's possible
    Simple Example
    Assume 2 dimensions. Account and Entity
    Entity has 2 members E1234 and E1235
    Account has 2 members Axxx1 and Axxx2
    User is User1
    User should have the following access (assume it's all ReadWrite)
    Axxx2 but only for E1234 (so can't ReadWrite for Axxx1 in E1234)
    Axxx1 but only for E1235 (so can't ReadWrite for Axxx2 in E1235)
    Based on the SecFile.txt
    I could write
    User1,Axxx2,ReadWrite,Member
    User1,Axxx1,ReadWrite,Member
    User1,E1234,ReadWrite,Member
    User1,E1235,ReadWrite,Member
    But I have now given him/her access to everything.....
    I'm worried the answer is that you can't do it. I know you could do it in Essbase itself but can't figure out something for Planning.
    My problem is actually far more complicated than this but if I could do understand this simple example I think I can do everything I need.

    One way to get around this issue is to physically merge the dimensions where you need cross-dimensional security. It's not a great solution, and with large dimensions can be completely impractical due to the number of potential combinations. But if one of your dimensions is small, it can work.
    In our case, we wanted cross-dimensional security on Entities and Departments. We didn't have to create a member for every combination of Entity/Department, because not all combinations were valid (or had data), so we were able to limit the combined dimension's size somewhat.
    - Jake

  • Cross Tab calculation in Individual column-Crystal Report

    Hi experts
    I am preparing a report in Crystal report 2008. Report template is Cross Tab.
    Structure of report is
    Cardname-Row, DocType-Columnd, DocTotal-Summarize field.
    Result of this report is
                          IN(Invoice)             RC(Incoming Payment)      Total
    XYZ                    1000                  -500                                 500
    ABC                    2000                 -1000                               1000
    Total                   3000                  -1500                               1500
    I have inserted a column using calculated member. I want to Calculate in that column with BP opening balance
    eg. OCRD.Balance-DocTotal when I do this it give first value to all column rows, i.e (consider XYZ opng Balance is 1500, I have calculate month opening balance which meance Current Opening Balance-Current month Order bookings=Month opening balance)
              IN(Invoice)             RC(Inc Pmt)      Total   Opng Balance
    XYZ       1000                  -500                  500     500
    ABC      2000                 -1000                1000     500
    Total      3000                  -1500                1500    500
    I want to calculate Opng Balance for each CardName but it gives first Customers opning balance to all customers.
    Give me solution.
    Thanks in Advance

    Hi
    I think you can do calculation based on the formula .On the cross tab ,there is :
    X -selection - row
    Y - selection -column
    Z - summary
    You can also use formula on cross tab to do that function  and insert into summary section .
    Hope this helps .
    Bishal

  • New to Cross Dimensional Calcs

    Can someone tell me or point me in the direction of the best way to get started with cross dim calcs? Is there any documentation; papers, books, newsletters, examples, etc. that can help me get started?Any help will be greatly appreciated. Thanks Ptayes

    Well, aside from the Online Help or database admin guide, there isn't really much out there.Perhaps you could post what it is you are looking to do, or what problem you are trying to solve and someone on the forum can give you some pointers (no pun intended).Regards,Jade-------------------------------Jade ColeSenior Business Intelligence ConsultantClarity [email protected]

  • Cross dimensional analysis

    Hi,
    I'm not sure if this is possible or not so bear with me.
    We've got quite a complex cube used for sales reporting and the users want to be able to extract some additional data.
    To simplify it down, assume we have a number of products sold through a number of channels and sold by a number of different companies.
    For the set of companies that a product can be sold through, this is dependent on the relationship between product and channel.
    For example
    Product 100 + Channel A = Company Z
    Product 100 + Channel B = Company X
    Product 200 + Channel C = Company Z
    and so on.
    The difficulty is that there is no pattern to say that every product 100 or everything in Channel A is sold through Company Z.
    I wondered if Alias Combination would work but that I'm not sure that is the correct way of doing things.
    I next looked at whether I could set up a Company dimension and use the cross dimension operator (->) within a member formula to calculate the values. This didn't seem to work very well.
    Is there some other way of doing this that I'm not aware of or is it even possible?

    Hi GlennS,
    I can see that your suggestion should work in the situation where a product or channel both have a unique mapping to a company ie. Product 100 maps to company Z no matter which channels its sold through and everything sold through Channel B goes to Company X no matter which products.
    The mapping to company in my example is at the combined relationship between Product and Channel. So for Product 100, if sold through Channel A then that could be Company Z, however if sold through Channel B then that might be Company X.
    For Product 200 it might be that sales through Channel A go to Company Y, while sales through Channel B go to company Z.
    In your example I would have to mark Product 100 as being either Company X or Z, when it reality it could be sold through either company depending on which channel its sold through.
    Don't ask me why our sales structures are so complicated!?!
    I guess if I think to how I would do something like this in excel, for each data value I would probably concatenate the product and channel together to get a unique reference. I could then test this reference using a lookup table of some sort to determine which company it relates to.
    Does that make sense?
    It's something that feels possible in Essbase but perhaps its a bit too complex to try and implement fully...

  • Cross Column Calculation

    Deal All,
    Assalam-o-Alikum,
    I have following table
    MY_TABLE (c1 number(5), c2 number(5));
    and the data inserted in this format
    C1 C2
    20
    10
    30
    12
    81
    80
    35
    now I want to write the query that give the following result
    C1 C2
    --- ---- ------comments for understanding-- not required to show in QUERY
    20 --remain same show 20
    10 30 ----Previous value of c2 and current value of C1 column 10
    30 900 -- Previous calculated value 30 * current value of C1 column 30
    12 10800 ---Previous calculated value 900 * current value of C1 column 12
    81 874800 --- Previous calculated value 10800 * current value of C1 column 81
    80 69984000 --- Previous calculated value 874800 * current value of C1 column 80
    35 2449440000 --- Previous calculated value 69984000 * current value of C1 column 35
    Please Remember that I don't want to CREATE any Database Function to show the result. I want to solve it in SQL Query with help of Default Oracle Function or without default Oracle function its up to you.
    Thanks
    Farrukh Shaikh

    select *
    from MY_TABLE
    model
    dimension by(rownum rn)
    measures(c1,c2)
    rules(
    c2[1]=c1[1],
    c2[2]=c1[1]+c1[2],
    c2[rn > 2] order by rn = c2[cv()-1]*c1[cv()]);

  • Preventing Various Cross Dimensional Combinations

    I have a data form with divisions and cost centers as separate dimensions in the page view. Certain combinations of divisions and cost centers are not valid for e.g. Division 7,Cost Center 13. How do I prevent users from selecting invalid combinations?

    No I don't think so. That poster seems to be trying to pull up a set of cost centers based on divisions selected. Seems like there is nothing out of the box for that, though if there was it would solve my problem.
    I am trying to avoid the situation where a user erroneously selects say division 7, cost center 13 which is an invalid combination business wise. I'm wondering if there is some sort of control for that. Otherwise users can enter any division/cost center combination whether it actually exists in the business or not.

  • FDM Cross Dimensional Scripting problem

    Hi,
    The below script isn't working. I'm trying to get just the 812 & 813 to map to 10145. I usually never use this many variables, so not sure why this isn't mapping correctly. Any help would be appreciated.
    Thanks,
    JF
    StrAccount=Ucase(VarValues(14))
    StrLid=Ucase(VarValues(25))
    StrCC=Ucase(VarValues(23))
    Select case StrAccount
    Case "9999", "7455", "6464", "7665", "6466"
    Select case StrLid
    Case "ALLO"
    If StrCC = "812","813" then
    Result="10145"
    Case Else
    Result="10144"
    End if
    End Select
    End Select

    Actually, since your End If seems to be in the wrong place, maybe the If statement should be contained on a single line?:
    If StrCC = "812" Or StrCC = "813" Then Result="10145"
    In all, I'm guessing that your code should look like this:
    StrAccount=Ucase(VarValues(14))
    StrLid=Ucase(VarValues(25))
    StrCC=Ucase(VarValues(23))
    Select case StrAccount
         Case "9999", "7455", "6464", "7665", "6466"
              Select case StrLid
                   Case "ALLO"
                        If StrCC = "812" Or StrCC = "813" Then Result="10145"
                   Case Else
                        Result="10144"
              End Select
    End Select

  • Cross-dimensional Attributes?

    I have a cube that includes both a Projects Dimension and a Service Line Dimension.
    The way our organization is structured, Program Managers are assigned to project & service line combinations. For example, it often looks something like this:
    Project ABC / Service Line 1 - Program Manager is Joe
    Project ABC / Service Line 2 - Program Manager is Sally
    Project ABC / Service Line 3 - Program Manager is Harry
    Project XYZ / Service Line 1 - Program Manager is Phil
    Project XYZ / Service Line 2 - Program Manager is Nancy
    Project XYZ / Service Line 3 - Program Manager is Brenda
    I want to add Program Manager as an attribute dimension, but associating it with either dimension alone doesn't add much in the way of business intelligence value. In order to have any value, it somehow needs to be associated with the intersections of both dimensions.
    Has anyone ever dealt with a situation like this that can offer some suggestions?

    I don't think that is possible. A thought (different one), how about combining the dimensions into a single one?
    You can have members like Project ABC_Serviceline 1 type of structure and then the issue with attribute also will be solved.
    Regards
    Celvin
    http://www.orahyplabs.com

  • How to calculate a rolling 12 months to date calculation?

    Hi there
    We have a business requirement to calculate a rolling 12 month to date value. That is, for any month, sum up the last 12 months of data. E.g. for June 2011, its May 2010 -> June 2011. We have the standard Year and Period dimension, and the member which holds this calculation is in another dimension called TimeView. TimeView just holds dynamic calculations for Month To Date(MTH), Year To Date (YTD) etc.
    The problem I am having is because we have the standard Year and Period dimensions so I need to do a cross dimensional sum. All the solutions I am trying either give me an insufficient dynamic calc cache (increase lock block setting) or something similar. Our lock block setting is quite high and it doesnt seem to make a difference when I increase it.
    Anyway, I have tried a few solutions:
    Short one:
    @SUMRANGE("MTH",@MDSHIFT(@CURRMBRRANGE(Period,LEV,0,1,),-1,"Year",)) + @SUMRANGE("MTH",@CURRMBRRANGE(Period,LEV,0,,0));
    Long one:
    IF(@ISUDA(ACCOUNT,"Flow"))
         IF(@ISMBR(Jan))
              YTD->Jan + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Jan,-1,"Year",);
         ELSEIF(@ISMBR(Feb))
              YTD->Feb + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Feb,-1,"Year",);
         ELSEIF(@ISMBR(Mar))
              YTD->Mar + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Mar,-1,"Year",);
         ELSEIF(@ISMBR(Apr))
              YTD->Apr + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Apr,-1,"Year",);
         ELSEIF(@ISMBR(May))
              YTD->May + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->May,-1,"Year",);
         ELSEIF(@ISMBR(Jun))
              YTD->Jun + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Jun,-1,"Year",);
         ELSEIF(@ISMBR(Jul))
              YTD->Jul + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Jul,-1,"Year",);
         ELSEIF(@ISMBR(Aug))
              YTD->Aug + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Aug,-1,"Year",);
         ELSEIF(@ISMBR(Sep))
              YTD->Sep + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Sep,-1,"Year",);
         ELSEIF(@ISMBR(Oct))
              YTD->Oct + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Oct,-1,"Year",);
         ELSEIF(@ISMBR(Nov))
              YTD->Nov + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Nov,-1,"Year",);
         ELSEIF(@ISMBR(Dec))
              YTD->Dec
         ELSEIF(@ISMBR(Q1))
              YTD->Mar + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Mar,-1,"Year",);
         ELSEIF(@ISMBR(Q2))
              YTD->Jun + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Jun,-1,"Year",);
         ELSEIF(@ISMBR(Q3))
              YTD->Sep + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Sep,-1,"Year",);
         ELSEIF(@ISMBR(Q4))
              YTD->Dec
         ELSEIF(@ISMBR(H1))
              YTD->Jun + @MDSHIFT(YTD->Dec,-1,"Year",) - @MDSHIFT(YTD->Jun,-1,"Year",);
         ELSEIF(@ISMBR(H2))
              YTD->Dec
         ELSEIF(@ISMBR("YearTotal"))
              YTD->Dec
         ENDIF
    ELSEIF(@ISUDA(ACCOUNT,"First"))
         MTH->Jan;
    ELSE
    MTH;
    ENDIF
    I am sure this may be a common requirement across companies - does anyone know a solution to this?
    Much appreciated!

    Closing this thread, just needed to increase cache levels.

Maybe you are looking for