Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Load com While

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 ?

1 Solution

Accepted Solutions
Clever_Anjos
Employee
Employee

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);

View solution in original post

5 Replies
Not applicable
Author

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

srchagas
Creator III
Creator III

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

Clever_Anjos
Employee
Employee

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);

Not applicable
Author

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

Clever_Anjos
Employee
Employee

Relaxa, nem todo mundo conhece o while dentro do load e usar o Iterno() para saber em qual linha estamos processando

Abraço