|
|
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть вопрос, интересно мнение сообщества, не могу найти примеры подобной реализации. Есть хранилище, на нем табличная модель 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 заявка идет, поэтому все что мне нужно это только ее атрибуты для анализа, чтобы видеть по ним воронку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2019, 22:09 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
И да, дополню. Таких справочника 3, в 1м только флаги, их в 15, во втором данные по рискам (скор оценка, версия скор модели и прочее) и 3я все остальное вроде статусов, кол-во приложенных доков, доход клиента (это к заявке относится), была ли отправка смс, кол-ва раз сколько отправили и прочее, прочее. Разбил так как одна таблица получилась бы большая по кол-ву строк и ширине (в одной таблице вышло полей 50). В самом факте, если говорить про заявки, только даты (10 полей), ключи справочников, суммы (3 поля) + пару текстовых полей (это обновляемые поля, вроде статуса контракта. Когда контракт выдается \ отменяется \ закрывается, здесь проставляется нужное значение. Статус нужен для анализа прохождения заявки по основным шагам, сколько прошло времени, т.е. заявки которые дошли до контракта были в работе не больше 2 дней, 3 и более большой % контрактов был отменен, такую инфу можно только в заявках взять, но нужно знать дошла ли заявка до контракта). Из-за последнего думал сделать контракты как Dim, но по ним тоже большой анализ в разрезе разных атрибутов, но из контрактов в заявке нужен только статус (на текущий момент), решил сделать как обновляемое поле. P.S. Все работает быстро, пока... ))) Но правильно ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2019, 22:33 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
И еще дополню, история не нужна. Т.е. если поменялся статус у заявки то просто ей присвоится новый ключ, заявка прошла на новый этап, в одном из полей проставится нужная дата и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2019, 22:35 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
интересный банк, шо всего 10% заявок материализуется в контракты. Ничего страшного нет. 5 раз делал модели DWH витрин и многомерные по розничному направлению. Измерение заявок в 60 млн., из которого выводятся в отдельные - клиенты, продукты, ролевые даты, география и точки продаж/отделения. В собственно измерении заявки остаются не так много атриьутов, которые компонуются в натуральные иерархии. Если заморачиваться с обезличиванием персональных данных, то можно еще вывести часть атрибутов в junk-дименшион, а остальные вертикально поделить на отдельные измерения заявок с ключом id заявки, но разграничить доступ. Ключи суррогатные целочисленные у всех атрибутов, модель MOLAP староверная (с Tabular идите в лес). Сервер выделенный мощный, RAM 512Гб, утилизация не превышала 20-25% Drilldown в больших измерениях работает нормально. Если еще грамотно с дизайном агрегаций и партиций поработать, то все равно нормально. Словом, разработчикам Multidimensional большой спасиб, делали продукт на совесть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2019, 23:29 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это. Это условности, логическое разделение в текущем контексте. Даже Календарь дат - выполняет роль и измерения и таблицы фактов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2019, 23:34 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Alex_496, Спасибо за ответ! Я думал так сделать, меня смутило что 1) Это сейчас 20 млн, к концу года заявок будет под 50, что потом когда перейдет отметку в 100. 100 млн справочник, круто выходит. 2) В таком варианте факт будет 1 к 1 со справочником, если я правильно понял. Т.е. в справочнике у нас ID заявки и ее атрибуты (которые сейчас у меня в 3х справочниках), в факте суммы и даты. Тогда получается это будет также справочником к контрактом, который в 10 раз больше самих контрактов. В такой реализации тогда сур. ключ заявки надо пробрасывать дальше в звонки и транзакции, чтобы видеть всю воронку. Тоже самое как я понимаю тогда касается контрактов, это будет факт - дим которые 1 к 1 идут, а потом сур ключ кидается в транзакции и пару других фактов. Плюсы такой реализации это проще сделать и понятнее, но справочники получаются уж очень до хрена большие + 1 к 1 с фактом связь, это дикое зло если верить Кимболу и другим умным дядькам. Плюс в той реализации что у меня это небольшие справочники, 3 по тысяч сто строк, фильтрация работает оч быстро. Минус это гемор с загрузкой и в ETL без бутылки лучше не лезть. Не сделал как советуете вы по сути по 2м причинам, что заявок много и их будет еще больше, и мне не интересны данные заявка - контракт (кроме разве что одного случая как я выше писал когда нужно знать дошла ли заявка до контракта). 99% отчетов это меры по атрибутам, т.е. сколько у ID с заявкой контрактов и сколько по ней заплатили не очень интересно. Интересно сколько было заявок с флагом Repeat, сколько транзакций и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 08:35 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
По сути система не сильно измениться от того что есть у меня, только вы предлагаете по сути из 3 таблиц Junk Dimension сделать одну со всеми атриьутам заявки, и ключ этой дим кидать в факт. т.е. сейчас это так как на картинке. Видно 2 Junk таблицы с аттрибутами, они сольются в одну и к ним добавиться только ID заявки по сути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 10:17 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
aleksrov, Что за банк с таким диким притоком заявок? Может что-то путаете - собственно заявки и состояния (история по заявкам) Заявки - это прототипы, те же договоры, связь 1:1, многие измерения общие для заявок и договоров. В заявках больше качественных характеристик. Сколь заявок материализовались в договоры - это один из самых востребованных показателей у продажников, рисковиков. Junk Dimension с boolean полями у меня получалось одно; иные атрибуты расходились по общим измерениям (Продукты, Даты, Точки банка, Клиенты); и персон.данные с гранулярностью ID заявки - в отдельное измерение, поскольку ограничение доступа (функциональности маскирования данных *** - не хватает в OLAP) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 10:55 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Alex_496, Это что то вроде быстро деньги, только европейский вариант. Сейчас попробовал сделать по быстрому связь заявки факт, заявки Dim (1 к 1 с фактом заявок) и цепляем к контрактам (по сути тут тоже 1 к 1, хотя могут быть исключения, когда контракт отменили, но потом создали новый по той же заявке, это тоже важные данные вроде как, пока не нужны, но скоро точно нужен будет анализ такого, раньше такого в источнике не было, вот в том числе из-за них я и начал думать что я что-то не то делаю), вроде быстро... Да, все аттрибуты заявки важны для договора (именно аттрибуты). Т.е. дата создания заявки это в факте заявок будет, т.к. (если сделать как вы советуете) я фильтрую по димзаявки допустим по полю ChannelPartner (имя партнера) и вижу что за месяц было создано (мера просто Countrows допустим по факту заявок) 100 000 тысяч заявок и выдан 1 контракт и то по нему ничего не платили, то такого партнера надо слать. В таком случае Junk Dimension даже и не будет, все три что сейчас есть сольются в справочник заявок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 11:27 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Но все ровно остается вопрос когда кол-во заявок приблизится к 100 млн, насколько система и пользователи будут страдать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 11:27 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
aleksrov, Детальный слой, уровень ID заявки можно скрыть. Все же OLAP - не для просмотра детального слоя, хотя и удобно. МФО категорически отказывал им, не берите грех на душу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 11:55 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы, попробую на выходных что то быстрое собрать и посмотреть на скорость. По МФО, я нейтрально к ним отношусь, не плохо не хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 12:16 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Alex_496и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это. Это условности, логическое разделение в текущем контексте. Даже Календарь дат - выполняет роль и измерения и таблицы фактов. Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно Календарь как таблица фактов - приведи пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 09:51 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
aleksrovПотом гружу контракты, и делаю Lookup к фату заявок, чтобы получить ключ DimAppAttribute. Расскажите, пожалуйста, как вы делаете лукап к фактам (>10^7 записей: по одной записи или пачкой, запросом SQL или иным способом, сколько времени это занимает). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 10:05 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Мне кажется именование важно в особености если разбивать как вы советуете. Вот есть контракт, он и Dim и Факт. Факт т.к. нам интересны кол-во, сумма, средняя сумма и прочее, Dim т.к. по нему мы фильтруем по аттрибутам контракта (флаги, статус и прочее) транзакции (для одного контракта их сотни может быть) и к примеру таблицу логов контракта (допусти интересно сколько раз в какой статус попадали контракты с разными атрибутами), т.е. здесь также идет разбивка, DimContract где ID_Contract и все аттрибуты и FactContract где сур.ключ из DimContract (связь 1 к 1) и ключи других справчоников (продукт, клиент, сотрудник) а также суммы и даты (связанные с календарем). И вопрос как это тогда назвать если не DimContract и FactContract, если только ContractAttribute и Contract? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 10:08 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Полковник. Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно Допустим, есть факты сделок. Потом сделали транзакции, для которых сделки являются справочником. Делаете вьюху сделок с кошерным именем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 10:19 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Alex_496и да, в DWH перестаньте в именования таблиц вписывать Dim и Fact, ибо детство это. Это условности, логическое разделение в текущем контексте. ну, у меня чуть другие префиксы. но если используется в обоих направлениях, то просто без префикса делаю (на само деле таких обычно не очень много). переименовать (префикс) тоже быстро . так что все равно удобнее использовать "детский" подход Полковник.Календарь как таблица фактов - приведи пример. количество рабочих дней + участие в расчетах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 11:39 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийПолковник. Перетрудился? Тебе то что за дело, ну назыаеем мы свои таблички с приставками, нам удобно Допустим, есть факты сделок. Потом сделали транзакции, для которых сделки являются справочником. Делаете вьюху сделок с кошерным именем? Я делаю наоборот. Вьюха фактов из вьюхи измерения, т.к. в фактах только меры, а в измерении полно атрибутов. Получаю вьюху фактов из нескольких полей и таблицу для измерения, где их много. Так удобнее в OLAP дизайнерах в дальнейшем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 11:57 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
tarrus, Опечатался. Вьюха фактов из вьюхи/таблицы измерения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 11:59 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
количество дней, выходных, рабочих дней - это метрики, т.е. строго говоря календарь - уже не только измерение, поэтому эти префиксы суффиксы теряют смысл. что еще хуже с практической стороны, что префиксы вмешиваются в представление по алфавиту списка таблиц в среде разработки. Куда полезнее, когда ключевое слово идет первым, и тогда таблицы компонуются рядышком по тематикам. Никаких сокращений, кроме общеизвестных в бизнесе, никаких префиксов-суффиксов. Бизнес-пользователи,аналитики и ИТ общаются на едином языке, оперируя таблицами и атрибутами. Наименования опираются, сверяются с корпоративным глоссарием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 15:01 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Alex_496количество дней, выходных, рабочих дней - это метрики, т.е. строго говоря календарь - уже не только измерение, поэтому эти префиксы суффиксы теряют смысл. что еще хуже с практической стороны, что префиксы вмешиваются в представление по алфавиту списка таблиц в среде разработки. Куда полезнее, когда ключевое слово идет первым, и тогда таблицы компонуются рядышком по тематикам. Никаких сокращений, кроме общеизвестных в бизнесе, никаких префиксов-суффиксов. Бизнес-пользователи,аналитики и ИТ общаются на едином языке, оперируя таблицами и атрибутами. Наименования опираются, сверяются с корпоративным глоссарием. Пахнет вкусовщиной, и почти полностью с вами согласен. Как правило, напрямую в DWH мало пользователей ходит, поэтому префиксы Dim и Fact использую только для удобства разработчиков моделей. В семантическом слое, доступном аналитикам, никаких префиксов не нужно, я этого не разрешаю делать. Они будут только во вред и запутают неопытных людей. В целом, в новых проектах, где DWH жестко не привязана к многомерной модели или вообще представляет собой дата-лейк, больше не использую этих префиксов. Они не отражают сути и для разных подразделений играют разные роли. Получается просто репозиторий сущностей со своими бизнес именами. Однако, для датамартов же, где роли сущностей определены, не вижу проблем продолжать использовать префиксы, если разработчику так удобнее и если они не переползают потом в семантический слой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 17:11 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
чем меньше семантических слоев, тем проще поддерживать. чем больше потребителей у DWH, тем оно зрелое, тем выгоднее с разных аспектов. никого не агитирую, каждый точит как он хочет. один продаст только на уровне IT, другой и бизнесам и еще не раз. дернул быстро adhoc запрос из Эксель, отправил файл экспату- инвестору и тому все понятно без всяких алиасов. Кстати, тот же экспат на годовом наблюд. совете чуть не уволил дир.департамента, который не доглядел в отчете за полями с префиксами. Уставший экспат стал неверно трактовать значения отчета, домысливать, нервничать, русский яз. не знает,иа дир. департамента не мог точно прокомментировать смысл поля, Ит-шника на такие заседания не пускают. Это не сказка, а реальный случай, после которого убеждать в тщательности именования полей уже не приходилось. Системные наименования = английские бизнес-именования Опять же, аудит баз проходить проще, отправляя спонсору спец. проектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 19:10 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Я за использование префиксов/схем, просто так порядка больше - открываешь ПО типа SSMS и сразу видишь: вот факты, вот измерения, вот отдельный слабосвязанный с остальным ХД функционал какого-нибудь Интерфакса или Блумберга. Тот же календарь именую как измерение по принципу "в какой роли больше используется". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2019, 10:04 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
КритикЯ за использование префиксов/схем, просто так порядка больше - открываешь ПО типа SSMS и сразу видишь: вот факты, вот измерения, вот отдельный слабосвязанный с остальным ХД функционал какого-нибудь Интерфакса или Блумберга. Тот же календарь именую как измерение по принципу "в какой роли больше используется". Плюс стопятьсот ))). Схема базы должна быть легко читаемой, и все эти приставки и суффиксы били придуманы людьми не на пустом месте. По поводу сделок измерений и сделок - транзакций, если у сделок есть связь с другими фактами например с платежами, то сделка становится вырожденным измерением, т.е. существует и так и так и да, таблицы фактов нужно развязывать через измерения.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2019, 06:39 |
|
||
|
Разбивка факта на Dim и Fact
|
|||
|---|---|---|---|
|
#18+
Использование схем баз достаточно. Логическое (в т.ч. использование цветов) разделение по ER-диаграммам в PowerDesigner с доп. визуализацией характеристик таблиц и представлений дает еще бОльшую наглядность, читабельность, понимание влияний & зависимостей.... и избавляет (сокращает) от необходимости прямого доступа к базам, к которым имеют только спец. сотрудники ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2019, 11:21 |
|
||
|
|

start [/forum/moderation_log.php?user_name=pumpurumer]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 440ms |
| total: | 617ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...