Добрый день!
Возникла следующая задачка, не пойму как ее реализовать. Подкиньте, пожалуйста идейку.
У меня есть следующие поля:
- наименование акции
- даты проведения
- продажи в каждую дату
Пример тут https://yadi.sk/i/UKxngxf4ed6Ga
(https://4.downloader.disk.yandex.ru/disk/a9a9814b16c8a2b4e37ab7f24a9c99bf6a0171ef7587c371382c6ed202634406/inf/7A4A1L_MdyB_NFHKqOjuK1sw2yJdv9KWF3rNI8xPQ2LrYnT0yMtmxIhOwrkI3qXgCmeTA-MTQv5GgsejrcaIbg%3D%3D?uid=0&filename=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%802.JPG&disposition=inline&hash=&limit=0&content_type=image%2Fjpeg&tknv=v2)
Что бы хотелось:
1. Подсчитать сколько дней длиться каждая акция. Например, 3 или 4 дня.
2. Для каждой акции проставить номер дня акции - 1й день, 2й день, 3й день и т.д. (может быть до 15 дней)
3. И в завершении сделать табличку вида:
Наименование акции 1й день 2й день 3й день и т.д.
Prior 68% 16% 14%
MM-dadak 75% 16% 8%
Лесная сказка 65% 19% 15%
А в чем проблема ?
ДатаКонца - ДатаНачала= продолжительность.
day (ДатаКонца - ДатаНачала) - измерение в диаграмме.
или я чего-то недопонял? Было бы продуктивнее, если бы вы выложили примеры ваших таблиц.
Присоединяюсь, можно посмотреть схему?
Схема простая - табличка со следующими полями:
- наименование акции
- даты проведения
- продажи в каждую дату
Или выложить пример экселя для наглядности?
Проблема в том что у всех акций абсолютно разные даты проведения. Хотелось бы понять как продажи распределяются по дням, сколько продается в 1й день, сколько во 2й и т.д. Для этого для каждой акции и для каждого ее дня нужно назначить порядковую нумерацию дня - 1й, 2й и т.д.
Вопрос - с помощью какой функции это можно сделать, чтобы потом построить сводную.
Вопрос в :
Цитата: Ирина от 13 февраля 2015, 11:40:25
- продажи в каждую дату
Это в каком виде представлено? 365 полей в таблице(по числу дат) и на в некоторых из них число?
Да лучше эксель выложить.
Т.е. мой вариант не подошел?
КонДата- Начдата дадут как раз число дней. Ничего не мешает поставить это выражение,как измерение таблицы и получить как раз продажи на 1й, 2й и т.д. день акции.
П.с. пример ваш не могу посмотреть. Пишу с работы - тут сайт заблокирован.
Нет, данные представлены следующим образом:
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й день и т.д.
Т.е. нужна я так понимаю функция, которая бы проставляла порядковый номер дня в диапазоне дней. Диапазоном дней надо брать даты продажи по каждой акции.
Добрый день.
Самое простое решение - формирование поля для хранения порядкового номера дня акции в скрипте.
Например:
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 это решение придется модифицировать в зависимости от постановки задачи.
Неужели нет никакой функции счетчика?
Может быть с помощью aggr....счетчик для каждой акции?
А чем приведенное решение не тянет на роль счетчика?
Думаю, можно составить выражение. Но жертвуя производительностью.
Ведь ядру QV придется в памяти вычислять ранги по группам значений акций, датам.
Затем сопоставлять вычисленные номера дней с каждой датой каждой акции, опять же на лету в памяти.
И в итоге по этим измерениям еще и проводить вычисления.
Для составления такой формулы даже у опытных гуру уйдет больше времени чем дополнительный запрос и формирование колонки в скрипте.
К тому же, полученное выражение в одной сводной таблице может не сработать в другой.
А здесь вы получаете обычно поле и возможность использовать его без каких-либо условностей.
Я поняла, спасибо, буду думать как лучше поступить...