Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 25, 2017, 03:11:38 am

Автор Тема: Операции с датами в Qlikview  (Прочитано 2220 раз)

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Операции с датами в Qlikview
« : Февраль 12, 2015, 12:22:28 pm »
Добрый день!
Возникла следующая задачка, не пойму как ее реализовать. Подкиньте, пожалуйста идейку.
У меня есть следующие поля:
- наименование акции
- даты проведения
- продажи в каждую дату
Пример тут https://yadi.sk/i/UKxngxf4ed6Ga

Что бы хотелось:
1. Подсчитать сколько дней длиться каждая акция. Например, 3 или 4 дня.
2. Для каждой акции проставить номер дня акции - 1й день, 2й день, 3й день и т.д. (может быть до 15 дней)
3. И в завершении сделать табличку вида:

Наименование акции   1й день    2й день    3й день     и т.д.
Prior                               68%           16%        14%
MM-dadak                      75%           16%         8%
Лесная сказка               65%           19%         15%

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #1 : Февраль 12, 2015, 02:39:46 pm »
А в чем проблема ?
 ДатаКонца - ДатаНачала= продолжительность.

day (ДатаКонца - ДатаНачала) - измерение в диаграмме.


или я чего-то недопонял? Было бы продуктивнее, если бы вы выложили примеры ваших таблиц.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 983
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #2 : Февраль 13, 2015, 08:33:55 am »
Присоединяюсь, можно посмотреть схему?

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Операции с датами
« Ответ #2 : Февраль 13, 2015, 08:33:55 am »

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #3 : Февраль 13, 2015, 11:40:25 am »
Схема простая - табличка со следующими полями:
- наименование акции
- даты проведения
- продажи в каждую дату
Или выложить пример экселя для наглядности?

Проблема в том что у всех акций абсолютно разные даты проведения. Хотелось бы понять как продажи распределяются по дням, сколько продается в 1й день, сколько во 2й и т.д. Для этого для каждой акции и для каждого ее дня нужно назначить порядковую нумерацию дня - 1й, 2й и т.д.
Вопрос - с помощью какой функции это можно сделать, чтобы потом построить сводную.

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #4 : Февраль 13, 2015, 12:31:01 pm »
Вопрос в :
- продажи в каждую дату
Это в каком виде представлено?  365 полей в таблице(по числу дат) и на в некоторых из них число?
 Да лучше эксель выложить.

Т.е. мой вариант не подошел?
КонДата- Начдата дадут как раз число дней. Ничего не мешает поставить это выражение,как измерение таблицы и получить как раз продажи на 1й, 2й и т.д. день акции.

П.с. пример ваш не могу посмотреть. Пишу с работы -  тут сайт заблокирован.

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #5 : Февраль 19, 2015, 11:09:16 am »
Нет, данные представлены следующим образом:

       1 столбец                 2 столбец      3 столбец
Наименование акции    Дата акции    Продажи, руб.
Prior                                01.02.14          3000
Prior                                02.02.14          2500
Prior                                03.02.14          1000
MM-dadak                       15.04.14          5000
MM-dadak                       16.04.14          4000
MM-dadak                       17.04.14          2000
MM-dadak                       18.04.14           500
Лесная сказка                20.05.14          3000
Лесная сказка                21.05.14          1000
Лесная сказка                22.05.14           300

Таким образом акции проходят в разные дни и длятся от 3х дней до 15 дней.

А хочется построить следующую таблицу:

Наименование акции   1й день    2й день    3й день     и т.д.
Prior                               68%           16%        14%
MM-dadak                      75%           16%         8%
Лесная сказка               65%           19%         15%

Где бы программа сама определяла по каждой акции 1й день, 2й день и т.д.
Т.е. нужна я так понимаю функция, которая бы проставляла порядковый номер дня в диапазоне дней. Диапазоном дней надо брать даты продажи по каждой акции.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 983
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #6 : Февраль 20, 2015, 08:08:35 am »
Добрый день.
Самое простое решение - формирование поля для хранения порядкового номера дня акции в скрипте.
Например:
tmp1:
LOAD * INLINE [
    Акция,Дата,Продажи
    Prior,01.02.2014,3000
    Prior,02.02.2014,2500
    Prior,03.02.2014,1000
    MM-dadak,15.04.2014,5000
    MM-dadak,16.04.2014,4000
    MM-dadak,17.04.2014,2000
    MM-dadak,18.04.2014,500
    Лесная сказка,20.05.2014,3000
    Лесная сказка,21.05.2014,1000
    Лесная сказка,22.05.2014,300
];

NoConcatenate
LOAD *,
if(Акция<>Previous(Акция),1,Peek(ДеньАкции)+1) as ДеньАкции
Resident tmp1
Order by Акция, Дата;
DROP Table tmp1;

Смысл в том, что мы упорядочиваем таблицу по акциям и датам и сравнивая текущее и предыдущее значение поля Акции определяем запись для новой акции и группы дат. Проставляя 1 как начало счетчика, далее подсчитываем записи по каждой акции.
Но, если есть разрывы в датах, скажем за 15.04 сразу 17.04 это решение придется модифицировать в зависимости от постановки задачи.

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Операции с датами
« Ответ #6 : Февраль 20, 2015, 08:08:35 am »

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #7 : Февраль 20, 2015, 12:25:23 pm »
Неужели нет никакой функции счетчика?
Может быть с помощью aggr....счетчик для каждой акции?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 983
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #8 : Февраль 20, 2015, 12:34:21 pm »
А чем приведенное решение не тянет на роль счетчика?
Думаю, можно составить выражение. Но жертвуя производительностью.
Ведь ядру QV придется в памяти вычислять ранги по группам значений акций, датам.
Затем сопоставлять вычисленные номера дней с каждой датой каждой акции, опять же на лету в памяти.
И в итоге по этим измерениям еще и проводить вычисления.
Для составления такой формулы даже у опытных гуру уйдет больше времени чем дополнительный запрос и формирование колонки в скрипте.
К тому же, полученное выражение в одной сводной таблице может не сработать в другой.
А здесь вы получаете обычно поле и возможность использовать его без каких-либо условностей.

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Операции с датами
« Ответ #9 : Февраль 20, 2015, 12:49:30 pm »
Я поняла, спасибо, буду думать как лучше поступить...