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.

Foi útil?

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]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top