среда, 8 февраля 2012 г.

Обработка матриц в QlikView

Сегодня поговорим еще об одном типе таблиц – таблицах матрицах. QlikView делает все подготовительную работу удивительно легко и быстро. Как ?  Читайте в моем очередном уроке.
Очень часто при обработке данных нам встречаются таблицы, содержащие информацию в своем динамическом развитии: продажи/расходы/прибыль  по месяцам/годам, цены по торговым точкам/городам/поставщикам и т.п.  Обычно таблички имеют вид матрицы:
Обычно  требуется найти минимальную/максимальную/среднюю цену по поставщику/торговым точкам, проанализировать динамику показателя во времени…. То есть  анализировать данные как по отдельной строке или столбцу, так и по таблице в целом.
Обычно достаточно трудоёмко преобразовать их в  таблицу обычного вида. QlikView это делает буквально одним оператором.


Для начала загрузим наш файл в систему. Это можно сделать обычным способом с помощью мастера загрузки или написать такой вот несложный код (только не забудьте указать правильный путь к файлу J) :
SourceData:
LOAD *
FROM
C:\GALA\QVBook\Cross\CrossTable_Data.xls
(
biff, embedded labels);


Далее, используя волшебный оператор crosstable, преобразуем нашу табличку к обычному "длинному"  формату:
Price:
CrossTable(Shop, Price)
LOAD * RESIDENT SourceData;
Рассмотрим оператор CrossTable  более подробно. Как мы видим он состоит из трех логических частей (три строки) .
  • Так как в результате работы оператора у нас появится новая таблица, то присвоим ей сразу имя (Price) . Поэтому первая часть оператора – имя таблицы (можно, конечно, и без него обойтись, но это, то, что называют «дурной тон»).
  • Вторая часть оператора  -  непосредственно оператор преобразования матрицы в таблицу:
Указываем название нового поля –атрибутов. В нашем случае  -  это список магазинов, поэтому поле назовем Shop. Далее указываем название нового поля с данным. В нашем случае – это цена товара – Price.
Кстати, названия полей можно указывать и по-русски (пример, Вы сможете найти, если дочитаете мой пост)
  • Третьей частью оператора является собственно источник данных. Поэтому здесь можно использовать обычный оператор Load или Select.
Обратите внимание, что если мы в качестве источника данных используем ранее загруженную таблицу, а не «постоянный»  источник (файл, БД и пр.), то необходимо добавить атрибут RESIDENT
Если теперь вы запустите скрипт, то у Вас загрузится 2 таблички, связанные по полю Товары (Вы помните о том, что QlikView сам умеет связывать таблицы по одноименному полю).

Но нам же этого не надо ?  Поэтому добавим оператор удаления ненужной загруженной таблицы:
DROP TABLE  SourceData
Теперь можно загрузить данные и посмотреть результирующую таблицу. Самый простой способ сделать это - добавить на лист приложения объект - простая таблица и отобразить все доступные поля
Между прочим, наш скрипт можно было бы существенно упросить, если объединить  оператор загрузки данных из источника и их преобразование в «длинную» таблицу. Короткий вариант :
Data:
CrossTable( 'Магазин', 'Цена')
LOAD * FROM
C:\GALA\QVBook\Cross\CrossTable_Data.xls
(
biff, embedded labels);
Как Вы видите я использовала русские названия полей данных. Очевидно, что оператор DROP TABLE нам не нужен.


А что делать, если табличка чуть-чуть сложнее и там содержатся данные не только по списку-товаров, но и выполнена классификация товаров по группе. Например, вид нашей матрицы может  быть такой:


Атрибут Группа не может обрабатываться так же как и атрибут Магазин?

Умный QlikView сам может обработать (такие поля-исключения), просто пропустив их. Изменим наш короткий запрос следующим образом:
Data:
CrossTable(Магазин, Цена, 2)
LOAD * FROM
C:\GALA\QVBook\Cross\CrossTable_Data2.xls
(
biff, embedded labels);

 Во второй части выражения мы просто добавили 2 – количество полей (столбцов) исходной таблицы, которое надо пропустить  прежде чем  встретятся столбцы  с данными второго атрибута, необходимые для обработки. Запутано. Я прочитала в Online-Help – русский вариант, еще более запутан,  я бы даже сказала,  совсем не понятен в этой части.  
Поэтому,  рассматривая наш пример можно объяснить работу QlikView следующим образом:  пропустим 2 первых столбца исходной таблицы (в нашем примере ТОВАР и ГРУППА)  и обработаем все остальные следующим образом: заголовок столбца запишем в поле Магазин, а данные для каждого наименования товара в поле Цена. В результате Простая Таблицы в QlikView будет выглядеть следующим образом:

 Вы догадались как добавить на лист простую таблицу и вывести в нее значения всех полей?



Комментариев нет:

Отправить комментарий