cancel
Showing results for 
Search instead for 
Did you mean: 

How to assign the dimension.property value to a existing record

Former Member
0 Kudos

Hi All,

I think this is very basic.

This is what I need to do

  • Read a existing record based on some parameters like datasource, version,time.period.
  • Change the values of few dimension by reading a different dimension.property value.
  • This is similar to the repost characteristics function in IP or BPS.
  • Just modify the 3-4 dimensions and assign the value from the somedimension.property value.

For example I need to select records based on the data source, time period and entity and then change few dimension values like assign the assign the dimension from a different dimension property. For example FS line item assign it from a somedimension.FS_LINE property.

* I don't want to create a new record.

* Read a existing record and modify the values of GL Account and Billing Type.

The code should be for one dimension

WHEN FS_LINEITEM

REC(EXPRESSION=%VALUE%FLD(SOME_DIMENSION.FS_LINEITEM)).

*ENDWHEN

Is this correct code ? I need to do the WHEN/ENDWHEN for all the 3 dimension values I need to change right ?

The FLD(DIM.PROPRTY) instruction in *REC is supported only in MS and not in BPC NW version. I am using EPM 10.How to assign the dimension.property value in BPC NW EPM 10 version.

Sorry I know it is too basic. Thanks in advance for all your help.

Senthil

Accepted Solutions (1)

Accepted Solutions (1)

former_member186338
Active Contributor
0 Kudos

Hi Senthil,

"I don't want to create a new record." - new record WILL be created!!! You COPY data! After copy you can clear original record...

If you want to copy data to some dimension member that is defined in the property of some current dimension member then use:

*REC(EXPRESSION=%VALUE%, FSLINE=SOME_DIMENSION.FS_LINEITEM)

Hope it's clear!

Vadim

former_member186338
Active Contributor
0 Kudos

P.S. But in BPC NW script logic there is no simple way to store the value (SIGNEDDATA) that is stored in the dimension member property! Slow and ineffective FOR/NEXT is required as a workaround for FLD(). It's recommended to store values as a SIGNEDDATA with some dummy members. Then it can be used in REC with tuple expression:

*REC)EXPRESSION=%VALUE%*([DIM1].[D1DUMMY],[D2].[D2DUMMY],[D3].[D3DUMMY]),...)

Vadim

Former Member
0 Kudos

Thanks Vadim.I really appreciate it .It helps a lot.

Just a quick clarification.

For example I need to change 3 dimensions values and the 3 dimension are FSLINE1,FSLINE2 and FSLINE3.

so it has to be

WHEN FSLINE1

*REC(EXPRESSION=%VALUE%, FSLINE1=SOME_DIMENSION.FS_LINEITEM1)

ENDWHEN

WHEN FSLINE2

*REC(EXPRESSION=%VALUE%, FSLINE2=SOME_DIMENSION.FS_LINEITEM2)

ENDWHEN

WHEN FSLINE3

*REC(EXPRESSION=%VALUE%, FSLINE3=SOME_DIMENSION.FS_LINEITEM3)

ENDWHEN

COMMIT.

After the above I will clear the old values. I will do that.

Is there any way I can do all the 3 dimension assignments  in one loop statement.

For example in FOX code you can do

FOR Loop statement on 3 dimensions and do the processing in one FOR/ENDFOR statement. Is it possible to do all the 3 dimension assignment in one WHEN/ENDWHEN statement ?

Thanks again for all the help and really appreciate it.

former_member186338
Active Contributor
0 Kudos

*WHEN requires *IS! At least *IS *

*REC will be single:

*REC(EXPRESSION=%VALUE%, FSLINE1=SOME_DIMENSION.FS_LINEITEM1, FSLINE2=SOME_DIMENSION.FS_LINEITEM2, FSLINE3=SOME_DIMENSION.FS_LINEITEM3)

To clear original values use:

*REC(EXPRESSION=0)

with the original scope

And NEVER use *COMMIT with *WHEN/*ENDWHEN - autocommit happens automatically at the end of *WHEN/*ENDWHEN. *COMMIT will simply reset the scope...

Vadim

If "It helps a lot" - mark it helpful

Former Member
0 Kudos

Thanks Vadim again.

So your suugestion is assign the some other dimension FLD property value is not available in NW and to do that use the FOR/NEXT which has performance impact. The other solution is to store values as a SIGNEDDATA with some dummy members.

Can you please explain how to achieve the SIGNEDDATA with some dummy members. I will maintain it instead of the property and use the tuple expression.

*REC)EXPRESSION=%VALUE%*([DIM1].[D1DUMMY],[D2].[D2DUMMY],[D3].[D3DUMMY]),...)

Former Member
0 Kudos

Thanks again.

So one more clarification.

if I use

*REC(EXPRESSION=%VALUE%, FSLINE1=SOME_DIMENSION.FS_LINEITEM1,

FSLINE2=SOME_DIMENSION.FS_LINEITEM2,

FSLINE3=SOME_DIMENSION.FS_LINEITEM3)

it will loop all the records selected in the scope statement or just one record like the first record in FOX or ABAP.if just one record then I need to use the WHEN/ENDWHEN to loop all the records right ?

WHEN DIM1DIM2 DIM3

IS '*'

*REC(EXPRESSION=%VALUE%, FSLINE1=SOME_DIMENSION.FS_LINEITEM1,

FSLINE2=SOME_DIMENSION.FS_LINEITEM2,

FSLINE3=SOME_DIMENSION.FS_LINEITEM3)

ENDWHEN

Sorry if it is too basic. Thanks again. I will mark it ask helpful soon.

former_member186338
Active Contributor
0 Kudos

For example you want to store some value for each member of the dimension DIMX

For BPC MS you will use the property approach and FLD function.

For BPC NW you will store the values:

DIMX: SOMESPECIFICMEMBER

Other dimensions:

DIM1: D1DUMMY

DIM2: D2DUMMY

DIM3: D3DUMMY

...

Then use tuple expression in REC from my previous post.

Vadim

former_member186338
Active Contributor
0 Kudos

Sorry, but please read help about *WHEN/*ENDWHEN!

And looks like none of my posts are helpful...

P.S. "it will loop all the records selected in the scope statement"  - YES!

But you can't use *REC without surrounding *WHEN/*IS/*ENDWHEN

Former Member
0 Kudos

Hi Vadim,

Thanks for all your help.

Can you provide me any SDN link for the EPM 10 Logic Script and also the Logic Script/Fox code for the EPM 10.1 Versions. Thanks

former_member186338
Active Contributor
0 Kudos

Please, read help - Script Logic reference. Some additional info you can get using search for SAP notes. Unfortunately other documents are incorrect or outdated.

B.R. Vadim

Answers (0)