Изменение значения по умолчанию для формулы сообщения TimePoint Intelligence Post - PullRequest
1 голос
/ 12 января 2010

Есть ли способ изменить значение по умолчанию для формулы сообщения Time Intelligence Post?

У меня есть панель инструментов, где я использую фильтры «От даты» и «До даты», чтобы вычислить значения между выбранным пользователем периодом, для этих фильтров я использую Формула времени для аналитики времени , однако по умолчанию, когда пользователь Заходит на страницу всегда сегодняшняя дата на обоих фильтрах. (и с сегодняшнего дня до сегодняшнего дня анализ не имеет смысла для этого)

То, что я хотел бы, это иметь дату начала примерно за 30 дней до сегодняшней даты, но не обязательно в отчете, получающем фильтры, я просто хочу, чтобы фильтр имел значение по умолчанию, а затем позволял пользователю выбирать любое он хочет.

Кто-нибудь знает что-нибудь, что можно сделать, или это просто невозможно?

EDIT:

Проведенное исследование по этой ссылке показало мне, что это невозможно сделать обычными способами:

sgrice задал этот вопрос: Мне нравится календарь и простота его привязки к моему кубу; однако у нас никогда нет данных для «Сегодня», которая является датой по умолчанию. Поэтому наши информационные панели всегда пустые, когда они появляются, и наш клиент должен выбрать дату. Есть ли способ изменить дату по умолчанию?

Автор поста комментирует ответ на комментарий:

Нет, извините, но я введу это как предложение функции.

Спасибо

Alyson

Так что нет формального способа сделать это, поэтому я пытаюсь сделать это по-другому. Поэтому я пытаюсь сделать это более незадокументированным и неясным способом, используя JavaScript. Буду признателен за помощь в поиске способа сделать это.

Ответы [ 3 ]

2 голосов
/ 25 октября 2012

Хорошо, я некоторое время следил за этой веткой и пробовал так много методов, чтобы заставить это работать, в конце концов, я взломал почти весь JavaScript SP2010 и SP2007 и нашел следующее, чтобы работать на SP2010, и у меня это работало в SP2007 с другим префиксом tad.

Шаг 1: узнайте, каков префикс Javascript id ваших частей календаря.

  • Для этого запустите панель управления в IE8 или IE9 и нажмите F12, чтобы запустить Javascript Debugger.
  • Используйте Javascript GetElementByTagName («TD»), чтобы получить полный список всех тегов TD на странице.
  • Найдите теги, имеющие GUID в идентификаторе и заканчивающиеся _Selection и Selection_Toggle.
  • Это будут ваши части фильтра календаря. Обратите внимание на начальный префикс (в SP2007 это был ct_100_, в SP2010 это 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>
0 голосов
/ 28 мая 2010

Я решил это с помощью JavaScript и JQuery. Я в основном проверил, что сделал календарь, и воспроизвел его, я понял, что он включил видимость календаря, когда вы нажали на день, и, так как меня это не интересовало, я удалил его и вызвал метод с таким именем pps_TI_calendar_render передавая три параметра, один был идентификатором календаря td, а два других - дата, которую вы выбрали для полного имени. Я проверил, будет ли он принимать только два параметра и дату в более простом формате Результатом является вызов javascript (обратите внимание, что я меняю только первый календарь дат pps):

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

(этот формат даты месяц / день / год) если вы поместите, например, 14/01/2010, он поместит календарь на первое февраля 2011 года. Так что будьте осторожны.

ПРИМЕЧАНИЕ В первом параметре я использовал выбор JQuery для получения нужного идентификатора, его можно изменить, но параметр должен быть идентификатором элемента, который использует pps.

Надеюсь, это поможет.

0 голосов
/ 23 марта 2010

Вам необходимо создать два календаря, а затем сопоставить один с датой начала и один с датой окончания. Это описано в этом комментарии в блоге Performance Point.

Методика следующая:

Для работы с датой начала и окончания необходимо создать 2 календаря. Затем вы связываете один календарь с <>, а другой с <>. В качестве формулы вы просто вводите День: День. В отчете вам нужно будет создать набор с именем DateRange или что-то подобное.

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