OLAP — это просто!

Методика простого OLAP-подобного анализа данных в сводных таблицах Excel.

Удивительное — рядом …

По ходу работы мне часто требовалось делать сложные отчеты, я все время пытался найти в них что-то общее, чтобы составлять их более просто и универсально, даже написал и опубликовал по этому поводу статью «Дерево Осипова». Однако мою статью раскритиковали и сказали, что все те проблемы, которые я поднял, давно уже решены в MOLAP.RU v.2.4 (www.molap.rgtu.ru) и порекомендовали посмотреть сводные таблицы в EXCEL.
Это оказалось настолько простым, что приложив к этому свои гениальные ручонки, у меня получилась очень простая схема для выгрузки данных из 1С7 или любой другой базы данных (в дальнейшем под 1С подразумевается любая база данных) и анализа в OLAP.
Я думаю, многие схемы выгрузки в OLAP слишком усложнены, я выбираю простоту.

Характеристики:

1. Для работы требуется только EXCEL 2000.
2. Пользователь сам может конструировать отчеты без программирования.
3. Выгрузка из 1С7 в простом формате текстового файла.
4. Для бухгалтерских проводок уже имеется универсальная обработка для выгрузки, работающая в любой конфигурации. Для выгрузки других данных имеются обработки-образцы.
5. Можно заранее сконструировать формы отчетов, а затем применять их к разным данным без их повторного конструирования.
6. Довольно хорошая производительность. На первом длительном этапе данные сначала импортируются в EXCEL из текстового файла и строится куб OLAP, а затем довольно быстро на основе этого куба может быть построен любой отчет. Например, данные о продажах товара по магазину за 3 месяца с ассортиментом 6000 товаров, загружаются в EXCEL 8 минут на Cel600-128M, рейтинг по товарам и группам (OLAP-отчет) пересчитывается за 1 минуту.
7. Данные выгружаются из 1С7 полностью за указанный период (все движения, по всем складам, фирмам, счетам). При импорте в EXCEL возможно использование фильтров, загружающих для анализа только нужные данные (например, из всех движений, только продажи).
8. В настоящее время разработаны способы анализа движений или остатков, но не движений и остатков вместе, хотя это в принципе возможно.

Что такое OLAP: (www.molap.rgtu.ru)

Предположим у вас есть торговая сеть. Пусть данные о торговых операциях выгружены в текстовый файл или таблицу вида:

Дата

Месяц

Неделя

Вид

Товар

Склад

Количество

Сумма

Контрагент

Автор

Дата — дата операции
Месяц — месяц операции
Неделя — неделя операции
Вид — закуп, продажа, возврат, списание
Контрагент — внешняя организация, участвующая в операции
Автор — человек, выписавший накладную

В 1С, например, одна строка этой таблицы будет соответствовать одной строке накладной, некоторые поля (Контрагент, Дата) при этом берутся из шапки накладной.

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

Эта таблица является исходной для OLAP-анализа.

Далее определяются, какие из полей будут суммироваться (Данные) , какие будут являться уровнями группировок (Измерения), какие данные из таблицы брать(Фильтр):

Отчет

Измерения

Данные

Фильтр

Сколько товара и на какую сумму продается за день?

Дата, Товар

Количество, Сумма

Вид=»продажа»

Какие контрагенты поставили какой товар на какую сумму помесячно?   

Месяц, Контрагент, Товар

Сумма

Вид=»закуп»

На какую сумму выписали операторы накладных какого вида за весь период отчета?

Автор, Вид

Сумма

 

Пользователь сам определяется, какие из полей таблицы будут Измерениями, какие Данными и какие Фильтры применять. Система сама строит отчет в наглядной табличной форме. Измерения можно размещать в заголовках строк или столбцов таблицы отчета.
Как видно, из одной простой таблицы можно получить множество данных в виде различных отчетов.


Как использовать у себя:

Данные из дистрибутива распаковать именно в каталог c:fixin (для торговой системы возможно в c:
eports)
. Прочитайте readme.txt и выполните все инструкции в нем.

Сначала вы должны написать обработку, которая выгружает данные из 1С в текстовый файл (таблицу). Вам нужно определить состав полей, которые будут выгружаться.
Например, уже готовая универсальная обработка, которая работает в любой конфигурации и выгружает для OLAP-анализа проводки за период, выгружает для анализа следующие поля:

Дата|ДеньНедели|Неделя|Год|Квартал|Месяц|Документ|Фирма|Дебет|ДтНоменклатура
|ДтГруппаНоменклатура|ДтРазделНоменклатура|Кредит|Сумма|ВалСумма|Количество
|Валюта|ДтКонтрагенты|ДтГруппаКонтрагенты|КтКонтрагенты|КтГруппаКонтрагенты|
КтРазныеОбъекты

Где под префиксами Дт(Кт) идут субконто Дебета (Кредита), Группа — это группа данного субконто (если имеется), Раздел — группа группы, Класс — группа раздела.

Для торговой системы поля могут быть такие:

Направление|ВидДвижения|ЗаНал|Товар|Количество|Цена|Сумма|Дата|Фирма
|Склад|Валюта|Документ|ДеньНедели|Неделя|Год|Квартал|Месяц|Автор
|КатегорияТовара|КатегорияДвижения|КатегорияКонтрагента|ГруппаТовара
|ВалСумма|Себестоимость|Контрагент 

Для анализа данных используются таблицы «Анализ движений.xls» ( «Анализ бухгалтерии.xls» ). Открывая их, не отключайте макросы, иначе вы не сможете обновлять отчеты (они запускаются макросами на языке VBA). Исходные данные эти файлы берут из файлов C:fixinmotions.txt (C:fixinuh.txt), в остальном они одинаковые. Поэтому возможно, вам придется скопировать ваши данные в один из этих файлов.
Чтобы в EXCEL загрузились ваши данные, выберите или напишите свой фильтр и нажмите кнопку «Сформировать» на листе «Условия».
Листы отчетов начинаются префиксом «Отч». Перейдите на лист отчета, нажмите «Обновить» и данные отчета изменятся в соответствии с последними загруженными данными.
Если вас не устраивают стандартные отчеты, есть лист ОтчШаблон. Скопируйте его в новый лист и настройте вид отчета, работая со сводной таблицей на этом листе (о работе со сводными таблицами — в любой книге по EXCEL 2000). Рекомендую настраивать отчеты на небольшом наборе данных, а затем уже запускать их на большом массиве, т.к. нет никакой возможности отключить перерисовку таблиц при каждом изменении макета отчета.

Технические комментарии:

При выгрузке данных из 1С пользователь выбирает папку, куда ему выгружать файл. Я сделал это потому, что вполне вероятно в ближайшем будущем будут выгружаться несколько файлов (остатки и движения). Затем по нажатию в Проводнике кнопки   «Отправить» —> «На OLAP-анализ в EXCEL 2000» данные копируются из выбранной папки в папку C:fixin. (чтобы эта команда появилась в списке команды «Отправить» и нужно скопировать файл «На OLAP-анализ в EXCEL 2000.bat» в каталог C:WindowsSendTo) Поэтому выгружайте данные сразу давая имена файлам motions.txt или buh.txt.

Формат текстового файла:
Первая строка текстового файла — заголовки колонок разделенные «|», остальные строки содержат значения этих колонок, разделенные «|».

Для импорта текстовых файлов в Excel используется Microsoft Query (составная часть EXCEL) для его работы необходимо наличие в каталоге импорта (C:fixin) файла shema.ini, содержащего следующую информацию:

[motions.txt]
ColNameHeader=True
Format=Delimited(|)
MaxScanRows=3
CharacterSet=ANSI
[buh.txt]
ColNameHeader=True
Format=Delimited(|)
MaxScanRows=3
CharacterSet=ANSI


Пояснение: motions.txt и buh.txt — это название раздела, соответствует имени импортируемого файла, описывает, как импортировать текстовый файл в Эксель. Остальные параметры означают, что первая строка содержит названия колонок, разделителем колонок является «|», набор символов — Windows ANSI (для ДОС — OEM).
Тип полей определяется автоматически исходя из содержащихся в колонке данных (дата, число, строка).
Перечень полей не нужно нигде описывать — EXCEL и OLAP сами определят, какие поля содержатся в файле по заголовкам в первой строке.

Внимание, проверьте ваши региональные настройки «Панель управления» —> «Региональные настройки» . В моих обработках числа выгружаются с разделителем запятая, а даты в формате «ДД.ММ.ГГГГ».

Дополнительно:

Рекомендуется также изучить любую книгу по EXCEL 2000 с описанием
сводных таблиц.

Данные при нажатии кнопки «Сформировать» загружаются в сводную таблицу на листе «База», а из этой сводной таблицы и берут данные все отчеты на листах «Отч».

Я понимаю, что любители MS SQL Server и мощных баз данных начнут ворчать, что у меня слишком все упрощено, что моя обработка загнется на годичной выборке, но в первую очередь я хочу дать преимущества OLAP-анализа для средних организаций. Я бы позиционировал этот продукт как инструмент годичного анализа для оптовых компаний, квартального анализа для розничной торговли и оперативного анализа для любой организации.

Мне пришлось повозиться с VBA, чтобы данные брались из файла с любым списком полей и можно было заранее готовить бланки отчетов.

Описание работы в EXCEL (для пользователей): 

Инструкция по использованию отчетов:
1. Отправьте на анализ выгруженные данные (уточните у администратора). Для этого нажмите правой кнопкой на папке, в которую у вас выгрузились данные из 1С и выберите команду «Отправить», затем «На OLAP-анализ в EXCEL 2000».
2. Откройте файл «Анализ движений.xls»
3. Выберите Значение фильтра, нужные вам фильтры можно дописать на закладке «Значения».
4. Нажмите кнопку «Сформировать», при этом выгруженные данные будут загружены в EXCEL.
5. После загрузки данных в EXCEL, можно смотреть различные отчеты. Для этого достаточно нажать кнопку «Обновить» в выбранном отчете. Листы с отчетами начинаются на Отч.
Внимание! После того как вы поменяете значение фильтра, нужно еще раз нажать кнопку «Сформировать», чтобы данные в EXCEL перезагрузились из файла выгрузки в соответствие с фильтрами.

Обработки из демо-примера: 

Обработка motionsbuh2011.ert – последняя версия выгрузки проводок из Бухгалтерии 7.7 для анализа в Excel. В ней есть галочка «Присоединить в файл», которая позволяет выгружать данные частями по периодам, присоединяя их в один и тот же файл, а не выгружая в один и тот же файл заново:

Обработка motionswork.ert выгружает данные о продажах для анализа в Excel.

Примеры отчетов:

Шахматка по проводкам:

Рейтинг групп по неделям:

Рейтинг товаров по месяцам:

Загруженность операторов по видам накладных:

P.S.: 

Понятно, что по аналогичной схеме можно организовать выгрузку данных из 1С8.
В 2011 году ко мне обращался пользователь, которому нужно было доработать эту обработку в 1С7, чтобы она выгружала большие объемы данных, я нашел аутсорсера и выполнил эту работу. Так что разработка вполне актуальна.

Обработка motionsbuh2011.ert доработана, чтобы справляться с выгрузкой большого объема данных.

11 Comments

  1. w22u

    Давно свои таблички с данными хотел в ОЛАП покрутить, теперь время до этого события сильно сократится. Спасибо за статью.

    Reply ↓
  2. fixin

    (1) ну это не совсем OLAP, но очень на него похоже. По крайней мере шаг в нужном направлении, тем более, что эксель всегда под рукой.

    Reply ↓
  3. sCHTASS

    Ничего нового не увидел, но за труд однозначно плюс. Статья, полагаю, будет полезна для начинающих.

    Reply ↓
  4. elkpro

    Почему автор не использует разработку

    Консоль и расширения запросов 1С++ ?

    http://www.1cpp.ru/forum/YaBB.pl?num=1193394153

    Намного легче один раз сделать отчет и предоставить пользователю уже готовый выходной отчет на OWC (Office Web Components). Интерфейс у него намного читабельнее, чем у той же встроенной в Excel Pivot Table.

    OWC живет отдельно без Оффиса.

    Reply ↓
  5. fixin

    (4) ну видимо я тогда не знал об этом «намного более легком способе». Напишите статью, пойдем по вашим стопам, теперь уже в 1с8. Но если для этого нужно 1С++, боже упаси… Никогда его не юзал, хотя может и неплохая вещ.

    К тому же мой метод не требует 1C++

    Как вариант можно создавать лист Excel и на лету генерить сводную таблицу, но это не очень просто. Проще дать юзверю ковыряться.

    Reply ↓
  6. Styvi

    Жаль, что это для 1С77 — надеялся что-то покрутить в 1С81…

    За работу, присоединяюсь — плюс…

    Reply ↓
  7. fixin

    (6) посмотри принцип и прикрути в 1с8. ПО сути, требуется только выгрузка в текстовый файл сырых данных.

    Для 8-ки — тривиально.

    Reply ↓
  8. ta44ik

    А ексель не загнется от приличного количества данных? Если скажем тыщ пятьдесят движений в день да за годик-другой?

    Reply ↓
  9. fixin

    (8) ну он же берт данные из внешнего источника, а не из листа… не должон…

    Reply ↓
  10. igor_1c

    а сайтик http://www.molap.ru вроде как уже не работает

    Reply ↓
  11. fixin

    (10) усе течет, усе меняется.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *