1

有没有办法改变时间智能后公式的默认值?

我有一个仪表板,我在其中使用 From Date 和 To Date 过滤器来计算用户选择的时间段之间的值,对于那些过滤器我使用Time Intelligence Post Formula,但是用户进入页面时的默认值始终是今天的日期过滤器。(从今天到今天的分析对此没有意义)

我想要的是在今天的日期前 30 天有一个起始日期,但不是强制接收过滤器的报告,我只希望过滤器有一个默认值,然后让用户选择他想要的任何东西。

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

编辑:

通过对这个链接的研究表明,它不能通过正常方式完成:

sgrice 提出了这个问题:我喜欢日历以及将其链接到我的立方体的便捷性;但是,我们从来没有默认日期“今天”的数据。因此,我们的仪表板第一次出现时总是空白的,我们的客户必须选择一个日期。有没有办法更改默认日期?

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

不抱歉,但我会将此作为功能建议输入。

谢谢,

艾莉森

所以没有正式的方式来做这件事,所以我试图用另一种方式来做这件事。所以我试图通过 javascript 以一种更无证和更模糊的方式来做这件事。我会很感激帮助找到一种方法来做到这一点。

4

3 回答 3

2

好的,我已经关注这个线程一段时间并尝试了很多方法来让它工作,最终我破解了几乎所有的 SP2010 和 SP2007 JavaScript 并发现以下内容可以在 SP2010 上工作,我让它在 SP2007 中工作一个不同的前缀。

第 1 步:找出日历部分的 Javascript id 前缀是什么。

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

第 2 步:将以下 Javascript 添加到用于仪表板的母版页末尾(查看帖子末尾)

第 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>
于 2012-10-25T11:46:17.407 回答
-1

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

该技术如下:

要使用开始日期和结束日期,您需要创建 2 个日历。然后将一个日历链接到 <>,将另一个链接到 <>。作为公式,您只需输入 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]
于 2010-03-23T03:49:16.413 回答
-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');

(此日期格式为月/日/年)如果您输入例如 14/01/2010,它将把日历放在 2011 年 2 月 1 日。所以要小心。

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

希望这可以帮助。

于 2010-05-28T16:03:08.290 回答