powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
25 сообщений из 31, страница 1 из 2
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018636
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, представленная на рисунке (скриншот из книжки) таблица фактов, вроде бы, логична:
каждый факт (сумма) представлена для конкретных значений:
1. дата
2. товар
...
Пусть у меня будет всего два измерения - дата и товар. Для простоты.

Что если у меня на ту же самую дату тот же самый товар пробивался несколько раз?
Или, например, это не товар, а оказанная услуга, для которой ценник всегда оговаривается отдельно?

И вот я получаю таблицу сделок (денормализую, в качестве ID сразу value засуну в таблицу фактов для простоты описания)
Дата_ID услуга_ID цена11.09.2020 скрипт на VBA 1000011.09.2020 скрипт на VBA 1200011.09.2020 удаление вирусов 1000011.09.2020 скрипт на VBA 40000
Понятно, что составной ключ здесь не уникальный. Чтобы получить каноническую таблицу фактов с заданной гранулярностью, я должен сделать таблицу с уникальными ключами. Ок, пробую:
Дата_ID услуга_ID цена11.09.2020 скрипт на VBA 6200011.09.2020 удаление вирусов 10000
Но что если пользователь захочет в итоге потом взять не сумму по значениям, а среднее по всем сделкам? Просто по колонке "цена"
Среднее между 62000 и 10000 не то же самое, что среднее в первой таблице.
Скажете, что нужно добавить новую колонку "количество", ок.
Но что если пользователь захочет найти медианную сделку по каждой строке?

Короче, в итоге , у меня не выходит избавиться от "таблицы фактов" такого вида
ID Дата_ID услуга_ID цена1. 11.09.2020 скрипт на VBA 100002. 11.09.2020 скрипт на VBA 120003. 11.09.2020 удаление вирусов 100004. 11.09.2020 скрипт на VBA 40000
Но это, вроде как, неправильно, потому что Кимбалл пишет:
The fact table has its own primary key composed of a subset of the foreign keys. This key is often called a composite key.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018640
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В графике который вы приложили, включен номер транзакции.

Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день.
Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018687
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно, Евангелие нуждается в трактователях и интерпретаторах, изменяющих значение первоначальных слов вплоть до противоположного:

https://www.kimballgroup.com/2006/07/design-tip-81-fact-table-surrogate-key/ However, there are a few circumstances when assigning a surrogate key to the rows in a fact table is beneficial:

  • Sometimes the business rules of the organization legitimately allow multiple identical rows to exist for a fact table. Normally as a designer, you try to avoid this at all costs by searching the source system for some kind of transaction time stamp to make the rows unique. But occasionally you are forced to accept this undesirable input. In these situations it will be necessary to create a surrogate key for the fact table to allow the identical rows to be loaded.
  • Certain ETL techniques for updating fact rows are only feasible if a surrogate key is assigned to the fact rows. Specifically, one technique for loading updates to fact rows is to insert the rows to be updated as new rows, then to delete the original rows as a second step as a single transaction. The advantages of this technique from an ETL perspective are improved load performance, improved recovery capability and improved audit capabilities. The surrogate key for the fact table rows is required as multiple identical primary keys will often exist for the old and new versions of the updated fact rows between the time of the insert of the updated row and the delete of the old row.
  • A similar ETL requirement is to determine exactly where a load job was suspended, either to resume loading or back put the job entirely. A sequentially assigned surrogate key makes this task straightforward.
Remember, surrogate keys for dimension tables are a great idea. Surrogate keys for fact tables are not logically required but can be very helpful in the back room ETL processing.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018775
Полковник.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений,

Евангелие нуждается прежде в его в правильном переводе.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018792
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
В графике который вы приложили, включен номер транзакции.

Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день.
Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность.

Согласен. Обычно по продажам есть номер чека или номер интернет-заказа.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018816
Полковник.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bideveloper,

Если нет цели анализировать данные до номера чека, то лучше свернуть данные в таблице по измерениям.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018817
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полковник.
Евангелие нуждается прежде в его в правильном переводе.

Айтишник, не умеющий читать на арамейском английском - это лишь половина айтишника.

Кстати, тут затронута интересная тема измерения для разрешения ситуаций, подобных указанной. Кто как готовит подобные измерения?
  • Если использовать поле идентификатора факта, то получим огромное измерение со всеми вытекающими негативными последствиями.
  • поле номера факта за день, как правило, в готовом виде отсутствует и его надо считать - что мне кажется делом ресурсоемким. Да и номеров за день может возникнуть не так мало.
И мой личный способ:
  • При перегрузке фактов из ХД в витрины из полей-ссылок на измерения создается контрольная сумма и в витрину попадает порядковый номер факта с его значением контрольной суммы. Делается это абсолютно параллельно основному потоку, но требует определенного объема памяти под коллекцию счетчиков. Длина полученного измерения оказывается гораздо меньше предыдущих вариантов, а характер распределения его ссылок среди фактов гораздо удобнее для сжатия.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018854
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хорошо я согласен
Но что если пользователь захочет в итоге потом взять не сумму по значениям, а среднее по всем сделкам? Просто по колонке "цена"
Среднее между 62000 и 10000 не то же самое, что среднее в первой таблице.
Скажете, что нужно добавить новую колонку "количество", ок.
Но что если пользователь захочет найти медианную сделку по каждой строке?

ЭТО значит, что из моделирования у вас есть бизнес-сущность "сделка" или "заказ". И ID этой сущности вы опустили в данных. Если такие вопросы к сущности "сделка" есть - можно ввести его как скрытое измерение. Обычно код заказа - это так называемое degenerate dimension - которое вроде как dimension (то есть связано с сущностью), но само не имеет атрибутов и не используется для анализа.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018882
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
Как обычно, Евангелие нуждается в трактователях и интерпретаторах, изменяющих значение первоначальных слов вплоть до противоположного:

смеялся с этой формулировки
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40018885
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
В графике который вы приложили, включен номер транзакции.

Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день.
Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность.

Именно поэтому я перешёл от примера Кимбалла к своему, где номеров уникальных нет.
И вопрос был в его добавлении.
.Евгений, в целом, ответил на этот вопрос
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40022931
Фотография Evolex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде бы эта та тема самого распространенного ошибочного толкования кимбала, когда и для суммарных данных и детальных почему-то рассматривают одну и ту же гранулярность (не разделяют эти типы данных) и это еще и приписывают недостаткам dimensional modelling. Часто вижу эти грабли, потом они выливаются в длительные и проблемные процессы возвращения к исходной гранулярности + чаще всего эти проблемы не проявляются одни а сопровождаются целым рядом других ill-designed решений.

Правильно так: детальные данные это не суммарные данные и гранулярнгости для них разные и храним их отдельно.

Сам кимбал называет требование хранить только суммарные данные мифом номер 1:
https://www.silicon.co.uk/workspace/five-myths-dimensional-modelling-137164
Dimensional Models are only for summary data
This first myth is frequently the root cause of ill-designed dimensional models. Because you can’t possibly predict all the questions asked by business users, you need to provide them with queryable access to the most detailed data so they can roll it up based on the business question. Data at the lowest level of detail is practically impervious to surprises or changes. Summary data should complement the granular detail solely to provide improved performance for common queries, but not replace the details.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024056
Полковник.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evolex_,

Еще раньше Кимбао говорит, что при построении модели данных один из обязательных шагов - поиск и определение атомарного уровня.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024310
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The Data Warehouse ETL Toolkit R.Kimball, J. CasertaVirtually every fact table has a primary key defined by a subset of the fields in the table. In Figure 6.1, a plausible primary key for the fact table is the combination of the ticket number and line number degenerate dimensions. These two fields define the unique measurement event of a single item being run up at the cash register. It is also likely that an equivalent primary key could be defined by the combination of cash register and the date/time stamp.
It is possible, if insufficient attention is paid to the design, to violate the assumptions of the primary key on a fact table. Perhaps two identical measurement events have occurred on the same time period, but the data warehouse team did not realize that this could happen. Obviously, every fact table should have a primary key, even if just for administrative purposes. If two or more records in the fact table are allowed to be completely identical because there is no primary key enforced, there is no way to tell the records apart or to be sure that they represent valid discrete measurement events. But as long as the ETL team is sure that separate data loads represent legitimate distinct measurement events, fact table records can be made unique by providing a unique sequence number on the fact record itself at load time. Although the unique sequence number has no business relevance and should not be delivered to end users, it provides an administrative guarantee that a separate and presumably legitimate measurement event occurred. If the ETL team cannot guarantee that separate loads represent legitimate separate measurement events, a primary key on the data must be correctly defined before any data is loaded.

Figure 6.1 Sales Transaction Fact Table:
Calendar Date (FK)>
Product (FK)>
Cash Register (FK)>
Customer (FK)>
Clerk (FK)>
Store Manager (FK)>
Price Zone (FK)>
Promotional Discount (FK)>
Transaction Type (FK)>
Payment Type (FK)>
Ticket Number (DD)
Line Number (DD)
Time of Day (SQL Date-Time)
Sales Quantity (fact)
Net Sales Dollar amount (fact)
Discount Dollar amount (fact)
Cost Dollar amount (fact)
Gross Profit Dollar amount (fact)
Tax Dollar amount (fact)

Переводя Кимбалла на упрощенный русский, PK факта должен быть уникальной комбинацией его FK (обычных или вырожденных). Если реальных FK не хватает, то надо придумать дополнительный FK.

Этот подход выглядит гладко на бумаге, однако на практике с ним возникают проблемы. Например:
  • Во-первых, легко сказать: "Команда ETL, роди мне красивый FK в дополнение к имеющимся", но на практике это желание бывает весьма затруднительным и ресурсоемким действием. Большинство разработчиков ETL идут легким путем и создают измерение на основе простого PK источника, после чего в кубе возникает т.н. "monster dimension". Так проблема возвращается обратно к команде BI, а та, в свою очередь, может спихнуть ее на сервера и пользователей.
  • Во-вторых, пользователи любят спускаться из кубов к фактам. Разница между удобством запросов к СУБД "перейди к факту с идентификатором X" и "перейди к факту с полем 1 = X 1 (...) и полем N = X N " видна невооруженным глазом.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024397
Полковник.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений,

В цитате на английском нет ни одного слова про FK. Самый простой способ сделать строку уникальной - это добавить на загруке порядковый номер строки.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024407
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полковник.
В цитате на английском нет ни одного слова про FK.
"combination of the ticket number and line number degenerate dimensions" - для куба это FK на вырожденные измерения номеров билетов и строк в них.
Полковник.
Самый простой способ сделать строку уникальной - это добавить на загруке порядковый номер строки.
И породить тем самым немало непростых проблем, не считая уже упомянутого "monster dimension". В отличие от PK источника, у порядкового номера строки нет связи с источником (пользователь не сможет найти по нему факт в источнике), порядковый номер не поддержит расчет инкремента.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024408
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений,

Аргумент надуман, так и от суррогатных ключей можно отказаться )
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024417
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
.Евгений,
Аргумент надуман, так и от суррогатных ключей можно отказаться )

У суррогатного ключа, как правило, есть связь 1:1 с PK источника. Да, разрешение идентификаторов может создавать на больших объемах проблемы, но, как правило, польза перевешивает. Сейчас я склонен протягивать в последующую систему все варианты ключа предыдущих: РК систем-источников, СК хранилища и составной ключ для кубов.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024575
Полковник.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений,

Расчет инкремента и найти строку в исходной системе? Если в исходной системе она не уникальна, поздравляю вас вы ее и без номера строки не найдете.
Для поиска инкремента с не уникальними фактами нужно включить голову и немного подумать. Вы же хотите обойтись простыми решениями из учебников.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40024614
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полковник.
Расчет инкремента и найти строку в исходной системе? Если в исходной системе она не уникальна, поздравляю вас вы ее и без номера строки не найдете.
Для поиска инкремента с не уникальними фактами нужно включить голову и немного подумать. Вы же хотите обойтись простыми решениями из учебников.
Мы явно друг друга не понимаем.
Еще раз. У Кимбалла стоит задача загрузить данные из исходной системы в куб. Он говорит: назначим РК комбинацию номера билета и номера строки в нем.

Я делаю допущение, что в исходной системе у каждого факта есть свой РК (обычно в ОЛТП бывает именно так). Однако Кимбалл не захотел грузить его в куб, считая его избыточным, и чтобы не получить монструозное измерение. Мне просто не приходилось сталкиваться с неуникальными фактами в источниках, а сам я такого не проектировал тем более.

Вы предлагаете создать РК как номер загрузки и номер строки в загрузке. По форме он полностью аналогичен решению Кимбалла (составной ФК), однако по сути, в отличие от его решения, никак не разрешается в исходный РК факта.

В то же время я считаю данное разрешение РК настолько полезным, что максимально упрощаю его и гружу исходный РК в последующие системы.
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40025260
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тем не менее бывают случаи когда исходные факты не уникальные.
И надо как-то с ними жить.
Я предпочитаю факты в этом случае не группировать, ибо тогда не возможна даже простейшая сверка с источником по количеству строк.

второе - пк в данном случае я тоже предпочитаю создавать, хоть из номера файла+номер строки, а хоть и совсем из пальца высосать, но иметь пк в факте лучше чем не иметь, например с целью потом того же дрилдауна в факты или того же инкрементального построения витрин, на базе возрастающего уникального РК
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40025339
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak,

противников наличия РК у фактов здесь нет. Речь о том, каким он должен быть.

Кимболл считает, что его надо готовить из ФК (обычных или вырожденных), исходя из пользы для куба.
Его эпигоны пишут, что ЕТЛ нуждается в СК, поэтому данное поле тоже надо грузить (я бы охарактеризовал это как столкновение "кимболловщины" с жестокой реальностью)
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40025400
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СК - это что?
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40025408
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, дожили, форум вроде ведь БД-шный
=SK ?
Keys:
Primary
Super
Secondary
Alternate
Composite
Compound
Foreign
Candidate
Surrogate
Business
Natural
Unique
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40026742
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
Ivan Durak,

противников наличия РК у фактов здесь нет. Речь о том, каким он должен быть.

Кимболл считает, что его надо готовить из ФК (обычных или вырожденных), исходя из пользы для куба.
Его эпигоны пишут, что ЕТЛ нуждается в СК, поэтому данное поле тоже надо грузить (я бы охарактеризовал это как столкновение "кимболловщины" с жестокой реальностью)

так вопрос - если набор ФК не уникален. В том-то и дело. группировать - плохо
...
Рейтинг: 0 / 0
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
    #40027314
Фотография Evolex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полковник.
Evolex_,

Еще раньше Кимбао говорит, что при построении модели данных один из обязательных шагов - поиск и определение атомарного уровня.

И?
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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