Hide PerformancePoint “Show Details” Menu Item

One big issue we’ve found with the Show Details menu item in scorecards and analytic reports is that if you use it on a calculated measure, it’ll pop up a window with the error message, “Error Running Data Source Query. Contact the Adminstrator for Details.” If you look in the Application event log, you’ll find more information in a Warning event with the error message below.

Error running data source query.
You cannot drillthrough if the cell in a select clause is a calculated cell.

Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException: 
    You cannot drillthrough if the cell in a select clause is a calculated cell.

This is a limitation of SQL Server Analysis Services and drillthrough on a calculated cell is still not offered, at least not as of SQL Server 2008 R2.

For our dashboards we really didn’t need the Show Details option at all, so I wanted to find a way to get rid of that menu option entirely. After spending some time scrutinizing the PerformancePoint script library, I found that it builds the menu by calling functions in the PPSMA.MenuOptionHelper object. By setting the definition of the showDetails() function to a no-op function as seen in the hideShowDetails() function below, the menu item would never get added when a user right-clicks on a scorecard or analytic report.

//Defer running hideShowDetails until all libraries are available.
// This is only needed if script is included at the top of the page.
//TheExecuteOrDelayUntilScriptLoaded function is not available on 
//Decomp tree pages.
if (typeof ExecuteOrDelayUntilScriptLoaded != "undefined") {
    ExecuteOrDelayUntilScriptLoaded(
        function () { Sys.Application.add_init(hideShowDetails) }, 
        "sp.js");
}

//Hide the PerformancePoint Show Details menu item
function hideShowDetails() {

    //Limit to pages where PerformancePoint library (PPSMA) is loaded
    if (typeof PPSMA != "undefined") {

    //Disable Show Details menu
        if (PPSMA.MenuOptionHelper) {
            PPSMA.MenuOptionHelper.prototype.showDetails = function () { };
        }
    }
}

You can get this script into your dashboard page with a ScriptLink or script tag in your master page or use a CustomAction element with a ScriptSrc in Elements.xml.

If you are just adding script in your master page you can make sure the script reference appears at the bottom of the page and simply call hideShowDetails() directly, but if you use the CustomAction method you need to ensure that the script to rewrite the definition of the PerformancePoint object prototype is run at some point after the PerformancePoint script created it. You can defer the execution of hideShowDetails() using ExecuteOrDelayUntilScriptLoaded and Sys.Application.add_init(). The additional deferral to the Application Init event may not be needed in this case, but I use it for other customizations.

Undocumented APIs!

A word of caution: this is definitely a hack. There’s no documentation for the PerformancePoint client library that defines the PPMSA.MenuOptionHelper object, so this is probably only relevant to SharePoint 2010 SP1. Right now it’s working with the October 2011 Cumulative Update. If the implementation changes, this code is subject to break.

Update 9-July-2012: Hide the entire scorecard menu

Along the same lines, you can hide an entire menu. If you have no need to see a context menu for your scorecards, you can get rid of it entirely by setting the createContextMenu method to an empty function once the PerformancePoint library has been loaded.

PPSMA.ScorecardContextMenuHandler.prototype.createContextMenu = function(e) {};
About these ads

5 Responses to Hide PerformancePoint “Show Details” Menu Item

  1. Joss says:

    Hi Mike, thanks for sharing this solution.

    In my case, I would like to disable or hide Show Details, but I have to show Decomposition Tree.
    Would that be possible with your solution?

    Another thing I would like to do is disable Show Details but just for a particular Scorecard. For example, if I have 3 scorecards in a dashboard, I would like to hide Show Details only for one of them.

    Do you think that can be archived?

    Thanks and best regards,
    Joss

  2. Mike H says:

    Joss,

    You could use a technique similar to what I have above, maybe something like:

    PPSMA.ScorecardContextMenuHandler.prototype.addShowDetailsMenuItem = function () { };

    Unfortunately, that’s going to disable it for ALL of the scorecards on a page.

    You might try to swap in a custom implementation of addShowDetailsMenuItem that calls the original function only if it’s for one of the scorecards where you want Show Details to display. Unfortunately, the internal “property” you might evaluate, WebPartId in the debug script, is called $2 (at the moment) in the minified release script, so I’d shy away from this approach.

    If you just want to have Show Details disabled (grayed out) instead of hidden, you might consider changing the Calculation property of the KPIs on the scorecards in PP Designer. See http://nickbarclay.blogspot.com/2008/02/show-details-functionality-on.html . He’s talking about PPS 2007, and I think they’ve renamed the values, but you should be able to find the setting (Default maybe?) that will result in a disabled Show Details item but still show the numbers you need.

  3. msurkhi says:

    Hi

    can i hide the “Select Measures” option from the context menu ??

    • Mike H says:

      It’s been a while since I’ve looked at PerformancePoint scripts and I’m not sure which context menu you want to hide it from, but if you look at the JavaScript source for the PPSMA.MenuOptionHelper.prototype in one of the ScriptResource.axd files that are loaded in a PPS dashboard page, you see that it defines several functions. One of them is showChangeMeasure(). I imagine that this is what you’re looking for and you could redefine it to a no-op like I did with showDetails() above.

      By the way, if you are hiding all of the measures because there are some confidential measures mixed in with measures that you might like users to see, there may be ways to do this in the cube depending on your needs and edition of SSAS. The Enterprise Edition Perspectives feature provides a way to hide measures for some users and show them for others.

  4. Pingback: SQL Server

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: