Ir para conteúdo principal Pular para conteúdo complementar

Criando um intervalo de datas a partir de uma única data

Às vezes, os intervalos de tempo não são armazenados de forma explícita com um início e um término. Em vez disso, eles estão implícitos por apenas um campo – o carimbo de hora da alteração.

Poderia ser exatamente como mostrado na tabela abaixo, na qual temos taxas de câmbio para várias moedas. Cada alteração na taxa de câmbio está em sua própria linha; cada uma com uma nova taxa de conversão. Além disso, a tabela contém linhas com datas vazias correspondentes à taxa de conversão inicial, antes da primeira alteração feita.

Taxas de conversão de moeda
Currency Data da Alteração Rate
EUR - 8.59
EUR 28/01/2013 8.69
EUR 15/02/2013 8.45
USD - 6.50
USD 10/01/2013 6.56
USD 03/02/2013 6.30

Esta tabela define um conjunto de intervalos não sobrepostos, no qual a data de início é chamada “Change Date” e a data de término é definida pelo início do próximo intervalo. Contudo, já que a data de término não está explicitamente armazenada em uma coluna própria, precisamos criar essa coluna, para que a nova tabela torne-se uma lista de intervalos.

Faça o seguinte:

  1. Crie um arquivo chamado Rates.xlsx que contenha a tabela mostrada acima e armazene-o pronto para o carregamento.
  2. Certifique-se de que as datas na coluna Change Date estejam no mesmo formato da data local.

  3. Determine com qual intervalo de tempo você deseja trabalhar. O início do intervalo deve ser antes da primeira data dos dados e o final do intervalo deve ser após a última.
  4. Carregue os dados de origem, mas altere as datas vazias para o início do intervalo definido no ponto anterior. A data de alteração deve ser carregada como “From Date”.
  5. Classifique a tabela primeiro de acordo com Currency e, em seguida, de acordo com “From Date”, de forma descendente para que as últimas datas sejam exibidas na parte superior.
  6. Execute uma segunda passagem de dados onde será calculado “To Date”. Se o registro atual tiver uma moeda diferente do registro anterior, ele será o primeiro registro de uma nova moeda (mas seu último intervalo); portanto, você deve usar o final do intervalo definido na primeira etapa. Se for a mesma moeda, você deverá usar o “From Date” do registro anterior, subtrair uma pequena quantidade de tempo e usar esse valor como “To Date” no registro atual.

O script listado abaixo atualizará a tabela de origem da seguinte maneira:

Tabela atualizada
Currency Rate FromDate ToDate
EUR 8.45 15/02/2013 vEndTime
EUR 8.69 28/01/2013 14/02/2013 23:59:59
EUR 8.59 vBeginTime 28/01/2013 23:59:59
USD 6.30 03/02/2013 vEndTime
USD 6.56 10/01/2013 2/02/2013 23:59:59
USD 6.50 vBeginTime 9/01/2013 23:59:59

O script do QlikView tem a seguinte aparência:

Let vBeginTime = Num('1/1/2013');
Let vEndTime = Num('1/3/2013');
Let vEpsilon = Pow(2,-27);
Tmp_Rates:
LOAD Currency, Rate,
Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
From 'C:\MyFiles\Rates.xlsx'
(ooxml, embedded labels, table is Sheet1);
 
Rates:
LOAD Currency, Rate, FromDate,
Date(If( Currency=Peek(Currency),
Peek(FromDate) - $(#vEpsilon),
$(#vEndTime)
)) as ToDate
Resident Tmp_Rates
Order By Currency, FromDate Desc;
 
Drop Table Tmp_Rates;

 

Quando o script é executado, será exibida uma tabela que lista os intervalos corretamente.

Esta tabela pode ser posteriormente utilizada em uma comparação com uma data atual com os métodos Intervalmatch.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!

Participe do Programa de Modernização do Analytics

Remove banner from view

Modernize sem comprometer seus valiosos aplicativos QlikView com o Programa de Modernização do Analytics. Clique aqui para mais informações ou entre em contato: ampquestions@qlik.com