Скорее всего, "открытие", которое я сделал, всем хорошо известно. Но для меня было полной неожиданностью. Признаться, я пребывал в состоянии лёгкой паники, когда увидел вот такое:
Итоги по столбцам очевидно не соответствовали арифметической сумме. Ясно видно, что 707 + 1 никак не может быть равно 707-и... Картина, что называется «не верь глазам своим». Но проверив все расчеты я понял, что все три числа абсолютно верны!
Итак, что же происходит: отделы связаны с проектом через деталь «Продукты в проекте», именно там указывается отдел. Каждая ячейка в OLAP суть запрос в базу данных.
Мы спрашиваем в первой строчке: в скольких проектах участвовал отдел аудита? Система отвечает: 707. Столько проектов содержат на детали «Продукты в проекте» ссылку на отдел аудита.
Мы спрашиваем во второй строчке: в скольких проектах участвовал отдел банковского аудита? Система отвечает: в одном. То есть, один проект содержит на детали «Продукты в проекте» ссылку на отдел банковского аудита.
И то и другое верно!
Наконец, в строке общих итогов мы спрашиваем: а сколько проектов у нас всего? Система отвечает: 707! И именно так и есть. У нас действительно всего 707 проектов. Просто в одном из них участвовали оба отдела. Вытащив в куб названия проектов я нашёл тот проект, в котором участвовал отдел банковского аудита и убедился, что на детали «Продукты в проекте» действительно указаны оба отдела.
Таким образом, интеллектуальная система OLAP дала нам ответ на несколько вопросов: сколько проектов выполнил каждый отдел, и сколько проектов выполнено в целом, безотносительно отделов.
Важный вывод, который следует всегда помнить: общие итоги в OLAP это отдельный запрос, а не арифметическая сумма по строкам или колонкам. Общие итоги как по горизонтали, так и по вертикали арифметическими суммами не являются, но при этом содержат полностью достоверную информацию.