powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Диаграмма Парето. Кто как строит?
34 сообщений из 34, показаны все 2 страниц
Диаграмма Парето. Кто как строит?
    #32400424
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги!

Задался я тут вопросом о том как с помощью разных средств OLAP строить диаграмму Парето.
Ежели кто не знает, что это такое, поясню на примере. Нужно развёрнуто ответить на вопрос "Какая доля топовых клиентов даёт какую долю выручки?".
В моём случае интересно посмотреть на это с точки зрения сумм кассовых чеков.
Соответственно, задача формулируется так: построить график, в котором по оси Х будут укрупнённые группы кассовых чеков, а по Y две величины - доля группы чеков в сумме по всем кассовым чекам и средняя сумма чека.
Группы чеков определяем путём разбиения всего множества чеков, отсортированного по убыванию, на N (например 10) интервалов, включающих переменное количество чеков так, чтобы каждая группа добавляла по 1/N к доле итоговой суммы по всем чекам. Таким образом, чеки, входящие в первую группу войдут и во все остальные.
В двух словах, по оси Х имеем такие деления - TOP 10%, TOP 20%, TOP 30%... TOP100% чеков, по Y - две кривые, одна возрастает - это доля группы в общей сумме, а другая убывает - это средняя сумма чека.

Вот такая задача.

Кто как будет решать?

2Jurii: не спешите с рекламированием свойства 20/80 в Cognos PowerPlay. Это задачка, как мне кажется, немного посложнее будет.

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32400592
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Da ne hilaya zadachka, mne kazhetsya tut Data Mining krepko popahivaet.
Tut s naletu i bez pol-vedra :-) srazi i ne otvetish.

Spasibo za interesnuyu zadachku.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32400650
Фотография Quark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно как подсказывает предыдущий автор -похоже на ДатаМайнинг-кластеризацию,

но в данном случае все несколько проще ибо известно относительно чего группировать. У меня подобная задача решается так:
SQL-DTS(хотя можно и подцепиться к ОЛАП) смотрю продажи клиентов,
далее их группирую по сумме чека итп.
И потом уже в олапе делаю member properties - с тем в какую группу топов входит данный клиент, а по этим пропертисам - строю вирт. измерение.

Минус нада перепроцессивать измерение и естессно куб,
ну и понятно не совсем универсальность
плюс - простота к конкретным задачам.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32400972
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку. Не проверял до конца. В Oracle.
Что бы я попробовал сделать.
Задача разбивается на подзадачи.
1. Посчитать вклад каждого объекта (сумму чека или еще чего-то)
2. Посчитать нарастающий итог и таким образом выделить интересующие группы 10%, 20% и т.д.
3. Ну а дальше обсчитать средние и доли группы.
4. По результатам нарисовать график.

Практически уверен что это можно запихнуть в один SQL запрос, с использованием аналитических функций.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32401042
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Birkhoff:

Посчитать нарастающий итог и таким образом выделить интересующие групп

Да, алгоритм вполне прозрачный. Без сомнения. Именно нарастающий итог.

Практически уверен что это можно запихнуть в один SQL запрос, с использованием аналитических функций.

А нарастающий итог как эскуэлём считать собираетесь? Или в Оракле есть такая функция? А если MS SQL?
Ну, и, наконец, вопрос-то стоял о том, как это сделать в OLAP-продукте.


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32401070
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Константин

Да, в Oracle есть конструкция типа
SUM(Amount_sold) OVER(PARTITION BY YEAR ORDER BY Product , Amount_sold SUM DESC ROWS UNBOUNDED PRECEDING )
которая считает нарастющий итог.

Если у нас ROLAP, то запихнув во view такой SQL можно его использовать.
Если MOLAP, то подобные задачи удавалось решать с помощью функционала Oracle Express Objects, но возможно это решается и более простым способом.
В третьих, обнаружил среди списка новых возможностей Oracle 10g функцию с именем Pareto что-то. Что она делает пока выяснить пока не удалось.

Как это сделать в MS SQL не знаю.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32401085
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Birkhoff:

Да, в Oracle есть конструкция типа
SUM(Amount_sold) OVER(PARTITION BY YEAR ORDER BY Product , Amount_sold SUM DESC ROWS UNBOUNDED PRECEDING )
которая считает нарастющий итог.


Я очень рад за Oracle. Мне с MS такой функции не хватает.

Если у нас ROLAP, то запихнув во view такой SQL можно его использовать.

Смотря какой ROLAP. Я вот в своём ROLAPе этот отчёт мышкованием строю без всяческих вьюшек. Чем очень довлолен :)

Если MOLAP, то подобные задачи удавалось решать с помощью функционала Oracle Express Objects, но возможно это решается и более простым способом.

Возможно, кто-то из форума напишет, как.

В третьих, обнаружил среди списка новых возможностей Oracle 10g функцию с именем Pareto что-то. Что она делает пока выяснить пока не удалось.

Опять-таки, радует. Пора смотреть в сторону Oracle :)

Как это сделать в MS SQL не знаю.

Очевидно, писать ХП, которая будет считать нарастающий итог.


2 backfire & Quark:
Data Mining тут пока не пахнет, это вы погорячились :)

Удачи!

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32401920
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Константин:

2Jurii: не спешите с рекламированием свойства 20/80 в Cognos PowerPlay. Это задачка, как мне кажется, немного посложнее будет.

Если бы я сказал, что свойства 80/20 достаточно для решения этой задачи - это было бы не похоже на ответ эксперта по продуктам Cognos :)

Пока что выскажу предположение, что если решать эту задачу с помощью продуктов Cognos, то начинать надо с создания произвольных запросов в Impromptu, и затем возможно использовать эти запросы как источники данных для проектирования аналитической модели PowerPlay. Для более точного ответа я сделаю небольшой тестовый примерчик и расскажу о его результатах.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32402185
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для более точного ответа я сделаю небольшой тестовый примерчик и расскажу о его результатах.

Могу сделать вывод - задача несложная, если ее решать визуальными средствами. Однако написать руками SQL-запрос для ее решения - непросто...

В принципе как я понял в ходе реализации тестового примера, для этой задачи вполне достаточно функциональности Query & Reporting. Вот какие шаги надо сделать в Cognos Impromptu:

1) Отсортировать чеки по убыванию по полю Сумма.
2) Использовать функцию Running-Total чтобы получить нарастающим итогом сумму чеков.
3) Поделить результат, полученный на предыдущем шаге на общую сумму чеков, вычисленную с помощью функции Total.
4) Использовать функцию Round-near - округлить отношение, полученное на предыдущем шаге до 1 знака после запятой и умножить этот результат на 100. Таким образом мы проклассифицируем каждый чек - входит ли он в TOP 10%, или в TOP 20%, и т.п.
5) Далее с помощью функции Average и ключевого слова FOR вычисляем среднюю сумму чека для каждого подмножества (для TOP 10%, TOP 20%, и т.п.).
6) С помощью функции Count вычислим, сколько чеков в каждой группе.

Шаги 5 и 6 можно сделать и средствами OLAP-сервера PowerPlay.
Все функции, которые я перечислил - это стандартные функции Cognos Impromptu. Примерчик я делал на основе DBF-файла, для чистоты эксперимента, чтобы не было вопросов, что в одной СУБД какие-то функции есть, а каких-то нет.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32403295
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий,

а сколькими записями Вы манипулировали?
Можете запостить сюда SQL, который сгенерировал Impromptu?
И ещё, Вы предлагаете использовать два продукта для решения этой задачи. А одним нельзя что ли?

Примерчик я делал на основе DBF-файла, для чистоты эксперимента, чтобы не было вопросов, что в одной СУБД какие-то функции есть, а каких-то нет

Это не очень чистый эксперимент. Я только один раз видел сумасшедшего, который аналитику на больших объёмах данных делал на DBF-файлах. У него расчёты часами длились.
Наверняка, у Вас под рукой есть какая-нибудь база данных побольше. Попробуйте повторить свой эксперимент. Интересно понять, насколько это будет работать в реальной жизни.

А как Вы думаете, сколько времени данная процедура займёт у Вас на 3-4 миллионах чеков? Вы ведь собираетесь среднее на клиенте считать. Это значит, вы всю базу чеков по сети будете лить на клиентскую станцию.
Каковы будут требования к клиентской станции?



С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32403321
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин,

а сколькими записями Вы манипулировали?

Я делал этот примерчик на основе 30 записей, неохота было набивать больше :)

Можете запостить сюда SQL, который сгенерировал Impromptu?

Привожу текст (это диалект Impromptu для баз данных на основе DBF-файлов):

select c1 as c1,
c2 as c2,
RSUM(c2) as c3,
c4 as c4,
c5 as c5,
c6 as c6,
c7 as c7
from
(select c1 as c1,
c2 as c2,
c4 as c4,
c5 as c5,
c6 as c6,
XAVG(c2 for c6) as c7
from
(select c1 as c1,
c2 as c2,
c4 as c4,
((RSUM(c2)) / c4) as c5,
((round(((RSUM(c2)) / c4),1,0)) * 100) as c6
from
(select c10 as c1,
c9 as c2,
XSUM(c9) as c4
from
(select T1."SUM" as c9,
T1."CHECK_ID" as c10
from "cheks2" T1
) D2
order by c2 desc,c1 asc
) D5
) D1
order by c2 desc,c1 asc
) D4

И ещё, Вы предлагаете использовать два продукта для решения этой задачи. А одним нельзя что ли?

Я не очень глубоко исследовал эту задачу. Уверен что одного Impromptu вполне достаточно, но если использовать Powerplay - будет удобнее покрутить эту аналитическую модель в разных разрезах.

Это не очень чистый эксперимент. Я только один раз видел сумасшедшего, который аналитику на больших объёмах данных делал на DBF-файлах. У него расчёты часами длились.

В свое время, когда кроме DBase ничего не было, все были сумасшедшими :)
Да и сейчас есть много компаний, которые работают на DBF-версиях 1С...

Наверняка, у Вас под рукой есть какая-нибудь база данных побольше.

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

А как Вы думаете, сколько времени данная процедура займёт у Вас на 3-4 миллионах чеков?

Если Impromptu будет работать медленно - я куплю мощный сервер, спроектирую реляционное ХД и настрою на него Microstrategy (у нашей компании есть право пользоваться этим продуктом :)
А вообще то я предлагаю Вам потестировать мой подход на Вашей базе данных (заодно посмотрите систему бюджетирования, о которой Вы как-то спрашивали...).

Вы ведь собираетесь среднее на клиенте считать

Я бы хотел считать среднее на OLAP-сервере PowerPlay, поэтому и упомянул связку Impromptu + PowerPlay.

Каковы будут требования к клиентской станции?

В наши дни многие клиентские станции будут помощнее серверов, поскольку игрушки сейчас требуют много ресурсов, а фильмы занимают много места на жестком диске :)
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32403326
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Jurii:

А вообще то я предлагаю Вам потестировать мой подход на Вашей базе данных

Предлагаете мне воспользоваться Impromptu?


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404021
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jurii:

Давайте посмотрим на SQL повнимательнее.
Мои комментарии прямо в тексте.

select
c1 as c1,
c2 as c2,
RSUM(c2) as c3,
c4 as c4,
c5 as c5,
c6 as c6,
c7 as c7
from
(
select
c1 as c1, -- идентификатор чека, непонятно, для чего выбирается, в конечном результате не нужно
c2 as c2, -- сумма чека, непонятно, для чего выбирается, в конечном результате не нужно
c4 as c4, -- итог по всем чекам, непонятно, для чего выбирается, в конечном результате не нужно
c5 as c5, -- доля суммы чека, непонятно, для чего выбирается, в конечном результате не нужно
c6 as c6, -- очевидно, ТОП-группа
XAVG(c2 for c6) as c7 -- средняя сумма чека для ТОП-группы, вычисляется на клиенте, аналог AVG(c2) GROUP BY c6
from
(
select
c1 as c1, -- идентификатор чека
c2 as c2, -- сумма чека
c4 as c4, -- итог по всем чекам
((RSUM(c2)) / c4) as c5, -- доля суммы чека
((round(((RSUM(c2)) / c4),1,0)) * 100) as c6 -- очевидно, округление до ближайшей десятки,
from
(
select
c10 as c1, -- идентификатор чека
c9 as c2, -- сумма чека
XSUM(c9) as c4 -- наверное, итог по всем чекам, считается на клиенте вместо того, чтобы считать в СУБД
from
(
select
T1."SUM" as c9,
T1."CHECK_ID" as c10
from
"cheks2" T1
) D2
order by
c2 desc, -- сортировка суммы чеков в порядке убывания
c1 asc -- сортировка идентификаторов чеков по алфавиту. Непонятно зачем. Лишняя работа
) D5
) D1
order by
c2 desc,
c1 asc
) D4


Основные выводы - всё делается на клиенте. Сомневаюсь в том, что на реальных объёмах данных это будет работать в принципе.
Impromptu делает много лишних манипуляций с данными, что должно сказываться на скорости также.

Основной вопрос остаётся открытым - где же та скорость, которую продукты Cognos предоставляют при решении сложных аналитических задач?
Поскольку, Юрий, Вы считаете эту задачу несложной, что же будет со скоростью в более сложных случаях?

Следующий вопрос - а если я захочу сделать drill down чтобы посмотреть на те чеки, которые входят в группу TOP 10% прямо в этом отчёте, как я смогу сделать это с помощью Impromptu?


Люди! Как в MS AS такую задачу решают?

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404272
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Константин:

Предлагаете мне воспользоваться Impromptu?

Я предлагаю Вам для начала только посмотреть, как эксперт по Impromptu и по другим продуктам Cognos настроит Impromptu на Вашу базу данных. Если конечный результат Вам понравится - Вы закупите нужные лицензии, пройдете курс обучения и сами станете экспертом в области Cognos. Напомню, что задачи подобные вашим многократно решались с помощью Impromptu и PowerPlay, и количество записей в базах доходило до 100 миллионов.

Давайте посмотрим на SQL повнимательнее.
Мои комментарии прямо в тексте.
Основные выводы - всё делается на клиенте. Сомневаюсь в том, что на реальных объёмах данных это будет работать в принципе.
Impromptu делает много лишних манипуляций с данными, что должно сказываться на скорости также.


Разумеется в этом примере все делается на клиенте, поскольку СУБД - файл-серверная. Некоторое время назад я приводил пример SQL-запроса, сгенерированного Impromptu, и у этого запроса было 2 варианта, в зависимости от выбора опции, выполнять ли запрос на сервере или на клиенте.

Поскольку запросы генерятся визуальными средствами, то есть сложные случаи, когда стоит зайти в окошко запроса Impromptu, и либо подредактировать его (оптимизировать), либо просто вставить туда собственный и оптимально написанный SQL-запрос.

Основной вопрос остаётся открытым - где же та скорость, которую продукты Cognos предоставляют при решении сложных аналитических задач?
Поскольку, Юрий, Вы считаете эту задачу несложной, что же будет со скоростью в более сложных случаях?


Скорость гарантируется при использовании OLAP-сервера PowerPlay. Например в куб можно закачать 100 миллионов записей, и после этого с высокой скоростью отклика анализировать не только аддитивные выручку, прибыль, количество чеков/строк чеков на кассу/кассира/в час и т.п., но и среднюю цену товаров, сдеднюю стоимость покупок, динамику складских остатков, даже если эти остатки не хранятся в учетной системе и вычисляются OLAP-сервером на основе приходных и расходных документов, количество клиентов и другие показатели типа Distinct Count и т.п.
Таким образом хочу сказать, что если задачку можно решить с использованием многомерного OLAP - то все будет быстро. Если же с помощью OLAP задача не решается - приходится использовать ROLAP, и там скорость не всегда предсказуема, зависит от загруженности сервера РСУБД, объема данных и сложности SQL-запросов.

а если я захочу сделать drill down чтобы посмотреть на те чеки, которые входят в группу TOP 10% прямо в этом отчёте, как я смогу сделать это с помощью Impromptu?

В Impromptu надо указать для поля или группы полей ссылку на смежный отчет (это будет не DrillDown, а DrillThrough).
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404599
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю Вам для начала только посмотреть, как эксперт по Impromptu и по другим продуктам Cognos настроит Impromptu на Вашу базу данных. Если конечный результат Вам понравится - Вы закупите нужные лицензии, пройдете курс обучения и сами станете экспертом в области Cognos. Напомню, что задачи подобные вашим многократно решались с помощью Impromptu и PowerPlay, и количество записей в базах доходило до 100 миллионов.

Спасибо за предложение :)) Я не хочу становиться экспертом по Cognos. Мне хватает того, что я Cognos Certified Professional.

Разумеется в этом примере все делается на клиенте, поскольку СУБД - файл-серверная. Некоторое время назад я приводил пример SQL-запроса, сгенерированного Impromptu, и у этого запроса было 2 варианта, в зависимости от выбора опции, выполнять ли запрос на сервере или на клиенте.

То есть, Вы утверждаете, что, в случае, например, MS SQL все вычисления будут производиться на нём?

Поскольку запросы генерятся визуальными средствами, то есть сложные случаи, когда стоит зайти в окошко запроса Impromptu, и либо подредактировать его (оптимизировать), либо просто вставить туда собственный и оптимально написанный SQL-запрос.

Вы имеете в виду, что именно этот конкретный запрос нужно ещё дальше оптимизировать или просто рекламируете свойства Impromptu?


Скорость гарантируется при использовании OLAP-сервера PowerPlay.
То есть, данную задачу невозможно решить с использованием Cognos PowerPlay?

В Impromptu надо указать для поля или группы полей ссылку на смежный отчет (это будет не DrillDown, а DrillThrough).

То есть, мне надо придумать, по каким направлениям пользователь захочет делать drill и наделать на все случаи готовых отчётов?
А где же OLAP?


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404722
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Константин:

Я не хочу становиться экспертом по Cognos.

Это Ваше право. Интересно будет узнать через некоторое время, удастся ли Вам создать эффективную аналитическую систему в Вашей компании, используя инструментарий других производителей...

То есть, Вы утверждаете, что, в случае, например, MS SQL все вычисления будут производиться на нём?

Я не уверен что эту задачу удастся решить на сервере РСУБД на 100% - видимо Impromptu некоторые задачи будет решать "на клиенте". В этом видимо отличие Impromptu от MSTR, которое, если верить Вашим постингам, все расчеты позволяет вести на сервере.
Радует однако тот факт, что Impromptu обычно стоит на одном мощном компьютере (зачастую на сервере РСУБД), и выполняет вспомогательную роль, позволяя проектировать, создавать и обновлять OLAP-кубы в PowerPlay, где проблем с производительностью практически нет.

Вы имеете в виду, что именно этот конкретный запрос нужно ещё дальше оптимизировать или просто рекламируете свойства Impromptu?

Ничего я не рекламирую :)
Чтобы понять, нужно ли оптимизировать этот конкретный запрос - надо провести тестирование на большой БД с как минимум миллионами чеков. Пока у меня такой возможности нет. Если же протестировать удастся, то возможны 2 варианта - либо запрос созданный визуальными средствами в Impromptu будет работать достаточно быстро, либо его будет разумно отредактировать.

То есть, данную задачу невозможно решить с использованием Cognos PowerPlay?

Эта задача для меня не типична, и я не исследовал глубоко, можно ли ее решить одним лишь PowerPlay. Я подумаю на эту тему, но видимо все же придется сделать виртуальную вьюшку в Impromptu и на ее основе проектировать куб в PowerPlay.

То есть, мне надо придумать, по каким направлениям пользователь захочет делать drill и наделать на все случаи готовых отчётов?
А где же OLAP?


Impromptu - это не OLAP-сервер. Это вспомогательный модуль класса Query & Reporting, интегрированный с OLAP-сервером PowerPlay, с системой бюджетирования Cognos Planning и т.п. При этом в Impromptu можно делать произвольные отчеты, но это не будут ОЛАПовские отчеты...
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404743
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно будет узнать через некоторое время, удастся ли Вам создать эффективную аналитическую систему в Вашей компании, используя инструментарий других производителей...

Самому интересно :)
Вот, диаграмму Парето сваял, чем вполне доволен.

Я не уверен что эту задачу удастся решить на сервере РСУБД на 100% - видимо Impromptu некоторые задачи будет решать "на клиенте".

Я даже скажу какую - нарастающий итог, поскольку эта функция отсутствует в MS SQL. Соответственно, все миллионы чеков будут литься на ту машину, где стоит Impromptu.


Радует однако тот факт, что Impromptu обычно стоит на одном мощном компьютере (зачастую на сервере РСУБД), и выполняет вспомогательную роль, позволяя проектировать, создавать и обновлять OLAP-кубы в PowerPlay, где проблем с производительностью практически нет.

Всяко, не будет он работать со скоростью СУБД, которая понимает, что такое параллелизм, например.
Да, и даже в пределах одного компьютера через ODBC или подобный интерфейс данные тоже не очень быстро выгрузятся в Impromptu.
Словом, у меня очень большие сомнения в масштабируемости этого решения.
30 чеков - не вопрос. С миллионами точно будут проблемы.

Эта задача для меня не типична, и я не исследовал глубоко, можно ли ее решить одним лишь PowerPlay. Я подумаю на эту тему, но видимо все же придется сделать виртуальную вьюшку в Impromptu и на ее основе проектировать куб в PowerPlay.

Проектировать целый куб для решения одной задачи?

Impromptu - это не OLAP-сервер.

Это я и так знаю. Пользовался.

При этом в Impromptu можно делать произвольные отчеты, но это не будут ОЛАПовские отчеты...

Ну, это Вы хватили насчёт произвольных. Вам рассказать про fan trap, раннее связывание и другие грабли, которые лежат в Impromptu на каждом шагу?

В общем, я понял для себя, что эта типичная аналитическая задача (хоть она и так нетипична для Вас) не решается на реальных объёмах данных с помощью продуктов Cognos.


Люди по MS AS! Как вы решаете эту задачу? У вас эе есть функция вычисления нарастающего итога!


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404778
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин,

Самому интересно :)
Вот, диаграмму Парето сваял, чем вполне доволен.


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

Я даже скажу какую - нарастающий итог, поскольку эта функция отсутствует в MS SQL. Соответственно, все миллионы чеков будут литься на ту машину, где стоит Impromptu.

Я подумаю над вопросом поиска эффективного решения этой задачи...

Да, и даже в пределах одного компьютера через ODBC или подобный интерфейс данные тоже не очень быстро выгрузятся в Impromptu.

ODBC я использую только для СУБД Progress, Visual FoxPro и т.п. К СУБД Oracle, MS SQL, Sybase, DB2 и т.п. подключаюсь из Impromptu через прямые драйверы.

Проектировать целый куб для решения одной задачи?

В этой задаче в источнике данных всего несколько полей. В кубе - несколько измерений и показателей. Проектирование куба в этом случае - несколько движений мышкой и ни одной строчки кода. Тут главное понять, как оптимальнее балансировать нагрузкой между сервером РСУБД и OLAP-сервером...

Ну, это Вы хватили насчёт произвольных. Вам рассказать про fan trap, раннее связывание и другие грабли, которые лежат в Impromptu на каждом шагу?

Если бы Вы об этом рассказали - это было бы полезно для форума и интересно лично для меня.

В общем, я понял для себя, что эта типичная аналитическая задача (хоть она и так нетипична для Вас) не решается на реальных объёмах данных с помощью продуктов Cognos.

Прежде чем такое говорить, надо бы протестировать Impromptu на большом объеме данных.

Люди по MS AS! Как вы решаете эту задачу? У вас эе есть функция вычисления нарастающего итога!

У нас с Вами есть инструментарий для создания произвольных запросов визуальными средствами, а у пользователей MS AS этого нет. Поэтому вряд ли они решали эту задачу (хотя я рад бы ошибиться в этом суждении).
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32404852
Максим Мамаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ProClarity есть встроенная диаграмма Парето. Она может быть построена для любого измерения.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405049
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Максим Мамаев:

В ProClarity есть встроенная диаграмма Парето. Она может быть построена для любого измерения.

Это решает задачу на 50% :) Теперь осталось в кубе создать измерение, листья которого - несколько миллионов или десятков миллионов чеков, и применить к этому измерению функциональность Парето...
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405136
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jurii:

Если ProClarity проводит все вычисления на OLAP-сервере (MDX-запросом), то не вижу в этом проблемы.
Если на клиенте - получаем вариант с Impromptu.

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405284
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин,

Если ProClarity проводит все вычисления на OLAP-сервере (MDX-запросом), то не вижу в этом проблемы.
Если на клиенте - получаем вариант с Impromptu.


На основе моего опыта могу сказать, что неразумно обожествлять понятие "сервер", если речь идет об OLAP. Да и MDX-запросы далеко не всегда выполняются на сервере (если верить постингам на форуме, по крайней мере Calculated Members в MS AS вычисляются на клиенте)...
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405536
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЭВРИКА!

Я подумаю над вопросом поиска эффективного решения этой задачи...

Похоже я нашел решение задачи по построению Диаграммы Парето на основе детальных данных по розничным чекам. При этом вся нагрузка перекладывается на OLAP-сервер Cognos PowerPlay (то есть без разницы, хранятся ли чеки в серьезной СУБД типа Oracle или MS SQL Server, или в локальном файле формата DBF, CSV и т.п.). Побочный эффект - строится диаграмма не по точкам TOP10, TOP20 и т.п., а по большему количеству точек (однако если ввести достаточно большое значение параметра - . Итак, приведу алгоритм:

1) В модуле PowerPlay Transformer создаем вычисляемую колонку по следующей формуле: round-near ( "Сумма чека" / 30 , 0 )
Делю я на 30 чтобы например округлить сумму каждого чека до ближайшего доллара, и таким образом - проклассифицировать. Можно делить не на 30 - а на 100, и тогда будет больше интервалов и мы еще больше приблизимся к точкам TOP10, TOP20... Эту колонку перетаскиваем в область измерений.
2) Создаю 3 показателя -
сумма чека,
средняя сумма чека (то же самое что и сумма, но правило агрегации - по среднему,
количество чеков (на основе колонки-счетчика строк, в каждой строке - единичка) - этот показатель полезен, но в начальной формулировке задачи он не требуется
3) В OLAP-клиенте PowerPlay User делаем сортировку по полю Средняя сумма чека, и применяем стандартную функцию вычисления Нарастающий процент от Базы к показателю Сумма чека
4) Переходим в режим Многолинейного графика, и выводим на него оба требуемых показателя.

При таком подходе мы не закачиваем в куб чеки - они только читаются в процессе генерации куба. Соответственно в кубе получается совсем мало категорий (листьев) и на среднем по мощности компе закачка в куб будет со скоростью миллион чеков за 2-3 минуты.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405554
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dobrogo vremeni sutok!

Diagrama Pareto k zapadu ot Odera chasche nazivaetsya ABC-Analysis, posemu ya srazu to i ne prosek o chem rech idet.

Vikativayu MDX. Komu interesno.

Postroeine ABC-Analysis Diagram:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
WITH 

 -- % Ratio
 
member [CalendarYear].[Column  1 ] as '
([CalendarYear].[Alle CalendarYears].[2003], [Customer].CURRENTMEMBER,[Measures].CURRENTMEMBER)*100.0 / 
([CalendarYear].[Alle CalendarYears].[2003], [Customer].[TotalMember],[Measures].CURRENTMEMBER)', SOLVE_ORDER= 1 

 -- Runnig Total
 
member [CalendarYear].[Column  2 ] as '
SUM(HEAD([TotalSet],RANK([Customer].CURRENTMEMBER,[TotalSet])),
        ([CalendarYear].[Alle CalendarYears].[2003],[Measures].CURRENTMEMBER))'

 -- Runnig Total % Ratio
 
member [CalendarYear].[Column  3 ] as '
SUM(HEAD([TotalSet],RANK([Customer].CURRENTMEMBER,[TotalSet])),
(([CalendarYear].[Alle CalendarYears].[2003],[Customer].CURRENTMEMBER,[Measures].CURRENTMEMBER)*100.0 / 
 ([CalendarYear].[Alle CalendarYears].[2003],[Customer].[TotalMember],[Measures].CURRENTMEMBER)))', SOLVE_ORDER= 1 

SET [RowSet0] AS '{[Customer].[All Customers].children}'
 -- Sort 
 
SET [RowSet2] AS 'topcount([RowSet0],100,({[CalendarYear].[All CalendarYears].[2003],[Measures].[SalesValue]}) )'
SET [TotalSet] AS '[RowSet2]'

member [Customer].[TotalMember] AS '[Customer].[All Customers]'
SELECT
{[CalendarYear].[All CalendarYears].[ 2003 ],[CalendarYear].[Column  1 ],[CalendarYear].[Column  2 ],[CalendarYear].[Column  3 ]} ON COLUMNS,
 CROSSJOIN({[RowSet2]},{[Measures].[SalesValue],[Measures].[Profit]})

ON ROWS
FROM Sales


Rezultati zaprosa zakativaite v lyubyu Grafiko-Stroitelnuyu programmu i naslazhdaites
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405695
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как уже говорил Birkhoff

в оракле подобная задача решается одим запросом
при помощи двух аналитических функций

SUM() OVER(PARTITION BY ... )
и
RATIO_TO_REPORT( ) OVER(PARTITION BY ...)

Писать запрос самому лень,
я делал ABC отчет, одним запросом

Хомо сапиенс, это возможность мыслить, но не всегда способность.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405742
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий,

интересно а Impromptu сможет сгенерировать для Oracle конструкцию с использованием этих специфических аналитических функций?
Это спасло бы его репутацию по крайней мере в связке с Oracle.
Нет возможности попробовать?
Или даже не так. Надо просто создать левый каталог над любой оракловой базой. А потом открыть Ваш любимый "интеллектуальный" построитель выражений (кстати, они хоть удосужились в последней версии это окно с изменяемыми размерами сделать?) и посмотреть, стоит ли там значёк DB возле пиктограмм нужных функций (Running Total, наверное). Если да, то, по идее, можно заставить Impromptu хотя бы нарастающий итог на сервере посчитать, а, может, и даже всё остальное.
Попробуете?

P.S. очень рад за пользователей MS, у которых это всё-таки на сервере делается.
Ну, и за ораклоидов тоже :)

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32405790
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Константин, backfire & DimaR:

Константин,

Господа backfire и DimaR привели довольно поверхностные алгоритмы решения Вашей задачи. В частности я не понял, как проектировать куб MS AS - MDX-запрос приведен для измерения Customer, и не понятно, можно ли легко закачать в измерение куба миллионы чеков (чеков то обычно бывает больше, чем покупателей)... Аналогичный вопрос насчет решения в Oracle - какую версию СУБД надо использовать, надо ли там проектировать куб или аналитические функции обращаются к реляционной таблице, как потом визуализировать результат (писать ли клиентское приложение с нуля, или если нет - то какое приложение можно использовать)?

интересно а Impromptu сможет сгенерировать для Oracle конструкцию с использованием этих специфических аналитических функций?
Это спасло бы его репутацию по крайней мере в связке с Oracle.
Нет возможности попробовать?


Я не знаю, в какой версии СУБД Oracle есть эти функции, и не уверен, что у меня под рукой окажется сервак с данной версией Oracle :(
Репутации Impromptu пока ничего не угрожает (никто не говорит что это лучший в своем классе продукт, но в то же время типичные задачи, о которых говорят на форуме, он позволяет решать). Тем более что найдено решение задачи с помощью более мощного PowerPlay...

кстати, они хоть удосужились в последней версии это окно с изменяемыми размерами сделать?

Да, при работе в Интеллектуальном Конструкторе Выражений можно менять размеры окна.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32406012
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Jurii
Анадитические функции используються непосредственно в sql запросах,
они есть в начиная с Oracle 8i,

Кое что почитать можно тут

http://www.interface.ru/oracle/anal-itiv.htm
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32406142
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Juri

Na schet Chekov, Schetov, Zakazov i prochei erundi kotoraya suschestvuet v nemerennih kolichestvah - nado vvesti izmerenie CheckSumInterval, konkretnie velichini zadaet polzovatel ili perekladivaem etu zadachi na DataMiningTask, esli samomu lenivo.
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #32416276
Фотография Quark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Data Mining тут пока не пахнет, это вы погорячились :)

И все таки получается если упростить Парето до АБС анализа, то Майнинга тут уже ведь небудет.)
Как в одной из трактовок данного термина - поиск скрытых закономерностей.
АБС - это открытые закономерности.)

Взять хотя бы классические пример от Мацкрософт про карточки виза и холостяцкую жизнь. Там именно скрытые факты и выявляются. А тут понимаешь и так понятно что ктото из клиентов попадет в топ10 а ктото в топ 20.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Диаграмма Парето. Кто как строит?
    #33017245
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поздновато включаюсь в обсуждение, но есть соображения, которые хочу донести, так как считаю, что они могут быть интересными.

Насколько я понял задачу, изложенную Константином,
1. мы оперируем не понятием "клиент", а понятием "сделка",
2. топовыми мы должны считать сделки с максимальными суммами.
3. мы должны разбить сделки на диапазоны таким образом, чтобы в первый попали 10% сделок с наибольшими суммами, во второй - 20% сделок с наибольшими суммами и т.д. По оси ординат должны оказаться суммы сделок, попавших в группу, и/или производные от них абсолютные (средняя сумма сделки) и относительные (доля сделок группы в сумме всех сделок) величины.

Таким образом, о диаграмме Парето речи уже идти не может (она имела бы место быть, если бы мы разбили сделки на диапазоны сумм, нашли бы количества сделок, попадающие в каждый из диапазонов, а затем отсортировали бы диапазоны по убыванию, ведь диаграмма Парето, в статистике, это есть просто гистограмма, упорядоченная по убыванию высоты столбиков). Ну да ладно. Я хотел совсем не об этом повести речь. А о том, что, по моему мнению, некоторые задачи не нуждаются в точных бухгалтерских решениях. Зачем в данном примере считать сделки с точностью до одной штуки?

А еще некоторые задачи плохо решаются на чистом SQL.

Я предлагаю использовать методы матстатистики. И выдвигаю гипотезу: при равномерном контингенте лиц, совершающих сделки, при том, что суммы сделок могут быть как большими (набор продуктов на неделю), так и совсем маленькими (коробок спичек), а также при достаточно большом количестве сделок, т.е. при условии репрезентативности выборки (все эти условия соблюдаются, скажем, в продуктовых супермаркетах), распределение количества сделок по суммам может быть описано формулой Релея (то же, что и Гаусса, но при условии, что все начинается от нуля, и меньше нуля не бывает).

Гипотеза, несомненно, требует проверки. Но представим, что проверку она прошла. И что тогда? А то, что нам теперь нужно получить всего три вещи нашим SQL-запросом:
- общее количество сделок,
- среднюю сумму одной сделки,
- среднеквадратическое отклонение от средней.

Мю и сигму по этим данным определить труда не составит. ;-)))
А уж сколько процентов площади (соответственно, процентов от общего количества сделок) от нуля до определенного числа сигм под заваленным на левый бок колоколом, можно найти в любом продвинутом инженерно-техническом справочнике. Остальное - дело техники. Рассчитать постоянные коэффициенты к переменной сигме на основании того, на сколько диапазонов ось сумм сделок должна быть разбита и сохранить их как константы в табличке, с которой потом и вязать результат описанного выше запроса. Или запрограммировать формулу и написать функцию, у которой на входе три вышеуказанных вещи и число процентов "TOP", а на выходе - соответствующие средняя сумма чека (впрочем, минимальную будет высчитать проще, да и информативней, по-моему).
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #33017654
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jurii
интересно а Impromptu сможет сгенерировать для Oracle конструкцию с использованием этих специфических аналитических функций?
Это спасло бы его репутацию по крайней мере в связке с Oracle.
Нет возможности попробовать?


Я не знаю, в какой версии СУБД Oracle есть эти функции, и не уверен, что у меня под рукой окажется сервак с данной версией Oracle :(
Репутации Impromptu пока ничего не угрожает (никто не говорит что это лучший в своем классе продукт, но в то же время типичные задачи, о которых говорят на форуме, он позволяет решать). Тем более что найдено решение задачи с помощью более мощного PowerPlay...


Сомневаюсь, что найдете Oracle без этих функций :-) Учитывая что появились они в Oracle 8i, а на дворе уже 10g некоторыми под продуктив используется в хранилище(у того же Бирхоффа :-) )
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #33018046
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, нарастающий итог на MS SQL можно посчитать SQL-запросом. Задача достаточно тривиальная. К сожалению, производительность этого решения на больших объемах (несколько миллионов) будет не очень высока.
в качестве примера могу привести два варианта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @t table (i int)
insert into @t
select  1  union select  2  union select  3  union select  4  union select  5  union select  6 

select * from @t

-- Первый вариант
select
	h.i,
	RunningTotal = sum(isnull(s.i,  0 ))
from @t h
	left join @t s on h.i >= s.i
group by h.i

-- Второй вариант
select
	h.i,
	RunningTotal = (select top  1  sum(s.i) from @t s where s.i <= h.i)
from @t h
При этом первый вариант судя по плану похуже, чем второй. SQL Server 2005 оптимизурет 2 запрос лучше, чем SQL Server 2000. В итоге разница по костам уже в 2 раза.

В SQL Server 2005 уже есть некоторые аналитические функции, например SUM() OVER(PARTITION BY).
...
Рейтинг: 0 / 0
Диаграмма Парето. Кто как строит?
    #33018293
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AAron.
Это оффтопик и FAQ из SQL форума


Все. Тему закрываю.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Диаграмма Парето. Кто как строит?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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