powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
39 сообщений из 39, показаны все 2 страниц
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051469
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Уже не один раз задавался вопросом - Как разбивают таблицу на факт и справочники?
Пример в файле Excel. На листе Выгрузка - исходная таблица. На втором листе исходник разбит на 5 таблиц.
Поделитесь опытом как лучше решать такие задачи. Или покажите как это сделать запросом.
Может ссылка на видео-инструкцию есть?
И еще вопрос - если за год набирается не более 15 000 строк в исходной таблице, то может и не надо делить данные на справочники и факт? Вес в мегабайтах же немного?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051479
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

https://ru.wikipedia.org/wiki/Схема_звезды

https://ru.wikipedia.org/wiki/Схема_снежинки

если за год набирается не более 15 000 строк в исходной таблице, то может и не надо делить данные на справочники и факт, а может и надо. Это вам решать в зависимости от планов на будущее и требований к оборудованию.

К тому же когда/если потребуется позже внедрить SCD то вышеописанные приёмы и механизмы будут удобны либо необходимы. Управление правами доступа может упростить / потребовать разделение таблиц. Много их там этих моментов.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051489
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,
про эти схемы я знаю.
Мне бы на каком нибудь небольшом примере посмотреть процесс обработки. Что бы определить стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051508
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно.


Если это вопрос "заморачиваться", то скорее всего уровень задачи при котором разбивать не стоит. Разбивать стоит если есть понимание для чего существуют схемы и когда их применять. На небольшом примере определиться с пониманием для чего ну никак не получится.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051523
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,
Я в ms sql не работаю каждый день, поэтому как не коснется мне все в ms sql кажется трудным и замороченным. Работаю в основном в excel.
Рано или поздно все равно к этому (оптимизации базы данных путем минимизации повторений значений, то бишь разбивки данных на справочники и факт. Как я себе это понимаю) приду. Вот и собираю инфу заранее
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051555
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
PizzaPizza,
про эти схемы я знаю.
Мне бы на каком нибудь небольшом примере посмотреть процесс обработки. Что бы определить стоит ли заморачиваться разбивать, а потом для каких нибудь калькуляций джойнить обратно.
Разбивать нужно как раз исключительно ради калькуляций :-)

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

Например, у вас в таблице есть поля заказчик, сумма, валюта.
Если вам считать не надо, то всё нормально, и ничего страшного, что Иван Иванов, Ваня Иванов, и Иванов И - это не три человека, а один. И что в одном месте в поле валюта написано "$", а в другом "Доллары США". Если считать не надо.

Но если вы хотите считать агрегаты по клиентам, или список заказа по клиентам, или сводить дебит-кредит, то лучше сделать справочник клиентов, справочник валют и т.д. Что бы не решать ребусы, сколько же всё таки у Иванова заказов.
Разные правила заполнения значений полей эту проблему иногда решают, но, по сути, правила и есть ссылка на справочник, только на чужой, а не на ваш. Например, для валют можно использовать официальный код валюты.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051588
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
и ничего страшного, что Иван Иванов, Ваня Иванов, и Иванов И - это не три человека, а один. И что в одном месте в поле валюта написано "$", а в другом "Доллары США"

C такими данными боюсь работать).
Вообще данные из файла выгружены из 1с и обработаны в прямую таблицу в PQ. До PQ в каждой строке - одна счет-фактура. Данные точные - задваиваний не найдено.
У меня уже подготовлены данные за пять лет. Держу их цельной таблицей в SQL-базе, Access-базе и файле TXT. Чаще использую текстовый файл
Отдельно запросом PQ обрабатываю текущий год. И плюсую к данным текстового файла. Далее Power Bi или Power Pivot + Excel.
Меня все устраивает, а руководство вот мне все рассказывает как у конкурентов или партнеров настроено в Sql базе. Я в принципе для руководства и сделал вариант Sql - базы.
Сейчас вот думаю разбить на справочники и факт. Один раз разбить и загнать в отдельные таблицы - не большая проблема. Только не знаю как далее пополнять факты, проверять справочники на наличие новых клиентов или нового города.
Мне легче все таблицы базы очистить и снова заполнить уже с новыми фактами, городами, клиентами.
Пока не понимаю как именно дополнять. Поэтому и ищу видеоинструкцию или др.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051603
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

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

Разделение данных на справочники и факты выполняется согласно смысла этих данных.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051613
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,
у вас какой-то очень спортивный интерес ))
если я правильно понял, то изначально данные лежат в 1С.
какие задачи вы выполняете выгружая эти данные в текст/эксель/другую БД? нет ли возможности решить эти задачи средствами 1С ?

что касается вашего вопроса, то насколько я понимаю, данные в MSSQL сервер вы каким-то образом вгоняете, т.е. имеется некий обработчик, который берет данные на стороне (1С) и втягивает их в одну таблицу.
допустим вы решите нормализовать данные и добавите еще таблиц, по идее вам остается всего-лишь изменить тот обработчик, чтобы он данные распихивал по нескольким таблицам. задача так стоит, правильно?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051614
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Михаил Л,

В справочники выделяются колонки, смысловые значения которых повторяются в строках

И справочники нужны чтобы уменьшить размер базы данных? Я прав?

Мне кто-нибудь даст ссылку на инфу, где можно узнать как сделать справочники и факты и как это потом обслуживать
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051628
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 - запросом разложить по таблицам в базу. Как то так.
Ищу примеры чтобы посмотреть
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051641
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л

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С не хотите освоить? ))
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051646
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может тредстартеру чего-нибудь про нормальные формы почитать?
Из реляционной теории...
Люди старались - писали.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051648
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit

1С не хотите освоить? ))

Если честно - нет)
Хотел бы Dax побольше изучить, но свободного времени на работе мало, а дома вечером уже не лезет.
К тому же у нас конфигуратор запаролен.
Из Excel у меня есть доступ к серверу 1с, но там и черт ногу сломает (чего стоят ключи из случайнонабранных значений).
Мне в 1с нужен только один настроенный отчет(данные по продажам за последние день или неделю). За другим я не обращаюсь в 1с.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051651
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Может тредстартеру чего-нибудь про нормальные формы почитать?
Из реляционной теории...
Люди старались - писали.

мне бы видео какое-нибудь.
От Специалист нет видео, где не спеша и не уставая в течение дня все рассказывают, как по ссылке
YouTube Video
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051655
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit

2. средствами MSSQL (например через bulk insert) втянуть все данные в промежуточную таблицу и уже оттуда раскидать по целевым.

По моему, это то что нужно.
Если не против, в течение недели я подготовлю пример, сможете показать как запросом это делается?
Пример будет тот же, на 8 колонок. Строк сделаю побольше.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051687
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
Вообще данные из файла выгружены из 1с и обработаны в прямую таблицу в PQ. До PQ в каждой строке - одна счет-фактура. Данные точные - задваиваний не найдено.
У меня уже подготовлены данные за пять лет. Держу их цельной таблицей в SQL-базе, Access-базе и файле TXT. Чаще использую текстовый файл
Отдельно запросом PQ обрабатываю текущий год. И плюсую к данным текстового файла. Далее Power Bi или Power Pivot + Excel.
Меня все устраивает, а руководство вот мне все рассказывает как у конкурентов или партнеров настроено в Sql базе. Я в принципе для руководства и сделал вариант Sql - базы.
Если речь не об оперативной базе, а о рид-онли витрине, то руководство неправо (насчёт нормализации).
Какой нибудь SQL-сервер тут полезен разве что для мощного и удобного движка и языка, но нормализовать необязательно, если вам так удобнее работать с данными.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051688
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Михаил Л#22291213]
aleks222
Может тредстартеру чего-нибудь про нормальные формы почитать?
Из реляционной теории...
Люди старались - писали.

мне бы видео какое-нибудь.
=======
Наконец-то вспомнили, что такое Реляционная БД.
Но ТС не умеет читать!!! Кто-то пишет здесь за него(((((((
"Мне бы видео"
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051878
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit

2. средствами MSSQL (например через bulk insert) втянуть все данные в промежуточную таблицу и уже оттуда раскидать по целевым.

Михаил Л
По моему, это то что нужно.
Если не против, в течение недели я подготовлю пример, сможете показать как запросом это делается?
Пример будет тот же, на 8 колонок. Строк сделаю побольше.

Подготовил пример. В двух файлах - Сначала запустить Документ1, затем Документ2.

Все что мог сделал.
Хотел бы увидеть как запросом раскидать из временной таблицы(Название такое, Таблица не временная, а промежуточная) в итоговые. Наверное, должна быть проверка на дублирование.
Прошу показать как решить эту задачу на примере. Желательно упрощенно(как у меня в примере)
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051880
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
Если речь не об оперативной базе, а о рид-онли витрине, то руководство неправо (насчёт нормализации).
Какой нибудь SQL-сервер тут полезен разве что для мощного и удобного движка и языка, но нормализовать необязательно, если вам так удобнее работать с данными.

Руководство хочет нас постоянно чем нибудь нас занимать. Наверное их устроит если я задачи буду решать дольше чем мог бы)
Не прикрепилось сразу два файла. Вот второй файл
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051884
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять)
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40051934
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИВП

"Мне бы видео"

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

При заполнении от даты остается только год. Для примера это не принципиально. Надо было мне и дату обернуть в одинарные кавычки.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052139
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
Неужели задача трудная для профессионалов?
Прошу помочь с решением
Может с примером что не так?

При заполнении от даты остается только год. Для примера это не принципиально. Надо было мне и дату обернуть в одинарные кавычки.


Никто не будет разжевывать тебе прописные истины реляционной теории.
Для этого писаны учебники.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052143
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, не говори за всех.
Мне теория полностью не нужна. Нужно решение на конкретном примере
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052321
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что же ни у кого внимания нету к теме?
Хотя бы опишите словами как это пошагово делается
Ну не знаю я как это делать в sql.

В Power Query делал так: сгруппировывал по соответствующему справочнику столбцу, далее добавлял столбец индекс, затем разгруппировывал. И так по каждому столбцу, соответствующему справочнику. Далее уже делил на отдельные таблицы-справочники. В таблице фактов оставлял столбцы-индексы и другие столбцы(сч-фак, дата, кол-во, сумма). Вот и все

А как в Sql получить этот результат?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052346
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
Что же ни у кого внимания нету к теме?
Хотя бы опишите словами как это пошагово делается
Ну не знаю я как это делать в 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] с привязкой к заполненным справочным таблицам.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052415
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit

тут многие работающие, поэтому столь незначительные вопросы оставляют в лучшем случае на вечер. ))

я и не против отложить до субботы - воскресенья) Лишь бы не бросили меня один на один с этой проблемой) Не справлюсь я сам
Спасибо за скрипт для справочников. Завтра попробую на работе между делом.
Хотя почему завтра?) - Я же вчера установил дома на ноут MS Sql. Сегодня уже опробую скрипт.

MoonRabbit

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

Правильно ли я понял что временная(она же промежуточная) база с таблицей при следующем заполнении данными должна очищаться от предыдущих данных?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052428
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л

Правильно ли я понял что временная(она же промежуточная) база с таблицей при следующем заполнении данными должна очищаться от предыдущих данных?

судя по тем файлам которые вы выкладываете, в промежуточную базу уже попадают обработанные (не изначальный массив) данные, с суммированием продаж по году/менеджеру/магазину и чему-то там еще.
Следовательно да, проще счищать и заполнять временную таблицу каждый раз, и раскидывать по итоговым таблицам также заново с их очисткой, я так думаю.
Либо при втягивании данных в MSSQL придется все сверять, где расхождения - апдейтить, где отсутсвует - добавлять и т.п.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052440
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit
обработанные (не изначальный массив) данные, с суммированием продаж по году/менеджеру/магазину

Да, данные обработаны. Только суммирование в рамках дня. Изначально одна счет фактура занимает одну строку, а каждому товару отведено две колонки - для количества и суммы. После Unpivot данные принимают тот вид, который представлен в примере.
Единственное, от даты остается только год, так как я непредусмотрительно не завернул исходную дату в одинарные кавычки.

Я так понял очищать придется только итоговые таблицы, а промежуточную надо будет пополнять.
Пока есть вопрос сколько будет уходить времени на заполнение таблицы фактов с проверкой четырех ключей.
Завтра подготовлю скрипты для справочников
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052525
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit,
Спасибо!
Все заполняется!
Теперь бы таблицу prodagi заполнить с привязкой к справочникам.
Покажете как это делается?
В файле скрипты для заполнения справочников.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052674
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
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]
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40052695
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit, все работает! Большое спасибо!
Завтра, если время будет, погоняю еще
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40053127
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все работает правильно!
Большое спасибо!

Однако у меня теперь другая проблема.
В файле описание проблемы.
Подскажите как в таких случаях поступают?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40053148
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что я подумал?)
Возможно ли так: в итоговой базе иметь четыре общих справочника (на 2000-2021) и две таблицы фактов (таблица фактов 2000-2020 и таблица фактов 2021). Для заполнения таблицы фактов 2021 эта таблица будет связана со справочниками. А объединять через Union только таблицы фактов.
Возможно ли так?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40053161
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
Что я подумал?)
Возможно ли так: в итоговой базе иметь четыре общих справочника (на 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]
условие когда данные уже есть, и их вставлять не требуется
ну если на пальцах, то как-то так это все выглядит.
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40053197
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MoonRabbit

если мы имеем справочные таблицы то счищать и перезаполнять их заново без перезаполнения скажем условно одной из таблиц фактов - возможное нарушение целостности данных. И чтобы этого избежать надо их тогда немного переделать.
Как бы делал я в данном случае:
в справочных таблицах на поле с ID добавил бы свойство IDENTITY, чтобы не заморачиваться с присвоением этого идентификатора.
Тогда при заполнении этих таблиц я бы просто проверял наличие значений, примерно так:
...
все это прелестно в случае когда в изначальных данных из 1С никто не балуется, например не переименовывает клиентов

Этот вариант заполнения(вернее дополнения) справочников позволит иметь как одну, так и две привязанные таблицы фактов?
Я бы хотел попробовать оба варианта:
1 вариант: четыре перезаписываемых справочника и две таблицы фактов(тоже перезаписываемых. Только вероятнее всего таблица фактов 2000 - 2020 года после заполнения не будет требовать перезаписи. А вот таблица фактов 2021 будет перезаписываться чуть ли не каждый день);
2 вариант: четыре пополняемых справочника и одна пополняемая таблица фактов.
Примеры с переделанными таблицами смогу подготовить ко вторнику(в понедельник обычно много работы)

Насчет данных 1С и переименования значений справочников понял. Как только увидят раздвоения данных по, например, одному менеджеру - я объясню причину)

MoonRabbit
а зачем?
структура таблиц одна, логически данные - единый массив по продажам, он интересен именно в целостном виде.
зачем разбивать по периодам, если мы запросами и так получим нужные данные и из одной таблицы, зачем постоянно держать в голове эту возможность и необходимость их union?
...
Опять же, если в изначальных данных никто не балуется, то пользуясь тем что у нас может пропасть необходимость перезаполнять справочники, мы можем не перезаполнять таблицу продаж каждый раз, а просто также добавить в операцию заполнения таблицы продаж
insert into [prodagi]
условие когда данные уже есть, и их вставлять не требуется

Да, в итоге все данные склеиваются. Охота попробовать вариант с Union.
- условие когда данные уже есть, и их вставлять не требуется - Чтобы проверить данные на дубликаты - нужно же время? Или имеется ввиду не проверять факты на дубликаты, а дополнять по периодам, например, каждый день добавлять данные за прошлый день?

Так то мне суть понятна. Сразу скажу, сам я не справлюсь) Прошу заглядывать в тему и помогать решениями!
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40053894
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подготовил пример.
В принципе, на первый взгляд неопытного пользователя, все работает. Но все равно прошу проверить.

Что надо бы изменить на мой взгляд. Сейчас есть проверка на дубликаты только у справочников. Надо бы добавить проверку на дубликаты в таблицу prodagi. Сейчас с каждым выполнением запроса из файла 5 количество строк увеличивается. Как это предотвратить?
Может я не правильно что сделал?
...
Рейтинг: 0 / 0
Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
    #40054546
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу показать как при пополнении таблицы делать проверку на дублирующие строки?
Или, если можно, на дублирующие данные по столбцам? Например, год и номер счет фактуры уникальны. Возможно ли по ним проверять на дубликаты?
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно и практично разбить исходную таблицу на табл-факт и табл-справочники
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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