Kuznetsov — What-if analysis and Write-back

advertisement
9:30
Приветственный кофе
10:00
Ключевой доклад
11:45
Аппаратные решения HP
для платформы Microsoft BI
Microsoft Excel как OLAP клиент.
Преодоление ограничений
Обед
12:45
13:30
Методика построения хранилищ данных на
FastTrack DW и PDW
Анализ «что-если» в Excel 2010 и
OLAP write-back в планировании продаж
14:45
Реляционное моделирование для больших
хранилищ данных
Прогнозирование навигации на сайте
(Data Mining)
Кофе-брейк
16:30
17:00
Анализ вторичных продаж на базе SQL
Server 2008 R2
SQL-клиника
Некоторые сценарии практического
использования DAX в PowerPivot
18:00
Закрытие конференции
18:15
Кофе-брейк
18:30
Лабораторные работы
Не забудьте начать запись доклада!
Анализ «что-если» в Exсel 2010
и OLAP writeback
в планировании продаж
Роман Кузнецов
Вимм-Билль-Данн
Роман Кузнецов
Вимм-Билль-Данн
Руководитель отдела автоматизации
отчетности
Факты из биографии:
 Закончил университет в 1995 по
специальности инженер-геофизик
 Работал программистом, преподавателем,
есть авторские свидетельства на программы
 Начал работу с OLAP системами в 2003 г.
E-mail: krom1971@gmail.com
Содержание








Включение анализа «что-если» и изменение одиночных ячеек. Отмена изменений
и опубликование.
Изменение блока ячеек через Copy/Paste. Защита отдельных ячеек от изменения.
Вычисления.
Распределение внутри блока ячеек. Граничные условия. Метод ортогональных
проекций.
Создание плана на новый продукт. Запись в пустую ячейку. Распределение по
клиентам.
Создание плана на месяц, на основании фактических продаж. Активная база и
комбинации.
Планирование на уровне групп. Применение фильтров «Топ 1». Создание
именованных наборов.
Разное. Совместная работа. Уровни доступа. Таблица WriteTable. Утверждение
плана.
Макросы.
Включение анализа «что-если» в
Excel 2010
Реквизиты
 SSAS 2008
 Куб OLAP с включенной функцией
Writeback
 База данных для хранения таблицы
изменений
 Книга Excel 2010 с подключением к кубу
Шаги настройки таблицы Excel:
 Выбрать ячейку внутри сводной таблицы.
 Выбрать в ленте «Параметры» в меню «Анализ
«что-если» пункт «Включить анализ «что-если».
 В том же меню выбрать пункт «Настройка»
 В диалоге «Настройка» установить все
переключатели на второй пункт. Поле выражения
оставить пустым.
Результат: можно использовать ввод данных с
помощью взвешенного распределения.
Настройки для взвешенного распределения
Должно быть установлено на автоматический
пересчет итогов. Исключение – медленные
компьютеры
Все значения будут пропорционально
увеличены или уменьшены
Будут изменены только ненулевые значения
Оставить пустым. Желательно вообще
запретить изменять, поскольку приводит к
непредсказуемым результатам
Ограничения взвешенного распределения
 Можно изменять только непустые ячейки и
отличные от нуля.
 Можно изменять только числовые показатели, и
только те, что агрегируются в итогах через
суммирование.
 Можно изменять только физические показатели в
кубе, а не вычисляемые.
 В фильтрах сводной таблицы не может быть
выбрано несколько значений в одном измерении.
Публикация изменений на сервере
 Чтобы остальные участники процесса увидели
изменения в плане, нужно их «опубликовать».
 Опубликованные изменения сохранятся в
специальной таблице на сервере.
 До опубликования возможно отменять изменения,
как через меню «анализ «что-если», так и через
обычные операции отмены.
Изменение блока ячеек
Защита отдельных ячеек от изменения
Copy/Paste
 Можно использовать блочные операции Copy/Paste
для массового изменения данных.
 Особенность – если в исходном блоке копируемых
ячеек есть пустые, то в блоке назначения на их
месте значения не изменятся.
 Операции блочного копирования можно отменять
так же, как одиночные изменения.
 Если в исходных ячейках находятся формулы, то
надо использовать «специальную вставку», как
значения.
Защита отдельных ячеек от изменения
 В стандартном функционале сводных таблиц
защита отдельных ячеек от изменений не
предусмотрена.
 Применяется следующий метод – вне сводной
таблицы вычисляются необходимые значения,
которые вставляются, как блок ячеек в план.
Пример
Распределение внутри
блока ячеек
Более сложная задача планирования
 Распределить значения внутри блока ячеек, чтобы
итоговые значения по разным измерениям
равнялись заданным граничным значениям
 Требуется задать допустимую погрешность
 Решается методом ортогональных проекций
 Сходимость за <10 итераций
Пример
Создание плана на новый
продукт
Создание новых данных в кубе
 Требуется ввод в пустую ячейку
 Нужен другой тип распределения – равномерное
 Нужно знать, что распределение произойдет по
всем подчиненным ячейкам
 Надо максимально ограничить число изменяемых
ячеек
Настройки для равномерного распределения
Должно быть установлено на автоматический
пересчет итогов, чтобы сразу видеть изменения
Введенные значения будут распределены
поровну по всем зависимым ячейкам
Будут изменены все подчиненные ячейки
Оставить пустым
Пример
Особенности равномерного распределения
 При вводе в пустую ячейку, план распределяется поровну
по всем подчиненным элементам этой ячейки. Вообще,
следует максимально детально выбирать ячейки,
указывать конкретный продукт/клиента, чтобы избежать
ненужной детализации.
 План распределяется также поровну по всем датам
выбранного периода. В нашем примере план попал
поровну на все дни марта.
 Можно планировать новый продукт аналогично целой
категории продуктов, например разнести план на абрикосы
по клиентам аналогично всей категории «Фрукты».
Создание плана на месяц
Создание плана, аналогичного факту
 На новый период отсутствуют данные
 Нужно перенести существующие комбинации
продукт/клиент
 Нужно избегать создания невозможных/нереальных
комбинаций
 Создается база для последующей коррекции плана
методом ортогональных проекций
 Используются фильтры активных клиентов и
продуктов
Шаги создания нового плана









Скопировать сводную таблицу на тот же лист рядом.
Установить настройки «что-если» для новой таблицы на равномерное распределение.
Переформатировать таблицу в следующий вид: в фильтрах Период=Февраль 2011, Сценарий=Факт, в
заголовках столбцов – ничего, в заголовках строк – коды клиентов.
Чтобы исключить неактивных и случайных клиентов, установить фильтр по кодам клиентов, чтобы
продажи были более 10 кг.
Создать именованный набор для этой активной клиентской базы, вызвав меню «Параметры»/
«Вычисления»/ «Поля, элементы и наборы» / «Создать набор по строкам». В окне диалога «Создание
набора» ввести название набора «АКБ», и удалить последнюю строку «Все» (эту будет полезно в
дальнейшем).
Убрать набор АКБ из строк сводной таблицы, и создать аналогичным образом набор по активной
матрице продукции.
Вывести в заголовки строк оба набора, АКБ и АМП. Вместе они образуют все допустимые комбинации
продукт/клиент по факту февраля, что нам и надо. В заголовки столбцов добавить измерение даты и
установить в нем фильтр на февраль и апрель ( то есть будет источник и приемник данных). Добавить
в заголовки столбцов сценарий.
Установить параметры новой сводной таблицы, на листе «Вывод» отметить флажок «Показывать
элементы без данных в столбцах». Это нужно, чтобы столбец плана, хоть и пустой, отобразился в
таблице. Если нужно сохранять план именно на 1 число апреля, то раскрыть апрель по дням.
Скопировать столбец факта продаж с февраля в план апреля. Опубликовать изменения.
Пример
Ограничения
 В реальных базах приходится создавать тысячи
комбинаций продукт/клиент
 Если существовал прежний план на месяц, его
необходимо удалить, поскольку метод работает
только для пустых ячеек
Планирование на уровне групп
Особенности
 Достаточно планировать на уровне: группа
клиентов и категория продукции
 Функционал обратной записи в куб работает только
на самом детальном уровне
 Договоримся, что каждая группа будет
представлена одним элементом из нее (Топ 1)
 Достаточно планировать на первые числа месяцев
Шаги создания группированного плана










Скопировать сводную таблицу на тот же лист рядом.
Установить настройки «что-если» для новой таблицы на равномерное распределение.
Переформатировать таблицу в следующий вид: в фильтрах Период=Февраль 2011,
Сценарий=Факт, в заголовках столбцов – ничего. Развернуть в заголовках строк следующую
иерархию – Дивизион, Филиал, Канал, Код Клиента.
Для кода клиента выбрать фильтр «Первые 10…»
Настроить фильтр для 1 наибольшего элемента по продажам.
Сохранить именованный набор в строках под именем «Топ 1 по клиентам». Не забыть
убрать из набора элемент «Все» (подитоги нам не нужны).
Аналогично пп.4-6 сделать именованный набор «Топ 1 по продуктам».
Переформатировать сводную таблицу таким образом: в заголовках строк набор «Топ 1 по
клиентам», в столбцах набор «Топ 1 по продуктам», в фильтрах период «1 Апреля 2011» и
сценарий «План». Не забыть включить отображение пустых элементов.
Скопировать эту таблицу еще раз, и сделать источник для плана. Наборы нужно убрать из
осей, и вместо них вставить группы по продукции и клиентам. Фильтры установить для
отображения факта продаж за февраль 2011г.
Скопировать блок ячеек из факта в план и опубликовать.
Пример
Фильтры и именованные наборы
 Работа с фильтрами «Топ 10» имеет свои
особенности. В частности, они не работают в
сочетании с выбором нескольких элементов в
фильтрах сводной таблицы. Поэтому не удается
определить топ-1 клиентов за произвольный
период, например по сумме января-февраля
 Именованные наборы для планирования надо
создавать без элемента «все»
Разное
Совместная работа пользователей
 Централизованная работа через общий куб
происходит быстро и организованно.
 Разграничение доступа к подмножествам клиентов,
продуктов, планов легко реализуется на уровне
ролей куба.
 Рабочий процесс планирования можно
организовать через портал SharePoint, с сервисом
напоминаний, рассылок форм ввода плана,
отслеживания заполнения и т.п.
Таблица изменений
 Все коррекции плана, которые публикуют
пользователи, попадают в реляционную БД в
таблицу WriteTable
 Таблицу следует чистить и объединять данные с
основной таблицей планов
 Стоит связать выполнение этой процедуры с
процессом утверждения плана
Процедура слияния изменений
ALTER PROCEDURE [dbo].[AddWriteTableToPlan]
AS
INSERT INTO PLAN_Sales (QTY, VOLUME, WEIGHT, AMOUNT, ProdKey,
ShipKey, Date, ScenarioKey)
SELECT
SUM(QTY_0), SUM(VOLUME_1), SUM(WEIGHT_2), SUM(AMOUNT_3),
ProdKey_4, ShipKey_5, Date_6, ScenarioKey_7
FROM
WriteTable
GROUP BY ProdKey_4, ShipKey_5, Date_6, ScenarioKey_7
HAVING abs(SUM(WEIGHT_2))>0.001; -- нулевые изменения не нужны
TRUNCATE TABLE WriteTable;
Макросы
Полезные макросы
 Для прежних версий Excel до 2007 можно
использовать макрос обратной записи
 Дополнительный функционал – запись из сводной в
реляционный источник
 Функции нормализации и заполнения таблиц
 Надстройка с макросами доступна по ссылке
http://11669.ineta.ru/
Демонстрация
WBSamples.xlsx
Роман Кузнецов
Вимм-Билль-Данн
Ответы на вопросы
Спасибо за внимание!
Роман Кузнецов
Вимм-Билль-Данн
E-mail: krom1971@gmail.com
Download