Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Разбивка факта на Dim и Fact / 25 сообщений из 25, страница 1 из 1
24.04.2019, 22:09
    #39805914
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Всем привет!
Есть вопрос, интересно мнение сообщества, не могу найти примеры подобной реализации.
Есть хранилище, на нем табличная модель SSAS и Power BI, вопрос в реализации измерений.
Есть такая воронка заявка - кредит - транзакция. Заявок много, млн 20 и быстро растет, кредитов % 10 от заявок, транзакций тоже 20 млн. Так вот, есть измерения у которых есть бизнес ключ в источнике, это просто, id клиента, id geo данных (город и т.д.), а что делают обычно если нужны аттрибуты заявки которые в источнике лежат прям в факте, т.е. заявки в источнике это широченная таблица (там нарушены все нормальные форма, но это другой разговор)
Пример тут https://www.sql.ru/forum/1311409/power-bi-kak-svyazat-2-sreza
К примеру у заявки есть куча разных аттрибутов, из примера выше Repeat Sale (1,0), Channel и т.д., на самом деле их очень много. Бизнес хочет по ВСЕМ этим аттрибутам фильтровать всю воронку, т.е. я выбираю Channel = Mobile и вижу кол-во заявок, сумму которую хотели получить (цифра в заявке), кол-во контрактов, сумму контрактов и сколько было выплачено % по ним. Эти атрибуты есть только в заявке, в источнике в контракте только ID заявки, а в транзакции ID контракта. Вроде как заявка получается как Dim, но уж очень она большая выходит, и нужен ее анализ, т.е. сколько создали, суммы, шаги (в факте заявок есть разные даты, вроде отправки смс и прочее). Как сейчас, 1 шагом гружу в стейдж все заявки, потом формирую справочник, а именно выбираю нужные столбцы (channel, repeat sale и прочее), группирую (т.е. это и будет бизнес ключ) и делаю Merge DimAppAttribute, через Identity получаю суррогатный ключ, потом когда гружу факты, делаю Lookup по каждому полю чтобы получить суррогатный ключ атрибутов. Потом гружу контракты, и делаю Lookup к фату заявок, чтобы получить ключ DimAppAttribute. Как-то так.
Больше всего последнее смущает, обращаюсь к факту как к Dim, но не вижу смысла делать заявки измерением, во первых они здоровые, во вторых по требованию (анализ который необходим) это факт и в 3х к одному контракту только 1 заявка идет, поэтому все что мне нужно это только ее атрибуты для анализа, чтобы видеть по ним воронку.
...
Рейтинг: 0 / 0
24.04.2019, 22:33
    #39805918
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
И да, дополню.
Таких справочника 3, в 1м только флаги, их в 15, во втором данные по рискам (скор оценка, версия скор модели и прочее) и 3я все остальное вроде статусов, кол-во приложенных доков, доход клиента (это к заявке относится), была ли отправка смс, кол-ва раз сколько отправили и прочее, прочее. Разбил так как одна таблица получилась бы большая по кол-ву строк и ширине (в одной таблице вышло полей 50). В самом факте, если говорить про заявки, только даты (10 полей), ключи справочников, суммы (3 поля) + пару текстовых полей (это обновляемые поля, вроде статуса контракта. Когда контракт выдается \ отменяется \ закрывается, здесь проставляется нужное значение. Статус нужен для анализа прохождения заявки по основным шагам, сколько прошло времени, т.е. заявки которые дошли до контракта были в работе не больше 2 дней, 3 и более большой % контрактов был отменен, такую инфу можно только в заявках взять, но нужно знать дошла ли заявка до контракта).
Из-за последнего думал сделать контракты как Dim, но по ним тоже большой анализ в разрезе разных атрибутов, но из контрактов в заявке нужен только статус (на текущий момент), решил сделать как обновляемое поле.
P.S. Все работает быстро, пока... ))) Но правильно ли.
...
Рейтинг: 0 / 0
24.04.2019, 22:35
    #39805919
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
И еще дополню, история не нужна. Т.е. если поменялся статус у заявки то просто ей присвоится новый ключ, заявка прошла на новый этап, в одном из полей проставится нужная дата и т.д.
...
Рейтинг: 0 / 0
24.04.2019, 23:29
    #39805926
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
интересный банк, шо всего 10% заявок материализуется в контракты.

Ничего страшного нет. 5 раз делал модели DWH витрин и многомерные по розничному направлению.
Измерение заявок в 60 млн., из которого выводятся в отдельные - клиенты, продукты, ролевые даты, география и точки продаж/отделения. В собственно измерении заявки остаются не так много атриьутов, которые компонуются в натуральные иерархии. Если заморачиваться с обезличиванием персональных данных, то можно еще вывести часть атрибутов в junk-дименшион, а остальные вертикально поделить на отдельные измерения заявок с ключом id заявки, но разграничить доступ.
Ключи суррогатные целочисленные у всех атрибутов, модель MOLAP староверная (с Tabular идите в лес).
Сервер выделенный мощный, RAM 512Гб, утилизация не превышала 20-25%
Drilldown в больших измерениях работает нормально. Если еще грамотно с дизайном агрегаций и партиций поработать, то все равно нормально.
Словом, разработчикам Multidimensional большой спасиб, делали продукт на совесть
...
Рейтинг: 0 / 0
24.04.2019, 23:34
    #39805928
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это.
Это условности, логическое разделение в текущем контексте. Даже Календарь дат - выполняет роль и измерения и таблицы фактов.
...
Рейтинг: 0 / 0
25.04.2019, 08:35
    #39805997
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Alex_496,

Спасибо за ответ! Я думал так сделать, меня смутило что
1) Это сейчас 20 млн, к концу года заявок будет под 50, что потом когда перейдет отметку в 100. 100 млн справочник, круто выходит.
2) В таком варианте факт будет 1 к 1 со справочником, если я правильно понял. Т.е. в справочнике у нас ID заявки и ее атрибуты (которые сейчас у меня в 3х справочниках), в факте суммы и даты. Тогда получается это будет также справочником к контрактом, который в 10 раз больше самих контрактов.
В такой реализации тогда сур. ключ заявки надо пробрасывать дальше в звонки и транзакции, чтобы видеть всю воронку.
Тоже самое как я понимаю тогда касается контрактов, это будет факт - дим которые 1 к 1 идут, а потом сур ключ кидается в транзакции и пару других фактов.
Плюсы такой реализации это проще сделать и понятнее, но справочники получаются уж очень до хрена большие + 1 к 1 с фактом связь, это дикое зло если верить Кимболу и другим умным дядькам.
Плюс в той реализации что у меня это небольшие справочники, 3 по тысяч сто строк, фильтрация работает оч быстро. Минус это гемор с загрузкой и в ETL без бутылки лучше не лезть.
Не сделал как советуете вы по сути по 2м причинам, что заявок много и их будет еще больше, и мне не интересны данные заявка - контракт (кроме разве что одного случая как я выше писал когда нужно знать дошла ли заявка до контракта). 99% отчетов это меры по атрибутам, т.е. сколько у ID с заявкой контрактов и сколько по ней заплатили не очень интересно. Интересно сколько было заявок с флагом Repeat, сколько транзакций и т.д.
...
Рейтинг: 0 / 0
25.04.2019, 10:17
    #39806031
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
По сути система не сильно измениться от того что есть у меня, только вы предлагаете по сути из 3 таблиц Junk Dimension сделать одну со всеми атриьутам заявки, и ключ этой дим кидать в факт. т.е. сейчас это так как на картинке. Видно 2 Junk таблицы с аттрибутами, они сольются в одну и к ним добавиться только ID заявки по сути.
...
Рейтинг: 0 / 0
25.04.2019, 10:55
    #39806051
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
aleksrov,

Что за банк с таким диким притоком заявок? Может что-то путаете - собственно заявки и состояния (история по заявкам)

Заявки - это прототипы, те же договоры, связь 1:1, многие измерения общие для заявок и договоров.
В заявках больше качественных характеристик.
Сколь заявок материализовались в договоры - это один из самых востребованных показателей у продажников, рисковиков.

Junk Dimension с boolean полями у меня получалось одно; иные атрибуты расходились по общим измерениям (Продукты, Даты, Точки банка, Клиенты); и персон.данные с гранулярностью ID заявки - в отдельное измерение, поскольку ограничение доступа (функциональности маскирования данных *** - не хватает в OLAP)
...
Рейтинг: 0 / 0
25.04.2019, 11:27
    #39806085
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Alex_496,

Это что то вроде быстро деньги, только европейский вариант.
Сейчас попробовал сделать по быстрому связь заявки факт, заявки Dim (1 к 1 с фактом заявок) и цепляем к контрактам (по сути тут тоже 1 к 1, хотя могут быть исключения, когда контракт отменили, но потом создали новый по той же заявке, это тоже важные данные вроде как, пока не нужны, но скоро точно нужен будет анализ такого, раньше такого в источнике не было, вот в том числе из-за них я и начал думать что я что-то не то делаю), вроде быстро...
Да, все аттрибуты заявки важны для договора (именно аттрибуты). Т.е. дата создания заявки это в факте заявок будет, т.к. (если сделать как вы советуете) я фильтрую по димзаявки допустим по полю ChannelPartner (имя партнера) и вижу что за месяц было создано (мера просто Countrows допустим по факту заявок) 100 000 тысяч заявок и выдан 1 контракт и то по нему ничего не платили, то такого партнера надо слать.
В таком случае Junk Dimension даже и не будет, все три что сейчас есть сольются в справочник заявок.
...
Рейтинг: 0 / 0
25.04.2019, 11:27
    #39806086
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Но все ровно остается вопрос когда кол-во заявок приблизится к 100 млн, насколько система и пользователи будут страдать.
...
Рейтинг: 0 / 0
25.04.2019, 11:55
    #39806121
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
aleksrov,

Детальный слой, уровень ID заявки можно скрыть. Все же OLAP - не для просмотра детального слоя, хотя и удобно.

МФО категорически отказывал им, не берите грех на душу
...
Рейтинг: 0 / 0
25.04.2019, 12:16
    #39806143
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Спасибо за советы, попробую на выходных что то быстрое собрать и посмотреть на скорость.

По МФО, я нейтрально к ним отношусь, не плохо не хорошо.
...
Рейтинг: 0 / 0
26.04.2019, 09:51
    #39806590
Полковник.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Alex_496и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это.
Это условности, логическое разделение в текущем контексте. Даже Календарь дат - выполняет роль и измерения и таблицы фактов.
Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно

Календарь как таблица фактов - приведи пример.
...
Рейтинг: 0 / 0
26.04.2019, 10:05
    #39806594
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
aleksrovПотом гружу контракты, и делаю Lookup к фату заявок, чтобы получить ключ DimAppAttribute.
Расскажите, пожалуйста, как вы делаете лукап к фактам (>10^7 записей: по одной записи или пачкой, запросом SQL или иным способом, сколько времени это занимает).
...
Рейтинг: 0 / 0
26.04.2019, 10:08
    #39806597
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Мне кажется именование важно в особености если разбивать как вы советуете.
Вот есть контракт, он и Dim и Факт. Факт т.к. нам интересны кол-во, сумма, средняя сумма и прочее, Dim т.к. по нему мы фильтруем по аттрибутам контракта (флаги, статус и прочее) транзакции (для одного контракта их сотни может быть) и к примеру таблицу логов контракта (допусти интересно сколько раз в какой статус попадали контракты с разными атрибутами), т.е. здесь также идет разбивка, DimContract где ID_Contract и все аттрибуты и FactContract где сур.ключ из DimContract (связь 1 к 1) и ключи других справчоников (продукт, клиент, сотрудник) а также суммы и даты (связанные с календарем). И вопрос как это тогда назвать если не DimContract и FactContract, если только ContractAttribute и Contract?
...
Рейтинг: 0 / 0
26.04.2019, 10:19
    #39806605
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Полковник. Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно
Допустим, есть факты сделок. Потом сделали транзакции, для которых сделки являются справочником. Делаете вьюху сделок с кошерным именем?
...
Рейтинг: 0 / 0
26.04.2019, 11:39
    #39806661
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Alex_496и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это.
Это условности, логическое разделение в текущем контексте.
ну, у меня чуть другие префиксы. но если используется в обоих направлениях, то просто без префикса делаю (на само деле таких обычно не очень много). переименовать (префикс) тоже быстро . так что все равно удобнее использовать "детский" подход


Полковник.Календарь как таблица фактов - приведи пример.
количество рабочих дней + участие в расчетах
...
Рейтинг: 0 / 0
26.04.2019, 11:57
    #39806675
tarrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
.ЕвгенийПолковник. Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно
Допустим, есть факты сделок. Потом сделали транзакции, для которых сделки являются справочником. Делаете вьюху сделок с кошерным именем?

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

Так удобнее в OLAP дизайнерах в дальнейшем.
...
Рейтинг: 0 / 0
26.04.2019, 11:59
    #39806677
tarrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
tarrus,

Опечатался. Вьюха фактов из вьюхи/таблицы измерения.
...
Рейтинг: 0 / 0
26.04.2019, 15:01
    #39806846
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
количество дней, выходных, рабочих дней - это метрики, т.е. строго говоря календарь - уже не только измерение, поэтому эти префиксы суффиксы теряют смысл.
что еще хуже с практической стороны, что префиксы вмешиваются в представление по алфавиту списка таблиц в среде разработки.

Куда полезнее, когда ключевое слово идет первым, и тогда таблицы компонуются рядышком по тематикам. Никаких сокращений, кроме общеизвестных в бизнесе, никаких префиксов-суффиксов.
Бизнес-пользователи,аналитики и ИТ общаются на едином языке, оперируя таблицами и атрибутами. Наименования опираются, сверяются с корпоративным глоссарием.
...
Рейтинг: 0 / 0
26.04.2019, 17:11
    #39806926
tarrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Alex_496количество дней, выходных, рабочих дней - это метрики, т.е. строго говоря календарь - уже не только измерение, поэтому эти префиксы суффиксы теряют смысл.
что еще хуже с практической стороны, что префиксы вмешиваются в представление по алфавиту списка таблиц в среде разработки.

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

Пахнет вкусовщиной, и почти полностью с вами согласен.

Как правило, напрямую в DWH мало пользователей ходит, поэтому префиксы Dim и Fact использую только для удобства разработчиков моделей. В семантическом слое, доступном аналитикам, никаких префиксов не нужно, я этого не разрешаю делать. Они будут только во вред и запутают неопытных людей.

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

Однако, для датамартов же, где роли сущностей определены, не вижу проблем продолжать использовать префиксы, если разработчику так удобнее и если они не переползают потом в семантический слой.
...
Рейтинг: 0 / 0
26.04.2019, 19:10
    #39806973
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
чем меньше семантических слоев, тем проще поддерживать.
чем больше потребителей у DWH, тем оно зрелое, тем выгоднее с разных аспектов.

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

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

Это не сказка, а реальный случай, после которого убеждать в тщательности именования полей уже не приходилось.

Системные наименования = английские бизнес-именования

Опять же, аудит баз проходить проще, отправляя спонсору спец. проектов
...
Рейтинг: 0 / 0
27.04.2019, 10:04
    #39807132
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Я за использование префиксов/схем, просто так порядка больше - открываешь ПО типа SSMS и сразу видишь: вот факты, вот измерения, вот отдельный слабосвязанный с остальным ХД функционал какого-нибудь Интерфакса или Блумберга.
Тот же календарь именую как измерение по принципу "в какой роли больше используется".
...
Рейтинг: 0 / 0
29.04.2019, 06:39
    #39807395
Полковник.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
КритикЯ за использование префиксов/схем, просто так порядка больше - открываешь ПО типа SSMS и сразу видишь: вот факты, вот измерения, вот отдельный слабосвязанный с остальным ХД функционал какого-нибудь Интерфакса или Блумберга.
Тот же календарь именую как измерение по принципу "в какой роли больше используется".

Плюс стопятьсот ))). Схема базы должна быть легко читаемой, и все эти приставки и суффиксы били придуманы людьми не на пустом месте.
По поводу сделок измерений и сделок - транзакций, если у сделок есть связь с другими фактами например с платежами, то сделка становится вырожденным измерением, т.е. существует и так и так и да, таблицы фактов нужно развязывать через измерения..
...
Рейтинг: 0 / 0
29.04.2019, 11:21
    #39807495
Alex_496
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка факта на Dim и Fact
Использование схем баз достаточно.
Логическое (в т.ч. использование цветов) разделение по ER-диаграммам в PowerDesigner с доп. визуализацией характеристик таблиц и представлений дает еще бОльшую наглядность, читабельность, понимание влияний & зависимостей.... и избавляет (сокращает) от необходимости прямого доступа к базам, к которым имеют только спец. сотрудники
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Разбивка факта на Dim и Fact / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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