powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как связать измерение из разных таблиц с кубом?
10 сообщений из 10, страница 1 из 1
Как связать измерение из разных таблиц с кубом?
    #33753431
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наткнулся на проблему, которую в принципе можно обойти, но хочется сделать все аккуратно. :-)

Имется таблица фактов "Операции", в ней есть поля:
"Источник" и "Тип источника".

"Тип источника" - целое
0 - "Пусто"
1 - "Клиент"
2 - "Поставщик"
3 - "Товар"

"Источник" - строка ключ к разным таблицам соответственно:
0 - ""
1 - Ключ к первичному ключу из таблицы "Клиенты"
2 - Ключ к первичному ключу из таблицы "Поставщики"
3 - Ключ к первичному ключу из таблицы "Товары"

Причем измерения по клиентам имеют свой (расширеный) набор полей,
по поставщикам - короткий, по товарам вообще только поле "Код товара".
В случае с 0 это внутренние операции, не имеющие внешних источников.

С "Пусто" в общем понятно, добавляем в выборку/(таблицу в DWH) пустое поле
С 1 и 2 с очень большим натягом работает UNION из разных таблиц, с пустыми полями, которых нехватает в "Поставщики".

Но вот 3 совершенно неакуратно выходит. Операция очень редкая, была сделана явно с тестовыми намерениями и потом от нее отказались.
И я для быстрого решения просто добавил в UNION еще пару строчек с нехватающими записями. Но не факт, что ситуация не повторится.
А делать UNION со всеми товарами нереально. Их там уже под 300 тысяч.

Поэтому вопрос к гуру:

Как можно связать в кубе с таблицой фактов разные измерения в зависимости от значения поля в таблице фактов?
Или другие предложения по решению проблемы в общем случае.
В общем случае в том смысле, что "Тип источника" может расшириться.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755793
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто так и не ответил.
Вопрос глупый?
Задача нерешаема в принципе?
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755801
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не решаема?
вполне решаема.
заменяете два столбца (Тип_Источника, Источник) на три разных.
Клиент_ИД = case when Тип_Источника = 1 then Источник end,
Поставщик_ИД = case when Тип_Источника = 2 then Источник end,
Товар_ИД = case when Тип_Источника = 3 then Источник end

и все... соеденияете свои измерения с таблицей фактов.
а вообще, плохой подход проектировать таблицы так, что один столбец может содержать ссылки на различные таблицы (иметь разный смысл) в зависимости от значений какого-то другого столбца.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755802
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы даже не написали какой сервер используется.
Потом может быть вместо UNION использовать UNION ALL?
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755821
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заводить 3 (а в принципе даже 4) колонки в таблице фактов в DWH не очень хорошая идея. Мало того что вырастет размер, так еще и скорость обновления DWH сильно упадет.

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

Пока думаю над другим вариантом, сделать в DWH таблицу "Источник" и там делать один суррогатный ключ, а с остальными данными вязать в представлении. Но тогда эта таблица сильно разрастется в размере.
Поставщиков немного, Клиентов до 30 000, а вот товаров уже под 300 000.
И из-за 2-3 товаров городить огород?

Практика делать ссылки на разные таблицы конечно нехорошая, но саму базу писал не я, а Майкрософт. Это Навижн. И изменить я ничего не могу.

Сервера MS SQL 2000 SP4 и MS AS 2000 SP4.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755823
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какая разница в данном случае между UNION и UNION ALL?
Ключи то все равно уникальны и дубликатов все равно нет.
Ну разве скорость у UNION ALL должна быть больше.
Так обновление измерения и так занимает меньше минуты.
В общем это к вопросам оптимизации, а не решения самой проблемы.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755827
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LogrusASЗаводить 3 (а в принципе даже 4) колонки в таблице фактов в DWH не очень хорошая идея. Мало того что вырастет размер, так еще и скорость обновления DWH сильно упадет.

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

Пока думаю над другим вариантом, сделать в DWH таблицу "Источник" и там делать один суррогатный ключ, а с остальными данными вязать в представлении. Но тогда эта таблица сильно разрастется в размере.
Поставщиков немного, Клиентов до 30 000, а вот товаров уже под 300 000.
И из-за 2-3 товаров городить огород?

Практика делать ссылки на разные таблицы конечно нехорошая, но саму базу писал не я, а Майкрософт. Это Навижн. И изменить я ничего не могу.

Сервера MS SQL 2000 SP4 и MS AS 2000 SP4.
ну во-первых... все можно обернуть представлением, а не создавать новую структуру таблицы.
во-вторых, Вам виднее, какая у вас архитектура, требования.
в-третьих. Из описания я понял, что у Вас примерно такая структура таблицы фактов
Код: plaintext
1.
2.
3.
4.
5.
6.
Дата		Тип_источника	Источник	Показатель
--------	-------------	--------	----------
 20 . 01 . 06 	Клиент		Клиент1		ххх
 21 . 01 . 06 	Товар		Товар1		ххх
 21 . 01 . 06 	Клиент		Клиент2		ххх
 22 . 01 . 06 	Поставщик	Поставщик1	ххх
Таким образом, на 20 число у нас есть только операции с клиентами. И вообще, операции по клиентам 20 и 21 числа. А по Товару - только 21.
Итог преобразования
Код: plaintext
1.
2.
3.
4.
5.
Дата		Тип_источника	Клиент		Товар	Поставщик	Показатель
--------	-------------	--------	-----	---------	----------
 20 . 01 . 06 	Клиент		Клиент1		нет	нет		ххх
 21 . 01 . 06 	Товар		нет		Товар1	нет		ххх
 21 . 01 . 06 	Клиент		Клиент2		нет	нет		ххх
 22 . 01 . 06 	Поставщик	нет		нет	Поставщик1	ххх
Итак, таблица получилась "разреженная", но имеющая простую структуру.
Другой вариант, как Вы уже указывали - перенумеровать комбинации (Тип_Источника, Источник) и связывать этот суррогат с таблицей фактов.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33755851
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь столбец Товар будет вязаться с измерением Товары?

И если измерение Товары будет использоваться, то все операции с пустым столбцом Товары уйдут.
А останется только пару операций.

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

У меня же задача прямо противоположная, мне нужно показать этих несколько операций.
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33756164
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LogrusASНо вот 3 совершенно неакуратно выходит. Операция очень редкая, была сделана явно с тестовыми намерениями и потом от нее отказались.

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

что-то здесь противоречит
И потом, объясните, почему куб должен быть пустым. Просто разбивки по товарам не будет...
...
Рейтинг: 0 / 0
Как связать измерение из разных таблиц с кубом?
    #33757497
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну почему же противоречит?

Операция 0 это внутренние перемещения без изменений в структуре товаров.
Уценки, накрутки и т.д.
Операция 1 это собственно продажи.
Операция 2 это закупки.
Операция 3 это редкая операция, когда из товаров собирается новый товар-комплект. Поскольку организация тороговая, необходимости особой нет.
Но в таблице операций такие операции есть. Ссылка всего на 2 товара, которые когда то (года 3 назад) собрали в комплект. Видимо пользы в этом не увидели, и сейчас такого не делают. Но поскольку ЕРП управленческая, закрытых периодов нет и остатки считаются с начала времен.

При процессинге в 2000 вообще не была заметна потеря нескольких фактов в 2003 году. Потом поднял для тестов 2005 и он при процессинге куба указал отсутствующие ключи. Тогда на скорую руку я банально добавил в представление 2 этих товара.

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

Если я сделаю связку по ключу с товарами, то когда в отчете будет использоваться измерение товары, возможны выпадения фактов с товарами NULL. Возможны, а не обязательны. Но потратить неделю или две на создание варехауза и собрав куб убедиться в своих подозрениях не хочеться.

Тем более, что логика в таком подходе все же хромает.
А если добавиться еще один тип операции?
Добавлять еще столбец в живой варехауз?

Я уже принял решение.
Поскольку "Источник" все же отдельная сущность, хоть и составная, я в DWH буду создавать отдельную таблицу со своими суррогатными ключами.
Придеться правда делать на тригерах заполнение, но зато уверенность в последующей работе на все 100%.

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


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