// Define mappings for Account dimension members between PBCS and Strategic Models def smToPbcsAccountNameMap = ['v1000:010' : 'OFS_Product Revenue', 'v1000:020' : 'OFS_Services Revenue', 'v1000:030' : 'OFS_Support Revenue', 'v1020' : 'OFS_Discounts', 'v1040' : 'OFS_Other Cost of sales', 'v1080:010' : 'OFS_Salaries', 'v1080:020' : 'OFS_Selling Expense', 'v1110' : 'OFS_Depreciation'] def smToPbcsScenarioNameMap = ['Forecast' : 'Target'] def smPbcsYearMap = ['2017':'FY17', '2018':'FY18'] List smYears = smPbcsYearMap.collect {it.key} List pbcsYears = smPbcsYearMap.collect {it.value} // Load data from Strategic Models to Planning entities ["Operations US East", "Operations US West", "Operations US North", "Operations US South"].each { String modelName -> def pbcsEntityName = modelName operation.application.getStrategicModel(modelName).withCloseable { smModel -> String smScenarioName = 'Forecast' def pbcsScenarioName = smToPbcsScenarioNameMap.get(smScenarioName) ?: smScenarioName DataGridDefinitionBuilder builder = smModel.dataGridDefinitionBuilder() builder.addPov(['Scenario'], [ [smScenarioName] ]) builder.addColumn(['Time'], [ smYears ]) println("SM Scenario Name: " + smScenarioName) println("Time: " + smYears) println("Accounts: " + smToPbcsAccountNameMap.collect {"""\"$it.key\""""}) builder.addRow(['Account'], [ ['v1000:010', 'v1000:020', 'v1000:030', 'v1020', 'v1040', 'v1080:010', 'v1080:020', 'v1110'] ]) DataGridDefinition gridDefinition = builder.build() DataGrid smGrid = smModel.loadGrid(gridDefinition); // Construct Planning grid Cube cube = operation.application.getCube("OEP_FS") DataGridBuilder gridBuilder = cube.dataGridBuilder("MM/DD/YYYY") gridBuilder.addPov('Dec','OEP_Strategic Planning', 'USD', pbcsScenarioName, pbcsEntityName, 'OFS_Direct Input', 'Smart Phone 6 in', 'US Market') gridBuilder.addColumn(pbcsYears as String[]) def numDataCols = 2; def rowData = [] smGrid.dataCellIterator().each { rowData << it.data * 0.000001 if (rowData.size() == numDataCols) { def pbcsAccountName = smToPbcsAccountNameMap[it.accountName] ?: it.accountName println "${it.memberNames}: $rowData" gridBuilder.addRow([ pbcsAccountName], rowData) rowData = [] } } smGrid.close() DataGridBuilder.Status status = new DataGridBuilder.Status() gridBuilder.build(status).withCloseable { DataGrid pbcsGrid -> println("Total number of cells accepted: $status.numAcceptedCells") println("Total number of cells rejected: $status.numRejectedCells") println("First 100 rejected cells: $status.cellsRejected") cube.saveGrid(pbcsGrid) } }// withCloseable }// for each model