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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: efro от 10 марта 2015, 12:47:58

Название: Кол-во изделий на гарантии
Отправлено: efro от 10 марта 2015, 12:47:58
Всем привет!
Есть задачка определить кол-во изделий на гарантии по состоянию на сегодня ("сегодня" каждый день, естественно, изменяется).
Для этого есть таблица с номерами изделий, датой ввода в эксплуатацию и датой снятия с гарантии.
Название: Re: Кол-во изделий на гарантии
Отправлено: admin от 10 марта 2015, 01:56:43
Добрый день.
Чтобы можно было решить вашу задачу участниками форума, подготовьте пример исходных данных в табличном формате (для загрузки и тестирования) и контрольные цифры, если есть.
Название: Re: Кол-во изделий на гарантии
Отправлено: efro от 10 марта 2015, 08:26:00
Спасибо за уточнение.
Выкладываю пример, отображающий имеющиеся данные.
I0001 - серийный номер изделия (поэтому и I).

Ну и кроме кол-ва на "сегодня" хотелось бы знать цифру о количестве гаранийных изделий на любую заданную дату.
Название: Re: Кол-во изделий на гарантии
Отправлено: admin от 11 марта 2015, 08:10:23
День добрый.
Решение простое, смотрим описание IntervalMatch.
Нам потребуется сформировать календарь и таблицу связей, с помощью указанной выше функции.
Скрипт:

tmp:
LOAD [Номер изделия],
     [Дата ввода в эксплуатацию],
     [Дата снятия с гарантии]
FROM
garant_demo.xlsx
(ooxml, embedded labels, table is Лист1);

tmp2:
LOAD min([Дата ввода в эксплуатацию]) as 'DateStart', max([Дата снятия с гарантии]) as 'DateEnd' Resident tmp ;

LET Date_Start = peek('DateStart',0,'tmp2');
LET Date_End = peek('DateEnd',0,'tmp2');
LET vStart = floor(Date_Start);
LET vEnd = floor(Date_End);
LET vNumOfDays = vEnd - vStart + 1;
DROP Table tmp2;

Date_src:
LOAD $(vStart) + Rowno() -1 as DateId AUTOGENERATE $(vNumOfDays);

Calendar:
LOAD
DateId,
date(DateId) as 'дата',
year(DateId) as 'год',
month(DateId) as 'месяц',
dual(month(DateId) & '-' & year(DateId),year(DateId) & num(month(DateId), '00')) as 'месяц-год'
RESIDENT Date_src;

Drop Table Date_src;

IntervalMatch (дата) LOAD [Дата ввода в эксплуатацию], [Дата снятия с гарантии] Resident tmp;


Для проверки строим диаграмму-таблицу с измерением "дата" и функцией Count ([Номер изделия]).
Получим количество изделий на гарантии на каждый день.
Название: Re: Кол-во изделий на гарантии
Отправлено: efro от 16 марта 2015, 10:46:38
Спасибо за подробный ответ!
По дням всё получилось.

А если ещё продолжить изыскания и попытаться найти среднее значение количества изделий на гарантии за месяц, то правильно ли я понимаю, что надо Aggr воспользоваться?
Название: Re: Кол-во изделий на гарантии
Отправлено: admin от 17 марта 2015, 08:47:27
Да, aggr, avg в связке дают корректные результаты.
Во вложении небольшое эссе на тему использования AGGR(). Писал я сам, так что пользуйтесь.
Название: Re: Кол-во изделий на гарантии
Отправлено: efro от 06 апреля 2015, 02:04:31
Цитата: admin от 17 марта  2015, 08:47:27  
Да, aggr, avg в связке дают корректные результаты.
Во вложении небольшое эссе на тему использования AGGR(). Писал я сам, так что пользуйтесь.
День добрый!
Aggr пока не поддаётся :(, поэтому пока пришлось остановиться на выгрузке в Excel исходных данных (Год, Квартал, DateId, Тип аппарата) и построении сводной диаграммы вида:
Год, квартал - среднее по полю для каждого типа аппарата.