powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Статус клиентов
22 сообщений из 22, страница 1 из 1
Статус клиентов
    #33784235
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача следующая

Клиент может иметь какой-то статус. в каждый момент времени - какой-то определённый. Конечно-же он может переходить из одного статуса в другой.

задача состоит в том, чтобы описать все эти переходы, в частности:

1) В кадый момент определять количество клиентов в каждом из статусов.
2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.
3) Для каждого клиента определять историю переходов.

Надо всё это спроектировать. Может кто делал что-то подобное, или помнит, где это описано у классиков, чтобы мне не изобретать велосипед.

Заранее спасибо.
...
Рейтинг: 0 / 0
Статус клиентов
    #33784386
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор СаковичЗадача следующая

Клиент может иметь какой-то статус. в каждый момент времени - какой-то определённый. Конечно-же он может переходить из одного статуса в другой.

задача состоит в том, чтобы описать все эти переходы, в частности:

1) В кадый момент определять количество клиентов в каждом из статусов.
2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.
3) Для каждого клиента определять историю переходов.

Надо всё это спроектировать. Может кто делал что-то подобное, или помнит, где это описано у классиков, чтобы мне не изобретать велосипед.

Заранее спасибо.

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

Клиент - товар
Статус - склад
Время - время.

Таблица движений, а если надо то и по (месячных, дневных, часовых) остатков.

По-моему, все предельно просто.
...
Рейтинг: 0 / 0
Статус клиентов
    #33785106
OldNov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне тоже приходится решать такие задачи постоянно, но к сожалению ничего хорошего придумать в общем случае не получается. Наиболее "железобетонный" вариант - либо ROLAP, либо писать UDF. Если вам удалось придумать что-то другое, то хотелось бы знать об этом :-).
...
Рейтинг: 0 / 0
Статус клиентов
    #33785397
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldNovмне тоже приходится решать такие задачи постоянно, но к сожалению ничего хорошего придумать в общем случае не получается. Наиболее "железобетонный" вариант - либо ROLAP, либо писать UDF. Если вам удалось придумать что-то другое, то хотелось бы знать об этом :-).

А зачем так "кисло" : ROLAP, UDF. Помоему все на MOLAP модно легко замутить, если конечно хранилище с толком сделано.
...
Рейтинг: 0 / 0
Статус клиентов
    #33785880
DmitryS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с backfire.
Добавлю лишь, что по классике для первой задачи лепим снэпшоты, но в случае высокой дискретности анализа по времени и приличной производительности можно обойтись и без них.
Всё остальное в одной таблице фактов, да.
...
Рейтинг: 0 / 0
Статус клиентов
    #33786067
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктор Сакович:

задача состоит в том, чтобы описать все эти переходы, в частности:
1) В кадый момент определять количество клиентов в каждом из статусов.
2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.
3) Для каждого клиента определять историю переходов.
Надо всё это спроектировать


Рекомендую Вам привести пример исходных данных и отчетов, которые Вы хотите из них получить, так Вам быстрее помогут. Например, Иванов 10 февраля приобрел статус S1, а 23 марта получил статус S2... И т.д. (лучше в виде табличек).
И прокомментируйте пункт 2, этот пункт самый хитрый.
В случае если Вы пользуетесь определенным аналитическим инструментарием (например MSTR), огласите его, чтобы Вам не давали советов исходя из опыта использования другого инструментария (например MS AS).

2 OldNov:

Наиболее "железобетонный" вариант - либо ROLAP, либо писать UDF. Если вам удалось придумать что-то другое, то хотелось бы знать об этом :-).

Мне удалось придумать, как это сделать с помощью MOLAP. Например одна из моих задач, когда для каждого из нескольких сот тысяч объектов в учетной системе указаны на некоторые даты события присвоения им тех или иных статусов. На выходе я получил возможность на любые даты вычислять сколько объектов находилось на том или ином статусе, каково среднее время нахождения объектов на определенном статусе и т.п.
...
Рейтинг: 0 / 0
Статус клиентов
    #33786821
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну конечно же, аналогия с остатками - это первое, что приходит в голову. Но мне всё-таки кажется, что задачка несколько иная. Как уже отметил DmytryS - это задачка высокой степени дискретности. Более того в задаче остатков ключевую роль играет величина этих остатков, а здесь её нет вообще.

Вопроса Yurii я не понял. Мне казалось, я достаточно всё подробно сформулировал. Но попробую прокомментировать. пункт 2 состоит в следующем. Пусть есть несколько состояний S1, S2, ..., Sn. Нужно определить сколько за период от T1 до T2 произошло переходов из Sk в Sl. При этом возможна, конечно, ситуация, что за этот период таких переходов будет не один, но этим пренебрежём для ясности.

OLAP скорее всего будет BO или MSTR. Но вопрос вообще-то касался проектирования хранилища.

Спасибо всем, кто отозвался. Что-то мне начинает прорисовываться. Когда окончательно прорисуется и реализуется, могу поделиться. Что-то подсмотрел у решения компании Covansys, немножко сам докручу под свои нужды.
...
Рейтинг: 0 / 0
Статус клиентов
    #33787465
No Pasaran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор,

Подобного рода задачку решал следующим образом:
Табличка вида:
Client_id,
date_begin,
date_end,
status_id

И сверху вьюшка, которая приводит к виду:
date_id,
date,
status_id

Из такого вида, естественно, любой отчет получается. Но естественно приходится напрягаться с ETL.

Если додумаетесь до чего-то более красивого, пишите.
...
Рейтинг: 0 / 0
Статус клиентов
    #33787658
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
No PasaranВиктор,

Подобного рода задачку решал следующим образом:
Табличка вида:
Client_id,
date_begin,
date_end,
status_id

И сверху вьюшка, которая приводит к виду:
date_id,
date,
status_id

Из такого вида, естественно, любой отчет получается. Но естественно приходится напрягаться с ETL.

Если додумаетесь до чего-то более красивого, пишите.

А задачку 2 как будешь решать?
...
Рейтинг: 0 / 0
Статус клиентов
    #33787713
Maxim Lvov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор СаковичOLAP скорее всего будет BO или MSTR. Но вопрос вообще-то касался проектирования хранилища.

Виктор, если будет BO, рекомендую посмотреть на модуль Set Analysis. Если я правильно понимаю задачу, то это задача сегментации заказчиков и анализа миграции между сегментами. В Set Analysis используется работа не с записями, а со множествами. Это позволяет, в частности, делать такие вещи:
- Создание и разделение сегментов
- Измерение основных показателей для сегментов
- Отслеживание роста или убывания численности ключевых сегментов
- Отслеживание изменений в сегментах
- Отслеживание принадлежности к сегментам во времени
- Идентификация перемещений между сегментами
- Определение зависимостей, влияющих на переход между сегментами
...
Рейтинг: 0 / 0
Статус клиентов
    #33787732
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Lvov Виктор СаковичOLAP скорее всего будет BO или MSTR. Но вопрос вообще-то касался проектирования хранилища.

Виктор, если будет BO, рекомендую посмотреть на модуль Set Analysis. Если я правильно понимаю задачу, то это задача сегментации заказчиков и анализа миграции между сегментами. В Set Analysis используется работа не с записями, а со множествами. Это позволяет, в частности, делать такие вещи:
- Создание и разделение сегментов
- Измерение основных показателей для сегментов
- Отслеживание роста или убывания численности ключевых сегментов
- Отслеживание изменений в сегментах
- Отслеживание принадлежности к сегментам во времени
- Идентификация перемещений между сегментами
- Определение зависимостей, влияющих на переход между сегментами

А там есть предложеиия по структуре хранилища для описанной задачи7
...
Рейтинг: 0 / 0
Статус клиентов
    #33787823
Maxim Lvov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть структура - это BusinessObjects Warehouse. Она заточена под определенные аналитические приложения (Customer Intelligence, Finance Intelligence и т.п.), которые входят в состав набора Performance Management, куда также входит Set Analysis. Об этих пакетных аналитических приложениях можно почитать на сайте производителя.

Но Set Analysis можно использовать в рамках Performance Management и без этих "готовых" аналитических приложений. Т.е. по произвольному источнику. Но к этому источнику предъявлвяется ряд требований (связанных с первичными ключами, возможностью создания таблиц и view в этом источнике и т.п.).
...
Рейтинг: 0 / 0
Статус клиентов
    #33787880
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim LvovЕсть структура - это BusinessObjects Warehouse. Она заточена под определенные аналитические приложения (Customer Intelligence, Finance Intelligence и т.п.), которые входят в состав набора Performance Management, куда также входит Set Analysis. Об этих пакетных аналитических приложениях можно почитать на сайте производителя.

Но Set Analysis можно использовать в рамках Performance Management и без этих "готовых" аналитических приложений. Т.е. по произвольному источнику. Но к этому источнику предъявлвяется ряд требований (связанных с первичными ключами, возможностью создания таблиц и view в этом источнике и т.п.).

Про аналитические приложения почитать то можно, хвалебного маркетинга у всех хоть отбавляй, а ER диаграмм хранилища (меня заинтересовало Customer Intelligence) вряд ли там найдёшь. А сейчас мне нужно именно это.
...
Рейтинг: 0 / 0
Статус клиентов
    #33788172
серый ник...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор СаковичЗадача следующая

Клиент может иметь какой-то статус. в каждый момент времени - какой-то определённый. Конечно-же он может переходить из одного статуса в другой.

задача состоит в том, чтобы описать все эти переходы, в частности:

1) В кадый момент определять количество клиентов в каждом из статусов.
2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.
3) Для каждого клиента определять историю переходов.

Надо всё это спроектировать. Может кто делал что-то подобное, или помнит, где это описано у классиков, чтобы мне не изобретать велосипед.

Заранее спасибо.
Всем привет!
Вариант первый, ИМХО, самый сложный описан тут -
The Data WarehouseToolkit
Second Edition
The Complete Guide to Dimensional Modeling
by
Ralph Kimball
Margy Ross
CHAPTER 6 Customer Relationship Management

Еще вариант рассматривать статус клиента как factless fact.
Я бы выбрал этот вариант, хотя все зависит от задачи.
...
Рейтинг: 0 / 0
Статус клиентов
    #33788751
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый ник...Еще вариант рассматривать статус клиента как factless fact.
Я бы выбрал этот вариант, хотя все зависит от задачи.

Понятно, что factless fact table, какая же ещё. Вопрос был, какую выбрать структуру для этой таблицы.
...
Рейтинг: 0 / 0
Статус клиентов
    #33788773
scd2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор Сакович
Надо всё это спроектировать. Может кто делал что-то подобное, или помнит, где это описано у классиков, чтобы мне не изобретать велосипед.


Велосипед называется модернизированный SCD-2 :)

client_hist
------------------
client_id integer
version_id integer
status varchar2(10)
from_date date
end_date date

Виктор Сакович
1) В кадый момент определять количество клиентов в каждом из статусов.


Код: plaintext
1.
2.
3.
4.
select status, count(*)
 from client_hist
where report_date between from_date and end_date
group by status

Виктор Сакович 2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select from_client.status ||'->'||to_client.status, count(*)
 from client_hist from_client, client_hist to_client
where 
      from_client.begin_date <= report_end_date
and from_client.end_date   >=  report_begin_date
and    to_client.begin_date <= report_end_date
and    to_client.end_date   >=  report_begin_date
and from_client.client_id = to_client.client_id
and from_client.version_id = to_client.version_id +  1 
group by from_client.status ||'->'||to_client.status

Виктор Сакович
3) Для каждого клиента определять историю переходов.


Код: plaintext
1.
2.
3.
select * from client_hist
where client_id = report_client
order by version_id
...
Рейтинг: 0 / 0
Статус клиентов
    #33788806
серый ник...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор Сакович серый ник...Еще вариант рассматривать статус клиента как factless fact.
Я бы выбрал этот вариант, хотя все зависит от задачи.

Понятно, что factless fact table, какая же ещё. Вопрос был, какую выбрать структуру для этой таблицы.
ну вы блин даете(ц) хф
структу не ВЫБРАТЬ, а спроектировать трэба.
если нужен чисто анализ переходов клиентов из статуса в статус то делаете снэпшот статусов клиентов на дату\месяц\ год\ событие\...
и загоняете в factless fact table.(см картинку))))))
Дальше травите на это дело МСТР или БО без особых проблем.

Если нужна привязка к мерам, то SCD type 2 + type3, но это решение уже не такое юзер френдли. Хотя в БО это делается не сложно, главное все-таки структура.

PS картинка смеха ради...
...
Рейтинг: 0 / 0
Статус клиентов
    #33788809
серый ник..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то сглючило
...
Рейтинг: 0 / 0
Статус клиентов
    #33789269
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый ник..что-то сглючило

Спасибо конечно, но это уже предлагал No Pasaran. Задачка 2 не очень то решается этим способом, ниже объясню почему.

scd2
select from_client.status ||'->'||to_client.status, count(*)
from client_hist from_client, client_hist to_client
where
from_client.begin_date <= report_end_date
and from_client.end_date >= report_begin_date
and to_client.begin_date <= report_end_date
and to_client.end_date >= report_begin_date
and from_client.client_id = to_client.client_id
and from_client.version_id = to_client.version_id + 1
group by from_client.status ||'->'||to_client.status


Да в этом то всё и дело. Не хочется эту табличку джойнить на себя, она большая очень.
...
Рейтинг: 0 / 0
Статус клиентов
    #33789328
No Pasaran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.

Client_id,
date_begin,
date_end,
status_id
Previous_status_id


Select count(*) from table where status_id=S1 and previous_status_id=Sk and date_begin between #DATE1 and #DATE2


Или я непавильно понял задачу?
...
Рейтинг: 0 / 0
Статус клиентов
    #33789369
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
No Pasaran автор2) В произвольный период времи определять количество переходов клиентов из одного статуса в другой.

Client_id,
date_begin,
date_end,
status_id
Previous_status_id


Select count(*) from table where status_id=S1 and previous_status_id=Sk and date_begin between #DATE1 and #DATE2


Или я непавильно понял задачу?

Ну да, что-то вроде, в правильном направлении двигаешься. В общем пока я решил попробовать реализовать структуру, которая при помощи вьюшки даст следующую фактовую таблицу.

Client_id
status_id
date_id
previous_status_id
tenure

Где tenure - количество дней с момента перемены статуса.
Тогда задачка 2) решается просто фильтром tenure=0, с первой и третьей - и так всё понятно.
...
Рейтинг: 0 / 0
Статус клиентов
    #33789424
серый ник...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы просто добавил в таблицу фактов признак изменился ли статус клиента.
типа is_changed (0 или 1)
посчитать сумму на нужную дату сможет любой репорт тул))
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Статус клиентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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