Изменение значения по умолчанию в Формуле Post для анализа времени точки выполнения
-
20-09-2019 - |
Вопрос
Есть ли способ изменить значение по умолчанию для формулы Time Intelligence Post??
У меня есть панель мониторинга, где я использую фильтры "От даты" и "До даты", чтобы вычислить значения между выбранным пользователем периодом, для этих фильтров я использую Формула Сообщения о времени разведки,однако по умолчанию, когда пользователь заходит на страницу, в обоих фильтрах всегда используется сегодняшняя дата. (и анализ с сегодняшнего дня по сегодняшний день не имеет смысла для этого)
Чего бы я хотел, так это чтобы дата начала была примерно за 30 дней до сегодняшней даты, но не была принудительной для отчета, получающего фильтры, я просто хочу, чтобы фильтр имел значение по умолчанию, а затем позволял пользователю выбирать все, что он хочет.
Кто-нибудь знает о чем-то, что можно сделать, или это просто невозможно сделать?
Редактировать:
Посредством исследований по этой ссылке показал мне, что это невозможно сделать обычными способами:
сграйс задал этот вопрос:Мне нравится календарь и простота привязки его к моему кубу;однако у нас никогда нет данных за "Сегодняшний день", который является датой по умолчанию.Поэтому наши информационные панели всегда пусты, когда они появляются в первый раз, и наш клиент должен выбрать дату.Есть ли способ изменить дату по умолчанию?
Автор поста говорит в ответе на комментарий:
Нет, извините, но я введу это как предложение по функциям.
Спасибо,
Элисон
Так что формального способа сделать это нет, поэтому я пытаюсь сделать это по-другому.Поэтому я пытаюсь сделать это более недокументированным и малопонятным способом, с помощью javascript.Я был бы признателен за помощь в поиске способа сделать это.
Решение 3
Я решил эту проблему с помощью javascript и jQuery.Я в основном проверил, что делает календарь, и воспроизвел его, я понял, что это повлияло на видимость календаря, когда вы нажали на day, и поскольку это меня не интересовало, я удалил его и вызвал метод с таким именем 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 selection для получения нужного мне идентификатора, это можно было бы изменить, но параметром должен быть идентификатор элемента, который использует pps.
Надеюсь, это поможет.
Другие советы
Хорошо, я некоторое время следил за этой веткой и пробовал так много методов, чтобы заставить это работать, в конце концов я взломал почти весь JavaScript SP2010 и SP2007 и обнаружил, что следующее работает на SP2010, и у меня это работало в SP2007 с другой префикс.
Шаг 1:узнайте, каков префикс идентификатора Javascript в частях вашего календаря.
- Для этого запустите панель управления в IE8 или IE9 и нажмите F12, чтобы запустить отладчик Javascript.
- Используйте Javascript GetElementByTagName("TD"), чтобы получить полный список всех тегов TD на странице.
- Найдите теги, у которых есть 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>
Вам необходимо создать два календаря, а затем сопоставить один с датой начала и один с датой окончания.Это описано в этот комментарий в блоге 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]