|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Конечно, представленная на рисунке (скриншот из книжки) таблица фактов, вроде бы, логична: каждый факт (сумма) представлена для конкретных значений: 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 01:19 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
В графике который вы приложили, включен номер транзакции. Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день. Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 02:21 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Как обычно, Евангелие нуждается в трактователях и интерпретаторах, изменяющих значение первоначальных слов вплоть до противоположного: 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:
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 10:35 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений, Евангелие нуждается прежде в его в правильном переводе. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 13:02 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
НеофитSQL В графике который вы приложили, включен номер транзакции. Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день. Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность. Согласен. Обычно по продажам есть номер чека или номер интернет-заказа. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 13:17 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
bideveloper, Если нет цели анализировать данные до номера чека, то лучше свернуть данные в таблице по измерениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 13:43 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Полковник. Евангелие нуждается прежде в его в правильном переводе. Айтишник, не умеющий читать на арамейском английском - это лишь половина айтишника. Кстати, тут затронута интересная тема измерения для разрешения ситуаций, подобных указанной. Кто как готовит подобные измерения?
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 13:43 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
хорошо я согласен Но что если пользователь захочет в итоге потом взять не сумму по значениям, а среднее по всем сделкам? Просто по колонке "цена" Среднее между 62000 и 10000 не то же самое, что среднее в первой таблице. Скажете, что нужно добавить новую колонку "количество", ок. Но что если пользователь захочет найти медианную сделку по каждой строке? ЭТО значит, что из моделирования у вас есть бизнес-сущность "сделка" или "заказ". И ID этой сущности вы опустили в данных. Если такие вопросы к сущности "сделка" есть - можно ввести его как скрытое измерение. Обычно код заказа - это так называемое degenerate dimension - которое вроде как dimension (то есть связано с сущностью), но само не имеет атрибутов и не используется для анализа. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 14:39 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений Как обычно, Евангелие нуждается в трактователях и интерпретаторах, изменяющих значение первоначальных слов вплоть до противоположного: смеялся с этой формулировки ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 15:02 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
НеофитSQL В графике который вы приложили, включен номер транзакции. Дата-товар-цена это композитный ключ не на сделки, а на меню услуг, меняющееся изо дня в день. Добавьте номер сделки, который не повторяется на протяжении одного дня - тогда будет уникальность. Именно поэтому я перешёл от примера Кимбалла к своему, где номеров уникальных нет. И вопрос был в его добавлении. .Евгений, в целом, ответил на этот вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 15:05 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Вроде бы эта та тема самого распространенного ошибочного толкования кимбала, когда и для суммарных данных и детальных почему-то рассматривают одну и ту же гранулярность (не разделяют эти типы данных) и это еще и приписывают недостаткам 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2020, 02:09 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Evolex_, Еще раньше Кимбао говорит, что при построении модели данных один из обязательных шагов - поиск и определение атомарного уровня. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 20:23 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
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. Этот подход выглядит гладко на бумаге, однако на практике с ним возникают проблемы. Например:
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 17:12 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений, В цитате на английском нет ни одного слова про FK. Самый простой способ сделать строку уникальной - это добавить на загруке порядковый номер строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 22:33 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Полковник. В цитате на английском нет ни одного слова про FK. Полковник. Самый простой способ сделать строку уникальной - это добавить на загруке порядковый номер строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 23:35 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений, Аргумент надуман, так и от суррогатных ключей можно отказаться ) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 23:37 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Критик .Евгений, Аргумент надуман, так и от суррогатных ключей можно отказаться ) У суррогатного ключа, как правило, есть связь 1:1 с PK источника. Да, разрешение идентификаторов может создавать на больших объемах проблемы, но, как правило, польза перевешивает. Сейчас я склонен протягивать в последующую систему все варианты ключа предыдущих: РК систем-источников, СК хранилища и составной ключ для кубов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 00:48 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений, Расчет инкремента и найти строку в исходной системе? Если в исходной системе она не уникальна, поздравляю вас вы ее и без номера строки не найдете. Для поиска инкремента с не уникальними фактами нужно включить голову и немного подумать. Вы же хотите обойтись простыми решениями из учебников. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 13:16 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Полковник. Расчет инкремента и найти строку в исходной системе? Если в исходной системе она не уникальна, поздравляю вас вы ее и без номера строки не найдете. Для поиска инкремента с не уникальними фактами нужно включить голову и немного подумать. Вы же хотите обойтись простыми решениями из учебников. Еще раз. У Кимбалла стоит задача загрузить данные из исходной системы в куб. Он говорит: назначим РК комбинацию номера билета и номера строки в нем. Я делаю допущение, что в исходной системе у каждого факта есть свой РК (обычно в ОЛТП бывает именно так). Однако Кимбалл не захотел грузить его в куб, считая его избыточным, и чтобы не получить монструозное измерение. Мне просто не приходилось сталкиваться с неуникальными фактами в источниках, а сам я такого не проектировал тем более. Вы предлагаете создать РК как номер загрузки и номер строки в загрузке. По форме он полностью аналогичен решению Кимбалла (составной ФК), однако по сути, в отличие от его решения, никак не разрешается в исходный РК факта. В то же время я считаю данное разрешение РК настолько полезным, что максимально упрощаю его и гружу исходный РК в последующие системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:17 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
тем не менее бывают случаи когда исходные факты не уникальные. И надо как-то с ними жить. Я предпочитаю факты в этом случае не группировать, ибо тогда не возможна даже простейшая сверка с источником по количеству строк. второе - пк в данном случае я тоже предпочитаю создавать, хоть из номера файла+номер строки, а хоть и совсем из пальца высосать, но иметь пк в факте лучше чем не иметь, например с целью потом того же дрилдауна в факты или того же инкрементального построения витрин, на базе возрастающего уникального РК ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 14:41 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Ivan Durak, противников наличия РК у фактов здесь нет. Речь о том, каким он должен быть. Кимболл считает, что его надо готовить из ФК (обычных или вырожденных), исходя из пользы для куба. Его эпигоны пишут, что ЕТЛ нуждается в СК, поэтому данное поле тоже надо грузить (я бы охарактеризовал это как столкновение "кимболловщины" с жестокой реальностью) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:55 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
СК - это что? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:45 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
Ну вот, дожили, форум вроде ведь БД-шный =SK ? Keys: Primary Super Secondary Alternate Composite Compound Foreign Candidate Surrogate Business Natural Unique ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:08 |
|
Читаю книгу Кимбалла. "Факты должны быть представлены составными ключами", но как?
|
|||
---|---|---|---|
#18+
.Евгений Ivan Durak, противников наличия РК у фактов здесь нет. Речь о том, каким он должен быть. Кимболл считает, что его надо готовить из ФК (обычных или вырожденных), исходя из пользы для куба. Его эпигоны пишут, что ЕТЛ нуждается в СК, поэтому данное поле тоже надо грузить (я бы охарактеризовал это как столкновение "кимболловщины" с жестокой реальностью) так вопрос - если набор ФК не уникален. В том-то и дело. группировать - плохо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 11:31 |
|
|
start [/forum/topic.php?fid=49&msg=40024407&tid=1857215]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 393ms |
0 / 0 |