PerformancePoint Planning: Deleting a Custom Member Property - A Solution
I had a bit of a rant yesterday about the fact I have had to compromise naming member properties when I've inadvertently created them with the wrong data type. As I mentioned, I found a Dimension attribute collection method in the Planning client assemblies that hinted that it might allow me to delete a member property so I decided to give it a go.
Below is some really rough and ready C# code that actually does delete a dimension member property. I will improve the code and probably add it in to my PPSCMD GUI interface as a 'feature pack' bonus at some stage, however, if you are in desperate need for the code to delete a member property, and you can't wait for PPSCMD GUI v0.2 or PerformancePoint Version 2 (I'm not sure which will come first !) the code is below (Use at your own risk !!)
Note: Replace "MyApp", "MyDimension", "MyAttribute", oh, and the server address, accordingly..
using Microsoft.PerformancePoint.Planning.Client.Common;
using Microsoft.PerformancePoint.Planning.Bmo.Core;
..
// Setup the PPS Application Metadata Manager
ServerHandler serverHandler = new ServerHandler("http://localhost:46787");
MetadataManager manager = new MetadataManager();
manager.ServerHandler = serverHandler;
manager.ServerHandler.Connect();
// Get the system metadata
BizSystem system = manager.GetSystem(true);
// Get hold of the PPS Application
BizApplication ppsApp = system.Applications["MyApp"];
// Obtain the root model site from the application
BizModelSite site = ppsApp.RootModelSite;
// Obtain the dimension that contains the member property
BizDimension dimension = site.Dimensions["MyDimension"];
// Obtain the member property
BizDimensionAttribute attribute = dimension.Attributes["MyAttribute"];
// Check out the dimension
manager.CheckOut(dimension.Id, dimension.ParentModelSite.Id);
// Perform the delete
dimension.DeleteDimensionAttribute(attribute, null);
// Submit the change
manager.SubmitModelSite(ppsApp.Id, dimension.ParentModelSite, Microsoft.PerformancePoint.Planning.Bmo.Interfaces.SubmissionType.Update);
// Check in the dimension
manager.CheckIn(dimension.Id, dimension.ParentModelSite.Id);
Update: I've since discovered that you can obtain an unsupported utility from Microsoft Support that reportedly does the same thing, doh !
Oh well, always nice to have the code ..J