Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoa, esse acho que é fácil, porém nunca usei, então não conheço direito a sintaxe do Script
Eu trago do SQL Server uma tabela que define as metas dos meus indicadores, no formado:
Indicador - DataInicioMeta - DataFimMeta - ValorMeta
O que preciso fazer é "Distribuir" este "ValorMeta" dia a dia dentro do prazo definido entre "DataInicioMeta" e "DataFimMeta"
Eu imagino que o algorítimo é algo como:
Carregue
Indicador,
Enquanto Contador Menor que DataFimMeta
DataMeta = DataInicioMeta + Contador
Adicione 1 ao contador
Fim da Carga as DataMeta,
ValorMeta;
Como transformar isso num Script do QV ?
Uma outra maneira
Tmp:
SQL SELECT Indicador, DataInicioMeta, DataFimMeta ,ValorMeta
From tabela;
Intervalos:
LOAD Indicador,
Date(DataInicioMeta + IterNo() -1) as Data,
Resident Tmp;
while IterNo() < (DataFimMeta- DataInicioMeta-1);
Consegui resolver meu problema em partes. Agora conto com a ajuda do pessoal
O Script abaixo faz o que preciso.
Tabela:
LOAD * INLINE [
Indicador, DataInicialMeta, DataFinalMeta, ValorMeta
A, 01/01/2013, 25/02/2014, 1
B, 01/05/2013, 25/02/2014, 2
C, 01/07/2013, 25/02/2014, 3 ];
Let a = 1;
Do While a < 10
Indicador:
Load Indicador as Indicador,
Date(DataInicialMeta + $(a), 'DD/MM/YYYY') as DataMeta,
ValorMeta as ValorMeta
Resident Tabela;
Let a = $(a) + 1;
Loop;
Drop Table Tabela;
Mas tem um PORÉM eu coloquei o limite do contador em 10 de maneira fixa. Porém o limite do meu contador é dinâmico, ou seja, ele é a Diferença entre a Data Inicial e a Data Final. Mas como eu pego estes valores se ainda não dei Load quando o While começa ?????
Help
Boa Tarde
Segue um exemplo de como você pode usar, se quiser uma carga diaria por exemplo
FOR vMes = if(vAno <> Year(vIniProc), 01, Month(vIniProc)) TO If ( Month(vIniProc) > Month(vFimProc) and vAno = Year(vIniProc) , 12, Month(vFimProc) )
LET vIni = date(monthstart(makedate(vAno,vMes,1)),'DD/MM/YYYY hh:mm:ss');
LET vFim = date(monthend(makedate(vAno,vMes,1)),'DD/MM/YYYY hh:mm:ss');
FAÇA A SELECT AQUI
NEXT
NEXT
Uma outra maneira
Tmp:
SQL SELECT Indicador, DataInicioMeta, DataFimMeta ,ValorMeta
From tabela;
Intervalos:
LOAD Indicador,
Date(DataInicioMeta + IterNo() -1) as Data,
Resident Tmp;
while IterNo() < (DataFimMeta- DataInicioMeta-1);
Valeu Clever, muito bom. Solução rápida e rasteira!
Cara, eu e minha mania de complicar, já estava fazendo um While dentro do For. Estava funcionando, porém o script tava ficando monstruoso.
Abraço
Relaxa, nem todo mundo conhece o while dentro do load e usar o Iterno() para saber em qual linha estamos processando
Abraço