Alteração do desempenho do desempenho de tempo de desempenho post pós -fórmula
-
20-09-2019 - |
Pergunta
Existe uma maneira de alterar o valor padrão da fórmula do Post Time Intelligence?
Eu tenho um painel onde uso a partir da data e até os filtros, para calcular os valores entre o período selecionado pelo usuário, para os filtros que eu uso o Fórmula de Inteligência Time de Inteligência, no entanto, o padrão quando o usuário entra na página é sempre a data de hoje nos dois filtros. (e de hoje a hoje a análise não faz sentido para isso)
O que eu gostaria de fazer é que uma data seja algo como 30 dias antes da data de hoje, mas não forçado no relatório que recebe os filtros, só quero que o filtro tenha um valor padrão e depois que o usuário escolha o que quiser.
Alguém sabe de algo que pode ser feito, ou isso simplesmente não pode ser feito?
EDITAR:
Através da pesquisa neste link me mostrou que isso não pode ser feito por maneiras normais:
Sgrice fez esta pergunta: eu amo o calendário e a facilidade de vincular -a ao meu cubo; No entanto, nunca temos dados para "hoje", que é a data padrão. Portanto, nossos painéis estão sempre em branco quando surgem e nosso cliente precisa selecionar uma data. Existe uma maneira de alterar a data padrão?
O autor do post diz em uma resposta de comentário:
Não, desculpe, mas vou entrar nisso como uma sugestão de recurso.
Obrigado,
Alyson
Portanto, não há uma maneira formal de fazê -lo, então estou tentando fazer isso de outra maneira. Então, estou tentando fazer isso de uma maneira mais indocumentada e obscura, através de JavaScript. Eu apreciaria a ajuda para encontrar uma maneira de fazer isso.
Solução 3
Eu resolvi através de JavaScript e jQuery. Basicamente, verifiquei o que o calendário fez e a reproduzi, percebi que a visibilidade do calendário quando você clicou no dia e, como não estava interessado em que o removi e chamei um método com esse nome PPS_TI_Calendar_render Passando três parâmetros, um era o ID do calendário TD, e os outros dois foi a data que você selecionou em um nome completo. Eu verifiquei se aceitaria apenas dois parâmetros e a data em um formato mais simples o resultado é essa chamada de JavaScript (observe que estou apenas alterando o primeiro calendário de data do PPS):
pps_TI_calendar_render( $('.pps_calendarToggleDown').first().parent().closest('td').attr('id'),'01/01/2010');
(Este formato de data é mês/dia/ano) Se você colocar, por exemplo, 14/01/2010, ele colocará o calendário em fevereiro primeiro de 2011. Portanto, cuidado.
NOTA No primeiro parâmetro, usei uma seleção de jQuery para obter o ID que eu queria, isso poderia ser alterado, mas o parâmetro precisa ser o ID do elemento que o PPS usa.
Espero que isto ajude.
Outras dicas
Ok, eu segui esse tópico por um tempo e tentei tantos métodos para fazer com que isso funcione, eventualmente, eu me cortei em quase todo o JavaScript SP2010 e SP2007 e encontrei o seguinte para trabalhar no SP2010 e eu o trabalhei no SP2007 com com o SP2007 com um prefixo diferente.
Etapa 1: Descubra qual são o prefixo do ID do JavaScript de suas peças do calendário.
- Para fazer isso, comece o seu painel no IE8 ou IE9 e acerte o F12 para iniciar o depurador JavaScript.
- Usuário o JavaScript GetElementByTagName ("TD") para obter uma lista completa de todas as tags TD na página.
- Procure as tags que possuem um GUID no ID e que terminam com _selection e seleção_toggle.
- Essas serão suas peças de filtro calendário. Observe o prefixo inicial (no SP2007, foi CT_100_ no SP2010, é PPS_)
Etapa 2: Adicione o seguinte JavaScript ao final de sua página mestre, usada para os painéis (veja o final da postagem)
Etapa 3: salve a página mestre e atualize seu navegador e a data deve mudar para ontem.
Também criei isso para um painel com dois filtros de calendário para permitir a filtragem de intervalo de dados e isso definirá a primeira data para 11 dias antes e a segunda data para ontem. Qualquer dúvida 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>
Você precisa criar dois calendários e, em seguida, mapear um para a data de início e outro para a data de término. Isso é descrito em este comentário no blog de pontos de desempenho.
A técnica é a seguinte:
Para trabalhar com uma data de início e término, você precisa criar 2 calendários. Então você vincula um calendário a <> e o outro a <>. Como fórmula, você apenas entra no dia: dia. No relatório, você precisará criar um conjunto chamado 'daterange' ou algo semelhante.
WITH
SET [DateRange] AS
<<StartDate>>.Item(0) : <<EndDate>>.Item(0)
SELECT
NON EMPTY
[DateRange]
ON COLUMNS,
{ [Measures].[Price Total] }
ON ROWS
FROM [TurnoverCube]