Перейти к основному содержимому Перейти к дополнительному содержимому

Создание интервала дат из одиночной даты

Иногда у интервалов времени нет четко выраженного начала и конца. Они подразумеваются только одним полем — меткой времени изменения.

Это может быть как в таблице ниже, где для различных валют указаны курсы валют. Каждый курс валют указан в отдельной строке, каждый — с новым обменным курсом. Также в таблице есть строки с пустыми датами, соответствующими исходному обменному курсу, который существовал до первого изменения.

Обменные курсы валют
Currency Change Date 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

Эта таблица определяет набор неперекрывающихся интервалов, где дата начала называется «Change Date», а дата конца определяется началом следующего интервала. Но поскольку дата конца хранится в своем столбце неявно, необходимо создать такой столбец, чтобы новая таблица стала списком интервалов.

Выполните следующие действия.

  1. Создайте файл с именем Rates.xlsx, содержащий таблицу, показанную выше, и сохраните его готовым к загрузке.
  2. Убедитесь, что даты в столбце Change Date указаны в локальном формате дат.

  3. Определите временной диапазон, с которым вы хотели бы работать. Начало диапазона должно предшествовать первой дате в данных, а конец диапазона должен быть после последней даты.
  4. Загрузите исходные данные, но измените пустые даты на начало диапазона, определенного в предыдущем маркере. Дата изменения должна быть загружена как «From Date».
  5. Отсортируйте таблицу сначала по элементу Currency, а затем по элементу «From Date» в убывающем порядке, так чтобы последние даты оказались сверху.
  6. Еще раз пройдитесь по данным, где вычисляется элемент «To Date». Если валюта текущей записи отличается от валюты предыдущей, то это первая запись новой валюты (но ее последнего интервала), поэтому следует использовать конец диапазона, определенного в шаге 1. Если это та же валюта, возьмите элемент «From Date» из предыдущей записи, вычтите небольшое количество времени и используйте это значение в текущей записи как элемент «To Date».

Указанный ниже скрипт обновит исходную таблицу следующим образом:

Обновленная таблица
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

Скрипт QlikView будет выглядеть так:

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;

 

После запуска этого скрипта вы получите таблицу с правильным перечислением интервалов.

Впоследствии эту таблицу можно использовать при сравнении с существующей датой с помощью функции Intervalmatch.

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!

Присоединяйтесь к программе модернизации аналитики

Remove banner from view

Модернизируйте ваши важные приложения QlikView без ущерба с помощью программы модернизации аналитики. Щелкните здесь для получения дополнительной информации или свяжитесь с нами: ampquestions@qlik.com