воскресенье, 15 марта 2015 г.

Поднажмем, ребята!

Еще участь в институте услышал замечательный рассказ нашего преподавателя по макроэкономике:
Еще во времена существования СССР и ГДР проводились постоянные совместные мероприятия по оценке работников производства.
Очередное такое мероприятие должно было проходить у немецких коллег.
Наши передовики приехали и были проинструктированы руководством: "Не подкачайте, ребята! Поднажмите! Вся страна смотрит на вас!"
Начался трудовой конкурс.
Смысл простой - выточить на токарном станке определенное количество деталей (ну скажем 10) за выделенное время.
После выполнения счет оказался разгромным:
- число готовых деталей у немцев 8-9.
- а у наших по 12-14!
Руководство ликовало! Разгромная победа.
Вот только победу присудили немцам. С советом разогнать "этих бездырей побыстрее".
Как же так, ведь они сделали больше!
А больше 10 деталей нельзя было сделать число технологически в указанное время.
На это не рассчитан ни станок, ни материал.
В итоге: дорогостоящий резец "запорот". Все изготовленные детали с микротрещинами содержит брак.

Также и с людьми.
Постоянные "поднажимания", overtime'ы и работа на выходных оставляют "трещинки" и в каждом члене команды.
И неизвестно когда же скажется "усталость металла"...
Не говоря уже о том, что в подобных гонках как правило рождается только хардкод и костыли.




четверг, 17 мая 2012 г.

Настройка синхронизации Share Point, Reporting Services и Analysis Services

Встала задача по настройке ежедневной синхронизации БД Share Point, Reporting Services и Analysis Services.
1. Создаем в SQL Server БД для хранения синхронизированных данных для Reporting Services.
Назовем её My_project_reporting
2. Создаем хранимую процедуру очистки всех таблиц БД.
Исходный код возьмем такой:
ALTER PROCEDURE [dbo].[ClearAll]
AS
BEGIN
DECLARE tables_cursor CURSOR
FOR SELECT name FROM sysobjects WHERE type = 'U'
OPEN tables_cursor
DECLARE @tablename sysname
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
EXEC ('TRUNCATE TABLE [' + @tablename+']')
FETCH NEXT FROM tables_cursor INTO @tablename
END
DEALLOCATE tables_cursor
END
 3. Создаем в Business Intelligence пакет служб SSIS
- Первым его шагом будет выполнение хранимой процедуры очищения таблиц сервер.
- Далее последовательно пробрасываем данные из списков SharePoint в таблицы SQL Server.
4. Создаем необходимый куб\кубы данных и разворачиваем их на сервере. 
5. Далее требуется настройка синхронизации Sharepoint и наших служб отчетности.
Отдадим этот функционал SQL Agent'у.
_____
1. Ищем ветку SQL Server Agent - Задания
2. Создаем новое Задание.
3. На закладке "Основное" задаем имя Задания4. Переходим на закладку "Шаги":
  • Первым шагом выполняем синхронизацию списков SharePoint и SQL Server Database посредством выполнения SSIS пакета передачи данных.
  •  Последующими шагами обновляем БД olap-кубов.
5. В поле "Тип" выбираем "Команда служб SQL Server Analysis Services"
6. В поле "Сервер" указываем сервер служб Analysis Services.
7. В поле "Команда" прописываем, где My_relationBD_for_Olap - имя реляционной БД, куда разворачивается куб.
<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <ErrorConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2">
        <KeyNotFound>ReportAndContinue</KeyNotFound>
        <KeyErrorAction>ConvertToUnknown</KeyErrorAction>
        <KeyErrorLimitAction>StopProcessing</KeyErrorLimitAction>
        <KeyDuplicate>IgnoreError</KeyDuplicate>
        <NullKeyConvertedToUnknown>IgnoreError</NullKeyConvertedToUnknown>
        <NullKeyNotAllowed>ReportAndContinue</NullKeyNotAllowed>
    </ErrorConfiguration>
    <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2">
        <Object>
            <DatabaseID>
My_relationBD_for_Olap</DatabaseID>
        </Object>
        <Type>ProcessFull</Type>
        <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
    </Process>
</Batch>
8. Переходим на закладку "Расписания" и указываем ежедневное обновление. (Мне удобнее в час ночи, т.к. нагрузка на сервер минимальная)
9. Не дожидаясь срабатывая Задания по расписанию запускаем его и смотрим результат.

понедельник, 14 мая 2012 г.

Определение "бизнес-требования"

В прошлую субботу (12.05) вместе с коллегами предавались бизнес-аналитическим увеселениям на лоне природы.
В ходе обсуждения характеристик качества требований у совершенно постороннего человека возник вопрос: а что такое "бизнес-требования"?
Очень долго пытались сформулировать описание для человека ни коем образом к iT не имеющего отношения. В итоге абсолютным большинством пришли  к выводу, что это требования, которые Заказчик заявляет для увеличения своей прибыли.


И столько я не упирался, видимо тут сработал рефлекс собачки Павлова: "лампочка загорается - собачке дают покушать". Для коллег этим условным рефлексом стала фраза: "бизнес-деньги".


Попробуем разобраться что такое бизнес и  из чего он состоит:

Статья с wiki (фрагмент): Предпринимательство, бизнес — самостоятельная, осуществляемая на свой риск деятельность, направленная на систематическое получение прибыли от пользования имуществом, продажи товаров, выполнения работ или оказания услуг лицами, зарегистрированными в этом качестве в установленном законом порядке. ...


И тут принципиально важное слово - "деятельность".
Если вбить "business" в любой он-лайн словарь, то первые три варианта - дело, работа, деятельность...

Итого определение"бизнес требований" укладывается для меня в следующей формулировке?
Бизнес-требования - это требования к изменению (рефакторингу) или созданию новых рабочих процессов внутри организационной структуры, предоставляемые Заказчиком, которые позволяют осуществлять деятельность с лучшими показателями эффективности.

Да, тут ни слова о деньгах.
Ведь не все бизнес-требования нацелены на прямое получение прибыли.
Более того, в сфере iT я вообще редко встречал описание требований напрямую указывающих своей целью увеличение прибыли Заказчика. Но основываясь только на общем определении мы вычеркиваем массу требований и проектов.

P.S. Да, и это тоже "Бритва Оккама"...
http://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA%D0%BA%D0%B0%D0%BC%D0%B0


среда, 6 июля 2011 г.

Подходы

Разработчик: "Инкапсуляция позволяет скрыть реализацию метода класса!"
Аналитик \ Архитектор: "Инкапсуляция позволяет создать иллюзию простоты объекта для пользователя."

понедельник, 11 апреля 2011 г.

Миша снова жжёт

[18:13:51] Миша: слушай, давай так, ты ведь можешь на ммрдев зайти по рдп?
[18:14:44] EZ: не, я параметров доступа не знаю, я только на mrr сижу
[18:17:14] Миша: но хотя бы теоретически, ведь можешь?
[18:18:20] EZ: ну теоретичесски я могу уе...ть Годзиллу!

четверг, 7 апреля 2011 г.

Классификация субсидий в бюжетной росписи

Итак, единственный способ вытащить субсидии по соответствующему ГРБСу - это найти их в бюджетной росписи.
Напоминаю, что строка таблицы бюджетной росписи состоит из следующих столбцов:
  1. Название
  2. Код
  3. ГРБС
  4. Раздел
  5. Подраздел
  6. Целевая статья расходов
  7. Вид расходов
  8. Сумма
Как видно из представленной структуры выделить строки бюджетной росписи для конкретного ГРБСа легко.
Однако как выделить определенные типы субсидий из всех оставшихся строк:
К сожалению, на данный момент анализ можно провести только чисто семантически, без описания четкого математического алгоритма.

Текущие субсидии:
Вид расходов =  010
ЦСР = любая, кроме 100... и 102...

Программные капитальные субсидии  (Субсидии по программной части работ по капитальному строительству)
Вид расходов = 020
ЦСР = 100...

Программные НЕкапитальные субсидии  (Субсидии по программной части работ, не относящимся к капительным строительствам)
Вид расходов = 010
ЦСР = 100...

НЕпрограммные капитальные субсидии (Субсидии по НЕпрограммной части работ по капитальному строительству)
Вид расходов = 020
ЦСР = 102...

понедельник, 28 марта 2011 г.

Бюджетная роспись: что же это такое?

Бюджетная роспись - это документ, который составляется и ведется главным распорядителем бюджетных средств (главным администратором источников финансирования дефицита бюджета) в соответствии с Бюджетным кодексом в целях исполнения бюджета по расходам (источникам финансирования дефицита бюджета).
Бюджетная роспись устанавливает распределение бюджетных ассигнований между получателями бюджетных средств и составляется в соответствии с бюджетной классификацией. 
Бюджетная классификация — группировка доходов, расходов и источников финансирования дефицитов бюджетов бюджетной системы Российской Федерации, используемая для составления и исполнения бюджетов, составления бюджетной отчётности, обеспечивающая сопоставимость показателей бюджетов бюджетной системы Российской Федерации.
 (с) Бюджетнай кодек РФ, при помощи ru.Wikipedia.org

Но это все теория, а как же она выглядит в действительности?
В действительности одна из затрат бюджета выглядит так:


Соответствующая иерархическая структура бюджетной росписи показывает каждый уровень.
На данном примере "Министерство промышленности и торговли" - это ГРБС.
"Общегосударственные вопросы" - раздел
И т.д.
На самом деле в вопросе мониторинга субсидий нам необходимо знать целевую статью расходов, а не вид расходов.
Именно целевая статья определяет показатели субсидии.
Собственно, на мониторинге целевых статей и производится анализ результативности от выделения средств по субсидии.
Поэтому в формах по мониторингу и бюджетированию субсидий целевая статья находится на самом нижнем уровне иерархии.

P.S. Полностью бюджетную росписть можно найти на сайте МинФина на любой год.
Она находится в свободном доступе и любой желающий может скачать её из с официального сайта.
Суммы я решил закрасить просто для порядка.