OLAP - это просто
Удивительное - рядом ...
По ходу
работы мне часто требовалось делать сложные отчеты, я все время пытался найти в
них что-то общее, чтобы составлять их более просто и универсально, даже написал
и опубликовал по этому поводу статью «Дерево Осипова». Однако мою статью
раскритиковали и сказали, что все те проблемы, которые я поднял, давно уже
решены в OLAP (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:\reports). Прочитайте readme.txt и выполните все инструкции в нем.
Сначала
вы должны написать обработку, которая выгружает данные из 1С в текстовый файл
(таблицу). Вам нужно определить состав полей, которые будут выгружаться.
Например, уже готовая универсальная обработка, которая работает в любой
конфигурации и выгружает для OLAP-анализа проводки за период, выгружает для
анализа следующие поля:
Дата|ДеньНедели|Неделя|Год|Квартал|Месяц|Документ|Фирма|Дебет|ДтНоменклатура
|ДтГруппаНоменклатура|ДтРазделНоменклатура|Кредит|Сумма|ВалСумма|Количество
|Валюта|ДтКонтрагенты|ДтГруппаКонтрагенты|КтКонтрагенты|КтГруппаКонтрагенты|
КтРазныеОбъекты
Где под префиксами Дт(Кт) идут субконто Дебета (Кредита), Группа - это группа
данного субконто (если имеется), Раздел - группа группы, Класс - группа
раздела.
Для торговой системы поля могут быть такие:
Направление|ВидДвижения|ЗаНал|Товар|Количество|Цена|Сумма|Дата|Фирма
|Склад|Валюта|Документ|ДеньНедели|Неделя|Год|Квартал|Месяц|Автор
|КатегорияТовара|КатегорияДвижения|КатегорияКонтрагента|ГруппаТовара
|ВалСумма|Себестоимость|Контрагент
Для
анализа данных используются таблицы "Анализ движений.xls" (
"Анализ бухгалтерии.xls" ). Открывая их, не отключайте макросы, иначе
вы не сможете обновлять отчеты (они запускаются макросами на языке VBA).
Исходные данные эти файлы берут из файлов C:\fixin\motions.txt
(C:\fixin\buh.txt), в остальном они одинаковые. Поэтому возможно, вам придется
скопировать ваши данные в один из этих файлов.
Чтобы в EXCEL загрузились ваши данные, выберите или напишите свой фильтр и
нажмите кнопку "Сформировать" на листе "Условия".
Листы отчетов начинаются префиксом "Отч". Перейдите на лист отчета,
нажмите "Обновить" и данные отчета изменятся в соотсветсвии с
последними загруженными данными.
Если вас не устраивают стандартные отчеты, есть лист ОтчШаблон. Скопируйте его
в новый лист и настройте вид отчета, работая со сводной таблицей на этом листе
(о работе со сводными таблицами - в любой книге по EXEL 2000). Рекомендую
настраивать отчеты на небольшом наборе данных, а затем уже запускать их на
большом массиве, т.к. нет никакой возможности отключить перерисовку таблиц при
каждом изменении макета отчета.
Технические комментарии:
При
выгрузке данных из 1С пользователь выбирает папку, куда ему выгружать файл. Я
сделал это потому, что вполне вероятно в ближайшем будующем будут выгружаться
несколько файлов (остатки и движения). Затем по нажатию в Проводнике кнопки
"Отправить" --> "На OLAP-анализ в EXCEL 2000"
данные копируются из выбранной папки в папку C:\fixin. (чтобы эта команда
появилась в списке команды "Отправить" и нужно скопировать файл
"На OLAP-анализ в EXCEL 2000.bat" в каталог C:\Windows\SendTo)
Поэтому выгружайте данные сразу давая имена файлам 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 доработана, чтобы справляться с выгрузкой большого объема данных.