|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Здравствуйте! Уже не один раз задавался вопросом - Как разбивают таблицу на факт и справочники? Пример в файле Excel. На листе Выгрузка - исходная таблица. На втором листе исходник разбит на 5 таблиц. Поделитесь опытом как лучше решать такие задачи. Или покажите как это сделать запросом. Может ссылка на видео-инструкцию есть? И еще вопрос - если за год набирается не более 15 000 строк в исходной таблице, то может и не надо делить данные на справочники и факт? Вес в мегабайтах же немного? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2021, 20:36 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л, https://ru.wikipedia.org/wiki/Схема_звезды https://ru.wikipedia.org/wiki/Схема_снежинки если за год набирается не более 15 000 строк в исходной таблице, то может и не надо делить данные на справочники и факт, а может и надо. Это вам решать в зависимости от планов на будущее и требований к оборудованию. К тому же когда/если потребуется позже внедрить SCD то вышеописанные приёмы и механизмы будут удобны либо необходимы. Управление правами доступа может упростить / потребовать разделение таблиц. Много их там этих моментов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2021, 21:17 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
PizzaPizza, про эти схемы я знаю. Мне бы на каком нибудь небольшом примере посмотреть процесс обработки. Что бы определить стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2021, 22:40 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно. Если это вопрос "заморачиваться", то скорее всего уровень задачи при котором разбивать не стоит. Разбивать стоит если есть понимание для чего существуют схемы и когда их применять. На небольшом примере определиться с пониманием для чего ну никак не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 06:10 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
PizzaPizza, Я в ms sql не работаю каждый день, поэтому как не коснется мне все в ms sql кажется трудным и замороченным. Работаю в основном в excel. Рано или поздно все равно к этому (оптимизации базы данных путем минимизации повторений значений, то бишь разбивки данных на справочники и факт. Как я себе это понимаю) приду. Вот и собираю инфу заранее ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 10:12 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л PizzaPizza, про эти схемы я знаю. Мне бы на каком нибудь небольшом примере посмотреть процесс обработки. Что бы определить стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно. Пока у вас данные каждой строки в Эксельной таблице независимы от других строк, т.е. пока вам не понадобится что либо посчитать, вам никакого разбиения не нужно. Например, у вас в таблице есть поля заказчик, сумма, валюта. Если вам считать не надо, то всё нормально, и ничего страшного, что Иван Иванов, Ваня Иванов, и Иванов И - это не три человека, а один. И что в одном месте в поле валюта написано "$", а в другом "Доллары США". Если считать не надо. Но если вы хотите считать агрегаты по клиентам, или список заказа по клиентам, или сводить дебит-кредит, то лучше сделать справочник клиентов, справочник валют и т.д. Что бы не решать ребусы, сколько же всё таки у Иванова заказов. Разные правила заполнения значений полей эту проблему иногда решают, но, по сути, правила и есть ссылка на справочник, только на чужой, а не на ваш. Например, для валют можно использовать официальный код валюты. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 12:09 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
alexeyvg и ничего страшного, что Иван Иванов, Ваня Иванов, и Иванов И - это не три человека, а один. И что в одном месте в поле валюта написано "$", а в другом "Доллары США" C такими данными боюсь работать). Вообще данные из файла выгружены из 1с и обработаны в прямую таблицу в PQ. До PQ в каждой строке - одна счет-фактура. Данные точные - задваиваний не найдено. У меня уже подготовлены данные за пять лет. Держу их цельной таблицей в SQL-базе, Access-базе и файле TXT. Чаще использую текстовый файл Отдельно запросом PQ обрабатываю текущий год. И плюсую к данным текстового файла. Далее Power Bi или Power Pivot + Excel. Меня все устраивает, а руководство вот мне все рассказывает как у конкурентов или партнеров настроено в Sql базе. Я в принципе для руководства и сделал вариант Sql - базы. Сейчас вот думаю разбить на справочники и факт. Один раз разбить и загнать в отдельные таблицы - не большая проблема. Только не знаю как далее пополнять факты, проверять справочники на наличие новых клиентов или нового города. Мне легче все таблицы базы очистить и снова заполнить уже с новыми фактами, городами, клиентами. Пока не понимаю как именно дополнять. Поэтому и ищу видеоинструкцию или др. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:55 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л, В справочники выделяются колонки, смысловые значения которых повторяются в строках, такие как адреса, персональные данные, название организаций, типы товаров и так далее. Таблица фактор содержит состояние этих данных. Справочник - "дом", справочник "адрес", факт значение - "построен в 1950 году", факт ссылка - справочник адресов. Разделение данных на справочники и факты выполняется согласно смысла этих данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:22 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л, у вас какой-то очень спортивный интерес )) если я правильно понял, то изначально данные лежат в 1С. какие задачи вы выполняете выгружая эти данные в текст/эксель/другую БД? нет ли возможности решить эти задачи средствами 1С ? что касается вашего вопроса, то насколько я понимаю, данные в MSSQL сервер вы каким-то образом вгоняете, т.е. имеется некий обработчик, который берет данные на стороне (1С) и втягивает их в одну таблицу. допустим вы решите нормализовать данные и добавите еще таблиц, по идее вам остается всего-лишь изменить тот обработчик, чтобы он данные распихивал по нескольким таблицам. задача так стоит, правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:43 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Владислав Колосов Михаил Л, В справочники выделяются колонки, смысловые значения которых повторяются в строках И справочники нужны чтобы уменьшить размер базы данных? Я прав? Мне кто-нибудь даст ссылку на инфу, где можно узнать как сделать справочники и факты и как это потом обслуживать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:44 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit если я правильно понял, то изначально данные лежат в 1С. какие задачи вы выполняете выгружая эти данные в текст/эксель/другую БД? нет ли возможности решить эти задачи средствами 1С ? Долгая история. Расскажу в двух словах. Все данные в 1с. Приходящий программист 1с получает оплату почасовую. Я, иксельщик, на окладе. Без программиста из 1с отчетом можно выгружать данные за период, но эти данные надо еще причесывать в Power Query. Я уже все данные за несколько лет подготовил и храню в текстовом файле. С этими данными, по требованию, могу строить сводные в течение 5-60 минут. Так обычно и происходит - продукт-менеджеры просят сделать какой либо отчет и уже минут через 15 получают его. Не знаю сколько времени потребуется программисту 1с построить сводные в 1с. Мы этого программиста видим то 2-3 раза в месяц. MoonRabbit данные в MSSQL сервер вы каким-то образом вгоняете, т.е. имеется некий обработчик, который берет данные на стороне (1С) и втягивает их в одну таблицу. допустим вы решите нормализовать данные и добавите еще таблиц, по идее вам остается всего-лишь изменить тот обработчик, чтобы он данные распихивал по нескольким таблицам. задача так стоит, правильно? Да, все правильно. Даже больше. У меня база уже состоит из справочников и факта. Таблицы подготавливаю в Power Query, выгружаю в Excel(как в файле на листе Наверное так) и загоняю макросом (insert построчно) в базу. В Vba я плох, но что надо нашел и настроил. Хотел бы обойтись без Power Query. То есть обработанную таблицу на листе Выгрузка одним Sql - запросом разложить по таблицам в базу. Как то так. Ищу примеры чтобы посмотреть ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 15:17 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л MoonRabbit данные в MSSQL сервер вы каким-то образом вгоняете, т.е. имеется некий обработчик, который берет данные на стороне (1С) и втягивает их в одну таблицу. допустим вы решите нормализовать данные и добавите еще таблиц, по идее вам остается всего-лишь изменить тот обработчик, чтобы он данные распихивал по нескольким таблицам. задача так стоит, правильно? Да, все правильно. Даже больше. У меня база уже состоит из справочников и факта. Таблицы подготавливаю в Power Query, выгружаю в Excel(как в файле на листе Наверное так) и загоняю макросом (insert построчно) в базу. В Vba я плох, но что надо нашел и настроил. Хотел бы обойтись без Power Query. То есть обработанную таблицу на листе Выгрузка одним Sql - запросом разложить по таблицам в базу. Как то так. Ищу примеры чтобы посмотреть что мне нравиться в работе с данными, так это то, что любую задачу можно решить несколькими способами. в вашем случае: 1. полученный excel раздербанить на месте на нужные данные в соответствии с таблицами в БД и несколькими движениями втягивать потаблично. способ дурной на мой взгляд 2. средствами MSSQL (например через bulk insert) втянуть все данные в промежуточную таблицу и уже оттуда раскидать по целевым. способов втянуть данных несколько, рекомендую вот это почитать: https://docs.microsoft.com/ru-ru/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server?view=sql-server-ver15 и здесь много раз обсуждался импорт и местами последующая обработка: https://www.sql.ru/forum/afsearch.aspx?s=?????? ?? excel&submit=?????&bid=1 Михаил Л MoonRabbit если я правильно понял, то изначально данные лежат в 1С. какие задачи вы выполняете выгружая эти данные в текст/эксель/другую БД? нет ли возможности решить эти задачи средствами 1С ? Долгая история. Расскажу в двух словах. Все данные в 1с. Приходящий программист 1с получает оплату почасовую. Я, иксельщик, на окладе. Без программиста из 1с отчетом можно выгружать данные за период, но эти данные надо еще причесывать в Power Query. Я уже все данные за несколько лет подготовил и храню в текстовом файле. С этими данными, по требованию, могу строить сводные в течение 5-60 минут. Так обычно и происходит - продукт-менеджеры просят сделать какой либо отчет и уже минут через 15 получают его. Не знаю сколько времени потребуется программисту 1с построить сводные в 1с. Мы этого программиста видим то 2-3 раза в месяц. 1С не хотите освоить? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 15:49 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Может тредстартеру чего-нибудь про нормальные формы почитать? Из реляционной теории... Люди старались - писали. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 16:11 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit 1С не хотите освоить? )) Если честно - нет) Хотел бы Dax побольше изучить, но свободного времени на работе мало, а дома вечером уже не лезет. К тому же у нас конфигуратор запаролен. Из Excel у меня есть доступ к серверу 1с, но там и черт ногу сломает (чего стоят ключи из случайнонабранных значений). Мне в 1с нужен только один настроенный отчет(данные по продажам за последние день или неделю). За другим я не обращаюсь в 1с. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 16:20 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
aleks222 Может тредстартеру чего-нибудь про нормальные формы почитать? Из реляционной теории... Люди старались - писали. мне бы видео какое-нибудь. От Специалист нет видео, где не спеша и не уставая в течение дня все рассказывают, как по ссылке ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 16:26 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit 2. средствами MSSQL (например через bulk insert) втянуть все данные в промежуточную таблицу и уже оттуда раскидать по целевым. По моему, это то что нужно. Если не против, в течение недели я подготовлю пример, сможете показать как запросом это делается? Пример будет тот же, на 8 колонок. Строк сделаю побольше. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 16:52 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л Вообще данные из файла выгружены из 1с и обработаны в прямую таблицу в PQ. До PQ в каждой строке - одна счет-фактура. Данные точные - задваиваний не найдено. У меня уже подготовлены данные за пять лет. Держу их цельной таблицей в SQL-базе, Access-базе и файле TXT. Чаще использую текстовый файл Отдельно запросом PQ обрабатываю текущий год. И плюсую к данным текстового файла. Далее Power Bi или Power Pivot + Excel. Меня все устраивает, а руководство вот мне все рассказывает как у конкурентов или партнеров настроено в Sql базе. Я в принципе для руководства и сделал вариант Sql - базы. Какой нибудь SQL-сервер тут полезен разве что для мощного и удобного движка и языка, но нормализовать необязательно, если вам так удобнее работать с данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 20:45 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
[quot Михаил Л#22291213] aleks222 Может тредстартеру чего-нибудь про нормальные формы почитать? Из реляционной теории... Люди старались - писали. мне бы видео какое-нибудь. ======= Наконец-то вспомнили, что такое Реляционная БД. Но ТС не умеет читать!!! Кто-то пишет здесь за него((((((( "Мне бы видео" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 21:12 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit 2. средствами MSSQL (например через bulk insert) втянуть все данные в промежуточную таблицу и уже оттуда раскидать по целевым. Михаил Л По моему, это то что нужно. Если не против, в течение недели я подготовлю пример, сможете показать как запросом это делается? Пример будет тот же, на 8 колонок. Строк сделаю побольше. Подготовил пример. В двух файлах - Сначала запустить Документ1, затем Документ2. Все что мог сделал. Хотел бы увидеть как запросом раскидать из временной таблицы(Название такое, Таблица не временная, а промежуточная) в итоговые. Наверное, должна быть проверка на дублирование. Прошу показать как решить эту задачу на примере. Желательно упрощенно(как у меня в примере) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 13:06 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
alexeyvg Если речь не об оперативной базе, а о рид-онли витрине, то руководство неправо (насчёт нормализации). Какой нибудь SQL-сервер тут полезен разве что для мощного и удобного движка и языка, но нормализовать необязательно, если вам так удобнее работать с данными. Руководство хочет нас постоянно чем нибудь нас занимать. Наверное их устроит если я задачи буду решать дольше чем мог бы) Не прикрепилось сразу два файла. Вот второй файл ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 13:12 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
опять) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 13:15 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
ИВП "Мне бы видео" Мне вот видео легче воспринимается чем чтение. Или наглядные рисунки типа комиксов) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 14:57 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Неужели задача трудная для профессионалов? Прошу помочь с решением Может с примером что не так? При заполнении от даты остается только год. Для примера это не принципиально. Надо было мне и дату обернуть в одинарные кавычки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 04:38 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л Неужели задача трудная для профессионалов? Прошу помочь с решением Может с примером что не так? При заполнении от даты остается только год. Для примера это не принципиально. Надо было мне и дату обернуть в одинарные кавычки. Никто не будет разжевывать тебе прописные истины реляционной теории. Для этого писаны учебники. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 06:04 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
aleks222, не говори за всех. Мне теория полностью не нужна. Нужно решение на конкретном примере ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 06:56 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Что же ни у кого внимания нету к теме? Хотя бы опишите словами как это пошагово делается Ну не знаю я как это делать в sql. В Power Query делал так: сгруппировывал по соответствующему справочнику столбцу, далее добавлял столбец индекс, затем разгруппировывал. И так по каждому столбцу, соответствующему справочнику. Далее уже делил на отдельные таблицы-справочники. В таблице фактов оставлял столбцы-индексы и другие столбцы(сч-фак, дата, кол-во, сумма). Вот и все А как в Sql получить этот результат? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 14:41 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л Что же ни у кого внимания нету к теме? Хотя бы опишите словами как это пошагово делается Ну не знаю я как это делать в sql. В Power Query делал так: сгруппировывал по соответствующему справочнику столбцу, далее добавлял столбец индекс, затем разгруппировывал. И так по каждому столбцу, соответствующему справочнику. Далее уже делил на отдельные таблицы-справочники. В таблице фактов оставлял столбцы-индексы и другие столбцы(сч-фак, дата, кол-во, сумма). Вот и все А как в Sql получить этот результат? тут многие работающие, поэтому столь незначительные вопросы оставляют в лучшем случае на вечер. )) я скачал скрипты ваших баз. в целом получается что вам остается написать хранимку для заполнения справочных таблиц и основной из втянутого временного результата. если сильно не ударяться в процесс, то я сперва заполнил бы из имеющегося набора данных справочники примерно так: insert into [Клиент]([id_kl], [Клиент]) select ROW_NUMBER() OVER(ORDER BY [Клиент] ASC), [Клиент] from [Baza_VR].[dbo].[vremen] group by [Клиент] --select * from [Клиент] затем бы уже заполнил основную таблицу [prodagi] с привязкой к заполненным справочным таблицам. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 15:44 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit тут многие работающие, поэтому столь незначительные вопросы оставляют в лучшем случае на вечер. )) я и не против отложить до субботы - воскресенья) Лишь бы не бросили меня один на один с этой проблемой) Не справлюсь я сам Спасибо за скрипт для справочников. Завтра попробую на работе между делом. Хотя почему завтра?) - Я же вчера установил дома на ноут MS Sql. Сегодня уже опробую скрипт. MoonRabbit в целом получается что вам остается написать хранимку для заполнения справочных таблиц и основной из втянутого временного результата. Правильно ли я понял что временная(она же промежуточная) база с таблицей при следующем заполнении данными должна очищаться от предыдущих данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 18:19 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л Правильно ли я понял что временная(она же промежуточная) база с таблицей при следующем заполнении данными должна очищаться от предыдущих данных? судя по тем файлам которые вы выкладываете, в промежуточную базу уже попадают обработанные (не изначальный массив) данные, с суммированием продаж по году/менеджеру/магазину и чему-то там еще. Следовательно да, проще счищать и заполнять временную таблицу каждый раз, и раскидывать по итоговым таблицам также заново с их очисткой, я так думаю. Либо при втягивании данных в MSSQL придется все сверять, где расхождения - апдейтить, где отсутсвует - добавлять и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 19:05 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit обработанные (не изначальный массив) данные, с суммированием продаж по году/менеджеру/магазину Да, данные обработаны. Только суммирование в рамках дня. Изначально одна счет фактура занимает одну строку, а каждому товару отведено две колонки - для количества и суммы. После Unpivot данные принимают тот вид, который представлен в примере. Единственное, от даты остается только год, так как я непредусмотрительно не завернул исходную дату в одинарные кавычки. Я так понял очищать придется только итоговые таблицы, а промежуточную надо будет пополнять. Пока есть вопрос сколько будет уходить времени на заполнение таблицы фактов с проверкой четырех ключей. Завтра подготовлю скрипты для справочников ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 20:32 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit, Спасибо! Все заполняется! Теперь бы таблицу prodagi заполнить с привязкой к справочникам. Покажете как это делается? В файле скрипты для заполнения справочников. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 08:28 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л MoonRabbit, Спасибо! Все заполняется! Теперь бы таблицу prodagi заполнить с привязкой к справочникам. Покажете как это делается? В файле скрипты для заполнения справочников. да в принципе все то же самое как и в предыдущем случае, просто выдергиваем полученные в справочных таблицах айдишки и заменяем ими значения, примерно так (на базе не проверял): insert into [prodagi] ([id_kl], [id_mg], [id_gr], [id_tv], [СчетФактура], [Дата], [Кол-во], [Сумма]) select (select id_kl from [Клиент] where [Клиент].[Клиент] = [Baza_VR].[dbo].[vremen].[Клиент]), (select id_me from [Менеджер] where [Менеджер].[Менеджер] = [Baza_VR].[dbo].[vremen].[Менеджер]), (select id_gr from [город_регион] where [город_регион].[регион] = [Baza_VR].[dbo].[vremen].[регион] and [город_регион].[Город] = [Baza_VR].[dbo].[vremen].[Город]), (select id_tv from [Товар] where [Товар].[Товар] = [Baza_VR].[dbo].[vremen].[Товар]), [СчетФактура], [Дата], [Кол-во], [Сумма] from [Baza_VR].[dbo].[vremen] --select * from [prodagi] ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 17:44 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit, все работает! Большое спасибо! Завтра, если время будет, погоняю еще ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:16 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Все работает правильно! Большое спасибо! Однако у меня теперь другая проблема. В файле описание проблемы. Подскажите как в таких случаях поступают? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 12:30 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Что я подумал?) Возможно ли так: в итоговой базе иметь четыре общих справочника (на 2000-2021) и две таблицы фактов (таблица фактов 2000-2020 и таблица фактов 2021). Для заполнения таблицы фактов 2021 эта таблица будет связана со справочниками. А объединять через Union только таблицы фактов. Возможно ли так? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 14:45 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Михаил Л Что я подумал?) Возможно ли так: в итоговой базе иметь четыре общих справочника (на 2000-2021) и две таблицы фактов (таблица фактов 2000-2020 и таблица фактов 2021). Для заполнения таблицы фактов 2021 эта таблица будет связана со справочниками. А объединять через Union только таблицы фактов. Возможно ли так? в принципе, я ожидал подобных вопросов, поэтому возвращаемся к нормальному обустройству БД и разбираемся пошагово Михаил Л в итоговой базе иметь четыре общих справочника (на 2000-2021) если мы имеем справочные таблицы то счищать и перезаполнять их заново без перезаполнения скажем условно одной из таблиц фактов - возможное нарушение целостности данных. И чтобы этого избежать надо их тогда немного переделать. Как бы делал я в данном случае: в справочных таблицах на поле с ID добавил бы свойство IDENTITY, чтобы не заморачиваться с присвоением этого идентификатора. Тогда при заполнении этих таблиц я бы просто проверял наличие значений, примерно так: insert into [Клиент]([Клиент]) -- заполняем справочную таблицу, делаем практически все то же самое select [Клиент] from [Baza_VR].[dbo].[vremen] -- но добавляем условие когда данные по клиенту уже есть в справочной таблице и их добавлять не требуется where [Baza_VR].[dbo].[vremen].[Клиент] not in (select [Клиент] from [Клиент]) все это прелестно в случае когда в изначальных данных из 1С никто не балуется, например не переименовывает клиентов Далее. Михаил Л две таблицы фактов (таблица фактов 2000-2020 и таблица фактов 2021). а зачем? структура таблиц одна, логически данные - единый массив по продажам, он интересен именно в целостном виде. зачем разбивать по периодам, если мы запросами и так получим нужные данные и из одной таблицы, зачем постоянно держать в голове эту возможность и необходимость их union? допустим в апреле начальник запросит данные по продажам какого-то менеджера за условно последние полгода или два года (тут надо выдернуть данные с ноября 2020 года из одной таблицы и выдернуть данные по текущему году с другой), имея все данные в одной таблице мы легким запросом просто выдергиваем то что нужно и выдаем готовый отчет, без ерундистики с объединениями Опять же, если в изначальных данных никто не балуется, то пользуясь тем что у нас может пропасть необходимость перезаполнять справочники, мы можем не перезаполнять таблицу продаж каждый раз, а просто также добавить в операцию заполнения таблицы продаж insert into [prodagi] условие когда данные уже есть, и их вставлять не требуется ну если на пальцах, то как-то так это все выглядит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 15:56 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
MoonRabbit если мы имеем справочные таблицы то счищать и перезаполнять их заново без перезаполнения скажем условно одной из таблиц фактов - возможное нарушение целостности данных. И чтобы этого избежать надо их тогда немного переделать. Как бы делал я в данном случае: в справочных таблицах на поле с ID добавил бы свойство IDENTITY, чтобы не заморачиваться с присвоением этого идентификатора. Тогда при заполнении этих таблиц я бы просто проверял наличие значений, примерно так: ... все это прелестно в случае когда в изначальных данных из 1С никто не балуется, например не переименовывает клиентов Этот вариант заполнения(вернее дополнения) справочников позволит иметь как одну, так и две привязанные таблицы фактов? Я бы хотел попробовать оба варианта: 1 вариант: четыре перезаписываемых справочника и две таблицы фактов(тоже перезаписываемых. Только вероятнее всего таблица фактов 2000 - 2020 года после заполнения не будет требовать перезаписи. А вот таблица фактов 2021 будет перезаписываться чуть ли не каждый день); 2 вариант: четыре пополняемых справочника и одна пополняемая таблица фактов. Примеры с переделанными таблицами смогу подготовить ко вторнику(в понедельник обычно много работы) Насчет данных 1С и переименования значений справочников понял. Как только увидят раздвоения данных по, например, одному менеджеру - я объясню причину) MoonRabbit а зачем? структура таблиц одна, логически данные - единый массив по продажам, он интересен именно в целостном виде. зачем разбивать по периодам, если мы запросами и так получим нужные данные и из одной таблицы, зачем постоянно держать в голове эту возможность и необходимость их union? ... Опять же, если в изначальных данных никто не балуется, то пользуясь тем что у нас может пропасть необходимость перезаполнять справочники, мы можем не перезаполнять таблицу продаж каждый раз, а просто также добавить в операцию заполнения таблицы продаж insert into [prodagi] условие когда данные уже есть, и их вставлять не требуется Да, в итоге все данные склеиваются. Охота попробовать вариант с Union. - условие когда данные уже есть, и их вставлять не требуется - Чтобы проверить данные на дубликаты - нужно же время? Или имеется ввиду не проверять факты на дубликаты, а дополнять по периодам, например, каждый день добавлять данные за прошлый день? Так то мне суть понятна. Сразу скажу, сам я не справлюсь) Прошу заглядывать в тему и помогать решениями! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 20:06 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Подготовил пример. В принципе, на первый взгляд неопытного пользователя, все работает. Но все равно прошу проверить. Что надо бы изменить на мой взгляд. Сейчас есть проверка на дубликаты только у справочников. Надо бы добавить проверку на дубликаты в таблицу prodagi. Сейчас с каждым выполнением запроса из файла 5 количество строк увеличивается. Как это предотвратить? Может я не правильно что сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2021, 09:30 |
|
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
|
|||
---|---|---|---|
#18+
Прошу показать как при пополнении таблицы делать проверку на дублирующие строки? Или, если можно, на дублирующие данные по столбцам? Например, год и номер счет фактуры уникальны. Возможно ли по ним проверять на дубликаты? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 13:08 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1684943]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 179ms |
0 / 0 |