更改PerformancePoint时间智能后公式默认值

时间:2010-01-12 14:34:45

标签: sharepoint-2007 performancepoint dashboard-designer

有没有办法更改Time Intelligence Post Formula的默认值?

我有一个仪表板,我使用从日期和到日期过滤器,来计算用户选择的时间段之间的值,对于那些过滤器我使用时间智能后期公式,但是默认情况下,用户在两个过滤器上输入页面始终是今天的日期。 (从今天到今天,分析对此没有意义)

我想要的是在今天的日期之前30天有一个From Date,但是没有强制收到过滤器的报告,我只想让过滤器有一个默认值然后让用户选择任何他想要。

任何人都知道可以做的事情,或者这是不能做到的?

修改

研究on this link告诉我,不能通过常规方法来完成:

sgrice问这个问题: 我喜欢日历和将其链接到我的立方体的便利性;但是,我们从来没有“今天”的数据,这是默认日期。因此,我们的仪表板在首次启动时始终为空白,我们的客户必须选择日期。有没有办法更改默认日期?

该帖子的作者在评论回复中说:

不好意思,但我会将此作为功能建议输入。

谢谢,

艾丽森

所以没有正式的方法,所以我试图以另一种方式做到这一点。 因此,我试图通过javascript以更加无记录和模糊的方式进行。 我很感激帮助找到一种方法来做到这一点。

3 个答案:

答案 0 :(得分:2)

好的,我已经关注了这个帖子了一段时间,并尝试了很多方法来实现这一点,最终我通过几乎所有的SP2010和SP2007 JavaScript破解了我的方式,并发现以下内容可以在SP2010上工作并且我有它的工作在SP2007中使用不同的tad前缀。

第1步:找出日历部分的Javascript ID前缀。

  • 为此,请在IE8或IE9中启动仪表板,然后按F12启动Javascript调试器。
  • 使用Javascript GetElementByTagName(“TD”)获取页面上所有TD标签的完整列表。
  • 查找ID中包含GUID的标记,并以_Selection和Selection_Toggle结尾。
  • 这些将是您的日历过滤器部件。注意起始前缀(在SP2007中它是SP2010中的ct_100_,它是pps _)

步骤2:将以下Javascript添加到用于Dashboards的母版页的末尾(查看帖子的结尾)

步骤3:保存母版页并刷新浏览器,日期应更改为昨天。

我还为仪表板创建了这个,其上有两个日历过滤器,允许日期范围过滤,这会将第一个日期设置为提前11天,第二个日期设置为昨天。 任何问题emil.swanepoel@live.co.za

<script type="text/JavaScript">


var isFirstLoad;
var calendarLoaded = false;
var srcID = "ctl00_m_WebPart_293af46d1c5c4320893d47f86614325bSelection";
var strDate = "Tue Aug 2 00:00:00 UTC+0200 2011";
var t;
var dateBackA = 1;
var dateBackB = 10;
testForCalendar();

function testForCalendar()
{
    isFirstLoad = true;
    if(calendarLoaded != true)
        t = setTimeout("waitForIt()", 5);
}

function waitForIt()
{
    var foundControl = -1;
    var t = document.getElementsByTagName("TD");
    var ts = "";
    var subDateFound = false;
    var xPoint = 0;
    for(var x = 0; x < t.length; x++)
    {
        if((t[x].id.indexOf("pps_") == 0) && t[x].id.indexOf("Selection_Toggle") > 0)
        {
            foundControl = x;
            ts = t[x].id.substring(0, t[x].id.indexOf("_Toggle"));
            xPoint = x;
            x = t.length;
        }
    }
    if(foundControl > -1)
    {
        if(isFirstLoad == true)
        {   
            if(t[xPoint].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.innerHTML.indexOf("Start Date:") > -1)
                calendarIntercept(ts, calendarDate(new Date(), dateBackB));
            else 
                calendarIntercept(ts, calendarDate(new Date(), dateBackA));
            waitForItSub(xPoint, ts);
            calendarLoaded = true;
            isFirstLoad = false;
        }
        else
            t = setTimeout("waitForIt()", 5);
    }
    else
        t = setTimeout("waitForIt()", 5);   
}

function waitForItSub(startPoint, firstTag)
{
    var foundControl = -1;
    var t = document.getElementsByTagName("TD");
    var tsub = "";
    var xPointNew = 0;
    for(var x = (startPoint++); x < t.length; x++)
    {
        if(t[x].id.indexOf(firstTag) == -1)
        {
            if((t[x].id.indexOf("pps_") == 0) && t[x].id.indexOf("Selection_Toggle") > 0)
            {
                foundControl = x;
                tsub = t[x].id.substring(0, t[x].id.indexOf("_Toggle"));
                xPointNew = x;
                x = t.length;
            }
        }
    }
    if(foundControl > -1)
    {
        if(isFirstLoad == true)
        {   
            if(t[xPointNew].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.innerHTML.indexOf("Start Date:") > -1)
                calendarIntercept(tsub, calendarDate(new Date(), dateBackB));
            else
                calendarIntercept(tsub, calendarDate(new Date(), dateBackA));
            calendarLoaded = true;
            isFirstLoad = false;
        }
    }
}

function calendarIntercept(inSrcID, inDate)
{
    strDate = (inDate.getMonth()+1) + "/" + inDate.getDate() + "/" + inDate.getFullYear(); 
    pps_TI_calendar_render ( inSrcID, strDate , strDate );
}

function calendarDate(inDate, daysBack)
{
    var returnValue = new Date();
    returnValue.setDate(returnValue.getDate() - daysBack);
    return returnValue;
}

</script>

答案 1 :(得分:-1)

您必须创建两个日历,然后将一个日历映射到开始日期,将一个日历映射到结束日期。这在Performance Point博客的this comment中有所描述。

技术如下:

  

要使用开始日期和结束日期,您需要创建2个日历。然后,您将一个日历链接到&lt;&gt;和另一个到&lt;&gt;。作为公式,您只需输入Day:Day。   在报告中,您将必须创建一个名为“DateRange”或类似的集合。

WITH 
SET [DateRange] AS
   <<StartDate>>.Item(0) :  <<EndDate>>.Item(0)
SELECT
NON EMPTY 
[DateRange]
ON COLUMNS,
{ [Measures].[Price Total] }
ON ROWS
FROM [TurnoverCube]

答案 2 :(得分:-1)

我通过javascript和JQuery解决了这个问题。 我基本上检查了日历的功能,并重现了它,我已经意识到当你点击一天时它就会触及日历的可见性,因为我对它没有兴趣我将其删除了,并调用了一个名为pps_TI_calendar_render的方法传递三个参数,一个是日历td的id,另外两个是你在完整名称中选择的日期。 我已经检查过它是否只接受两个参数,以及更简单格式的日期 结果是这个javascript调用(请注意,我只更改了第一个pps日期日历):

pps_TI_calendar_render(  $('.pps_calendarToggleDown').first().parent().closest('td').attr('id'),'01/01/2010');

(此日期格式为月/日/年) 如果您举例说明于2010年1月14日它将在2011年2月1日放置日历。所以请注意。

注意在第一个参数中我使用了JQuery选择来获取我想要的id,这可以改变,但参数需要是pps使用的元素的id。

希望这有帮助。