powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / реализация управленческого учета
23 сообщений из 48, страница 2 из 2
реализация управленческого учета
    #38325548
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987s_ustinovесли же надо сохранять информацию и о документе расходов, то тогда надо добавить поле "Document Expenses ID" - и в табличке будет в несколько раз больше строк - то есть сотни миллионов записей
так.... Т.е. не копировать кучу фактов из 10-ка т.фактов в одну большую, а сделать "справочник привязки": в каждой т.фактов есть поле id на каждую запись, в таблице разносок так же есть поле id. И вместо
Код: sql
1.
2.
3.
insert into BigFacts
(ГодМесяц, ВидПродукции, ТипПродукции, Менеджер, ТипКлиента, КодКлиента, СуммаРасходов)
<большой запрос>


будет
Код: sql
1.
2.
3.
insert into FactsLookup
(FactId, OutlayId)
<большой запрос>


т.е. каждую разноску "разбрасываем" по фактам. Получается, на одном факте может "висеть" несколько разносок.
Например, разноска "Расход 50тыр. Менеджер Петров" должна быть раскидана на отгрузки всех клиентов, у которых менеджер Петров.
При этом разноска "Расход 100тыр. Продукция Гвозди" так же может распределиться на какие-то отгрузки менеджера Петрова, т.к. части его клиентов могли отгружаться гвозди.
Таким образом на одних и тех же фактах будут висеть расходы по менеджеру Петрову и по продукции "Гвозди".

И вот когда построили справочник привязки, можно довольно простым update'ом раскидать сумму расходов пропорционально отгрузкам по каждому факту: чем бОльшая сумма отгрузки на факте, тем бОльшая часть привязанных к нему расходов вешается на него.

так?

буквально в прошлом месяце делал выгрузку цен и остатков для клиентов, которые желают получать это по почте.
Цены зависят от нескольких условий.
В итоге вместо генерации одной таблички на 100 миллионов строк посчитал, что быстрее создавать две таблички по 450 и 170 тысяч строк (одна для товаров, другая для клиентов и их всевозможных спецусловий), а результирующая табличка, откуда и идет выгрузка, в системе не хранится, а является представлением.
разница в скорости между этими двумя вариантами - в десятки раз.

так что однозначного ответа нет - надо сидеть, смотреть и считать.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325602
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору настоятельно рекомендую ознакомиться с SSAS. Писать аналитику на колене - жуть.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325609
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987,

Проблема только в том, что очень долго считается?

Я бы предложил ввести Базы распределения. Строго говоря, для распределения вам не нужны 10кк строк факта, а только их агрегаты по месяцам/клиентам/продуктам. Собственно реализация баз распределения в данном случае может быть таблица/вьюха, содержащая годмесяц/клиента/продукт/относительную долю. Сам я всегда делаю отдельную таблицу, т.к. разные затраты могут распределяться по разным принципам и в несколько заходов.

Что касается самого распределения затрат.
Результирующая таблица получается хотя и многомиллионная, но узкая, и если делать на интах - весьма лёгкая.
Опять таки, обычно распределяется "небольшой" кусок данных. В идеале - месяц, но, по разным причинам, чаще всего, - год.
То есть смысл в том, что бы распределять только актуальные данные, и не дай бог не перераспределять то, что и так уже распределено ранее.

Ну и я не уверен насчёт SQL Server 2000. Я бы посоветовал что-нибудь поновее - возможности оптимизации шире и глубже будут.
Опять таки, ваша БД единственная на сервере, соседи ей не мешают?
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325621
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАвтору настоятельно рекомендую ознакомиться с SSAS.
нуб987реализовано все на MSSQL 2000
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325630
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenHimОпять таки, обычно распределяется "небольшой" кусок данных. В идеале - месяц, но, по разным причинам, чаще всего, - год.
То есть смысл в том, что бы распределять только актуальные данные, и не дай бог не перераспределять то, что и так уже распределено ранее.
в этом вся загвоздка. ТС как-то загадочно все время отвечает на такой вопрос, я так и не понял: все данные от "начала времен" пересчитываются что-ли при каждом месячном распределении.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325631
нуб987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАвтору настоятельно рекомендую ознакомиться с SSAS. Писать аналитику на колене - жуть.
если вы про кубики, то они есть. Все эти расчеты ведутся для их заполнения. Далее этот кубик по управленческому учету смотрят наши аналитики.
ElenHimнуб987,
Проблема только в том, что очень долго считается?
нет, проблема в том, что мне кажется , что подход не совсем верен. Ну и пересчитывается обычно все сразу (постоянно есть какие-то корректировки в данных по расходам), т.е. да, время тратится не мало на все это.
Я вижу, чего можно поменять в коде для некоторого ускорения процесса. Но для начала стоит разобраться, не нужно ли переписать все вообще по-другому.
ElenHimОпять таки, ваша БД единственная на сервере, соседи ей не мешают?
база не единственная, но соседи не мешают
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325700
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987мне кажется, что подход не совсем верен
В таком случае трудно что-либо посоветовать. Если система свою задачу решает и решает правильно - то какой смысл её переосмысливать? Вот если появилась необходимость её каим-то образом модифицировать, а текущая модель этого не приемлет - тогда да.
нуб987постоянно есть какие-то корректировки в данных по расходам
Но не с начала же времён? Управленческий учёт всё-таки не с потолка берётся, а так или иначе коррелирует с бухучётом. А в бухучёте с отчётными периодами должно быть строго. На крайний случай - что-то в прошлом периоде(году) могут изменить, но позапрошлый и далее - все уже и помнить забыли.

Получается, на данный момент, можно говорить только об ускорении расчётов, но, если каждый раз всё пересчитывать заново, - существенного прироста не добиться
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325729
нуб987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenHimЕсли система свою задачу решает и решает правильно - то какой смысл её переосмысливать?
например, на производстве нет компьютеров, все пишут на листочках и считают на счетах. Все вроде бы работает и приносит прибыль, но как-то неправильно.
Если кругом расставить компьютеры, заменить 1000 человек на 10-рых, производительность станет выше. Подключить интернет и найти больше клиентов - прибыль станет больше. Как-то так...
ElenHimНо не с начала же времён? Управленческий учёт всё-таки не с потолка берётся, а так или иначе коррелирует с бухучётом.
нет, пересчитывается год. На это уходит иногда до суток
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325750
ДжекНепотрошитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987ElenHimЕсли система свою задачу решает и решает правильно - то какой смысл её переосмысливать?
например, на производстве нет компьютеров, все пишут на листочках и считают на счетах. Все вроде бы работает и приносит прибыль, но как-то неправильно.
Если кругом расставить компьютеры, заменить 1000 человек на 10-рых, производительность станет выше. Подключить интернет и найти больше клиентов - прибыль станет больше. Как-то так...

А если не абсурдный "например", а что-то из реальной жизни? Ведь здесь речь идет не о замене клерков на компьютере, а об изменении алгоритма работы системы, которая уже функционирует. Будет ли игра стоить свеч?
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325763
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987,

не нужно вырывать фразы из контекста, изначально было так:

ElenHimЕсли система свою задачу решает и решает правильно - то какой смысл её переосмысливать? Вот если появилась необходимость её каим-то образом модифицировать, а текущая модель этого не приемлет - тогда да.


И сюда укладываются все примеры, которые вы привели.

Другое дело, что для своего случая, вы никакой подобной цели не ставите, а руководствуетесь вашим "кажется"
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325765
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987нет, пересчитывается год. На это уходит иногда до суток
первое - поменять субд
в новых версиях много вкусностей

второе - проанализировать - какие данные нужны аналитикам.
очень вероятно, что им нужны почти всегда агрегированные данные (по группам товаров и группам клиентов), а детальные - по конкретному документу (товару, клиенту) смотрятся очень редко. в таком случае заполнять табличку агрегированными данными, а детальные не трогать и считать селектами только под конкретный запрос.
вообще эти все вопросы относятся к области BI / DW / OLAP - почитайте соответствующие форумы на этом сайте
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325922
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovнуб987нет, пересчитывается год. На это уходит иногда до суток
первое - поменять субд
в новых версиях много вкусностей
здесь все же решаются технологические и общаются разработчики вопросы. Впаривание - в других.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325929
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovэти все вопросы относятся к области BI / DW / OLAP - почитайте соответствующие форумы на этом сайте
с самого начала ясно, что никакого отношения к перечисленному тема не имеет. К тому же в озвученной ветке обсуждаются конкретные продукты, а не BI/DWH/OLAP как таковые.
У ТС вопрос в том, что хранить и как выполнять расчеты, а не на чем
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325951
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987Подскажите пожалуйста, в какую сторону копать и что почитать ?

iscrafm К тому же в озвученной ветке обсуждаются конкретные продукты, а не BI/DWH/OLAP как таковые.
У ТС вопрос в том, что хранить и как выполнять расчеты, а не на чем

Да ну?
а у ТС немного другое мнение, какие именно вопросы он хотел бы обсудить...
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38325979
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovнуб987Подскажите пожалуйста, в какую сторону копать и что почитать ?

iscrafm К тому же в озвученной ветке обсуждаются конкретные продукты, а не BI/DWH/OLAP как таковые.
У ТС вопрос в том, что хранить и как выполнять расчеты, а не на чем

Да ну?
а у ТС немного другое мнение, какие именно вопросы он хотел бы обсудить...

прочитайте топик с начала. Я понимаю что вы консультант, а не разработчик, но вопросы все подняты на поверхность, нет ничего не понятного, имхо. Более менее близкий к разработке приложений человек должен понять о чем речь идет. А для обсуждения конкретных продуктов действительно есть соответствующие ветки. Если ТС скажет, что хочет воспользоваться чем-то готовым, то можно направить его в них.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38326030
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmпрочитайте топик с начала. Я понимаю что вы консультант, а не разработчик, но вопросы все подняты на поверхность, нет ничего не понятного, имхо. Более менее близкий к разработке приложений человек должен понять о чем речь идет. А для обсуждения конкретных продуктов действительно есть соответствующие ветки. Если ТС скажет, что хочет воспользоваться чем-то готовым, то можно направить его в них.
я читал.
человеку интересно почитать про подходы, которые применяются для решения определенных задач (с какими он столкнулся)
вообще-то термин Data Warehouse относится к классу технологий и как раз в том числе включает в себя описание используемых подходов к решению определенного класса задач.
кстати, многие хранилища создаются на самых обычных субд, но с немного другой структурой базы, чем для OLTP задач
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38326032
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38326056
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinoviscrafmпрочитайте топик с начала. Я понимаю что вы консультант, а не разработчик, но вопросы все подняты на поверхность, нет ничего не понятного, имхо. Более менее близкий к разработке приложений человек должен понять о чем речь идет. А для обсуждения конкретных продуктов действительно есть соответствующие ветки. Если ТС скажет, что хочет воспользоваться чем-то готовым, то можно направить его в них.
я читал.
человеку интересно почитать про подходы, которые применяются для решения определенных задач (с какими он столкнулся)
вообще-то термин Data Warehouse относится к классу технологий и как раз в том числе включает в себя описание используемых подходов к решению определенного класса задач.
кстати, многие хранилища создаются на самых обычных субд, но с немного другой структурой базы, чем для OLTP задач
вы мне так рассказываете, как будто студенту на лекциях. Можно упустить всю беллетристику :)
У ТС конкретная проблема, даже не проблема а вопрос: правильно ли он поступает перегоняя данные из операционных таблиц фактов в общую таблицу хранилища и выполняя в ней расчеты. Ответ, поверхностный - да правильно, это общепринятая и опробованная практика. Почему поверхностный? Потому что детали не известны, по какой-то причине он все постоянно пересчитывает и этот процесс занимает иногда сутки. Вот в общем-то и вся суть темы. Конечно можно сподвигнуть ТС на то, чтобы он повернул в сторону новых версий и т.п., но это будет хорошим советом только в безвыходной ситуации. Для начала можно попытаться помочь разобраться в существующей проблеме.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38326118
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmМСУАвтору настоятельно рекомендую ознакомиться с SSAS.
нуб987реализовано все на MSSQL 2000
http://technet.microsoft.com/en-us/library/cc917607.aspx

P.S. А вообще не вижу проблем обновиться до адекватной версии.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38326120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987МСУАвтору настоятельно рекомендую ознакомиться с SSAS. Писать аналитику на колене - жуть.
если вы про кубики, то они есть. Все эти расчеты ведутся для их заполнения. Далее этот кубик по управленческому учету смотрят наши аналитики.
Кубы есть на чем, на SSAS? Так тормозит процессинг куба или ETL? Если кубы самописные и их процессинг тормозит - сразу это на свалку.
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38330059
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуб987нет, пересчитывается год. На это уходит иногда до суток
год-то зачем???
Используй инкрементальный процессинг!!
Т.е. алгоритм такой:
1. всегда храни что у тебя изменилось в твой таблице разносок с момента последнего пересчета. (доп. поле в этой же таблице с датой последнего апдейта/инсерта можно)
2. при необходимости пересчета из таблицы разносок формируй список месяцов+товаров+клиентов которые надо пересчитать.
3. пересчитаывй ТОЛЬКО их.
---------------------------------
в принципе таким макаром можно хоть ежедневно считать
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38367493
kain111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у нас примерно схожая система. регистрация факта в САП. оттуда на прямую из табличек идут фактуры по продажам. справочники товаров и клиентов kna1 lfa1, затраты по бух счетам и МВЗ MSEG и тд.
Так вот у нас для управленческого учета используется схлопывание данных до ключа. клиент, период, артикул. канал продажи, регион а поля уже агрегированные затраты предварительно распределенные по ключам как указывал ТС, например затраты региональной команды на конкретный регион, затраты рекламы определенного бренда только на продукцию этого бренда. Делается во много промежуточных этапов (временные и не очень таблицы), агрегирую до ключа и затем результат переливается в таблицу
Т.е. нужно понять какая детализация информации нужна. На концах ключа у нас агрегированыне факты разбитые по основным видам, например ключ- транспорт, склады, маркетинг, амортизация оборудования, продажники, листинги,стадии производства. Есть контрольные точки учета агрегирующие группы затрат, DB1-4 на которые ставятся цели разным отделам.
У нас все довольно серьезно,- с начислением акруалов и утверждением результатов месяца. потмоу предыдущие периоды мы почти не пересчитываем. Для конкретных затрат на клиента или бренд используются внутренние заказы.
Есть еще один куб в котором уже информация по этим самым затратам. ну например видно что по бух счету такому то в разрезе МВЗ зарплатные затраты. К сожалению информации о количественном распределении со счета на конкретного клиента канала бренда месяц у нас не сохраняется из за вот таких вот проблем с производительностью.
Затраты у нас начисляются на продажи. с этого все начинается и возникают коллизии когда клиент только открывается и ничего ен продал а затраты уже имеет. мы их распределяем на остальных клиентов региона.
Много нюансов. Основной посыл как отметил
авторЯ бы предложил ввести Базы распределения. Строго говоря, для распределения вам не нужны 10кк строк факта, а только их агрегаты по месяцам/клиентам/продуктам. Собственно реализация баз распределения в данном случае может быть таблица/вьюха, содержащая годмесяц/клиента/продукт/относительную долю. Сам я всегда делаю отдельную таблицу, т.к. разные затраты могут распределяться по разным принципам и в несколько заходов.
агрегация по ключам фактов на которые распределения будут делаться. + у нас очень широкие табличы около 30 полей на каждый ключ( в этом не уверен)
...
Рейтинг: 0 / 0
реализация управленческого учета
    #38419790
нуб987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, переписал всю систему, работает уже больше месяца, вроде все хорошо и все довольны :)
Теперь вместо нескольких суток самый-самый большой упр.учет считается примерно час, плюс процессинг куба еще где-то полчаса-час.
К тому же система стала легко масштабируемой: любые дополнения и изменения прозрачны и вносятся легко и быстро.

Попробую описать понятней, что было и что сейчас.

Было:
- десяток т.фактов, объединенных union all
- на каждую разноску был написан большой-большой запрос вида (здесь и скрывалось зло):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into BigFacts
(...)
select ...
from
   (select ... from Facts_2010 union all
    ...
    select ... from Facts_2013) as f,
   Clients c, Products p, ClientTypes ct, ......
where f.ClientId = c.id
   and f.ProdId = p.id
   ...
   <тут еще с десяток условий с or, and, in ()..., обслуживающий только один вид разносок>
group by ...


таких запросов было порядка 20-30. Плюс, если не было нужных отгрузок (например, клиенту Петрову не отгружалась продукция группы "А" в феврале, а затраты были), мы смотрели отгрузки в прошлом ( до февраля) и вешали затраты на те прошлые отгрузки. Т.е. те же самые 20-30 запросов переписывались снова, но в конце вместо
Код: sql
1.
   and f.Date between @date1 and @date2


было
Код: sql
1.
   and f.Date < @date2


а если отгрузок не было и в прошлом, то смотрели "в будущее" до текущего момента.
Т.е. одни и те же запросы повторялись по 3 раза с небольшими изменениями. И чтобы что-то добавить/скорректировать, приходилось долго все искать и перепроверять.

А сейчас в переписанном варианте подход совсем другой.
Сначала идет много подготовительных шагов с простыми запросами, потом собственно сам расчет (тоже оч.простой запрос).
Все разноски мы разбиваем на группы по клиентам и продукции. Для этого ввели справочник таких групп для клиентов и справочник для продукции примерно такого вида:
GroupIdClientId
GroupIdProdId
Для разноски вида "Расход 50тыр. Менеджер Петров, продукция группы А" мы заполняем группы по клиентам: выбираем всех клиентов, у которых менеджер Петров - это будет группа 1. У клиентов с менеджером Иванов будет группа 2 и т.д., пока не переберем все возможные группы в разносках (по менеджерам, по регионам, по сетям...).
То же по продукции: заполняем справочник групп на каждую группу продукции в разносках, перечисляя коды этой продукции.
Ну и в запись разноски добавляем два поля с кодами этих групп.

Вставка фактов занимает, как оказалось, совсем немного времени, когда запрос простой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into BigFacts
(...)
select ...
from
   (select ... from Facts_2010 union all
    ...
    select ... from Facts_2013) as f,
   ClientGroups cg, ProdGroups pg, <разноски> r
where f.ClientId = cg.ClientId
   and f.ProdId = pg.ProdId
   and r.ClientGroupId = cg.GroupId
   and r.ProdGroupId = pg.GroupId
   and <условие выборки по датам: настоящее, прошлое, будущее>


т.е. этот запрос выше так же повторяется 3 раза, но это не 60 тяжеленных запросов (как раньше), а всего 3. Точнее даже 1, но динамический.
Плюс я все-таки использую курсоры, чтобы не вставлять весь миллиард записей сразу, а вставляю их по месяцам.

В общем, дополнительные подготовительные шаги рулят :) Лучше потратить "лишнее" время на подготовку данных и раскладывание по полочкам, чтобы потом использовать простые запросы с минимумом условий. Чем ковыряться в сырых данных с помощью тяжеленных запросов с кучей условий.

ПС. И этот час занимает полный пересчет самого тяжелого упр.учета. Если пересчитывать только какие-то изменения, то время будет уходить еще меньше. Но для перестраховки пока пересчитываем все заново.
Новая система с достаточным кол-вом подготовительных шагов позволяет легко внести изменения в алгоритм. Так что если возникнет необходимость, ее можно будет легко дополнить и сделать пересчет только того, что изменилось.
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / реализация управленческого учета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]