Страницы: 1 2 След.
RSS
[ Закрыто ] Связать 2 таблицы в одну макросом. Сложное объединение двух таблиц.
 
Доброго вечера, уважаемые форумчане!
Прошу вашей помощи в организации связи "один-ко-многим" между двумя таблицами через макрос. От создания сводных по нескольким таблицам (это также решило бы проблему) пока отказался, ввиду слабого знания материала и опасений "накосячить", а макрос есть макрос - из созданной им таблицы я всегда смогу отличную сводную построить.
Не воспринимайте, пожалуйста, как ТЗ - выложил все мысли по теме, может чем-то поможет…

В посте №24 - рабочий макрос.

Пример такой (описание файла-примера):

Детали по макросу (как примерно я это вижу):

Комментарии:

Примеры похожих проблем:

Инструкция по использованию спойлеров на форуме
Изменено: Jack Famous - 24.11.2016 09:31:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Опять ТЗ строчим?
There is no knowledge that is not power
 
SuperCat, так и знал)))) да вот как ни напишу - всё как ТЗ выглядит))))
Вот то, что смог по теме в VBA)))
Изменено: Jack Famous - 18.11.2016 00:10:27
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Тренировка скрывания под спойлер
Изменено: С.М. - 18.11.2016 02:55:06
 
С.М., наконец-то первый вариант по теме))))) спасибо вам большое - как обращаться с этим зверем?))) выделял и 1 и 2 таблицу, запускал макрос - ничего(((
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Доброе время суток
Цитата
Сложное объединение двух таблиц.
Несколько щелчков мышкой... в Power Query. И выясняется, что в результате есть ошибочка :)
Успехов.
Изменено: Андрей VG - 18.11.2016 12:12:23 (Файл не той системы приложил.)
 
Андрей VG, здравствуйте!))) спасибо за пример, но пишет "указанного файла не существует"
По поводу Power Query - знаю, что так можно, но пока что боюсь DAX-формул (писал в шапке темы). Жду уроков от Николая Павлова…
Изменено: Jack Famous - 18.11.2016 12:15:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
"указанного файла не существует"
Вы слишком быстро пришли за примером. Обнаружил, что не ту версию файла прикрепил. Переложил, и тут вы - качать... Накладка, однако :)
 
Андрей VG, спасибо большое)))) есть возможность рассказать, как эту динамическую связку организовывать? Я бы в динамике всё построил…
Изменено: Jack Famous - 18.11.2016 12:19:51
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: По поводу Power Query - знаю, что так можно, но пока что боюсь DAX-формул
не делайте непроверенных выводов!.. в PQ - язык другой (M-language), язык DAX в PP
p.s. см.  #14 --> Расширенный редактор
Изменено: JeyCi - 18.11.2016 12:32:33
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Можно чуть подсократить:
Код
1
2
3
4
5
6
7
8
9
let
    Источник = Excel.CurrentWorkbook(){[Name="помещения"]}[Content],
    #"Объединенные запросы" = Table.NestedJoin(Источник,{"№ типа"},типы,{"№ типа"},"NewColumn",JoinKind.LeftOuter),
    #"Развернутый элемент NewColumn" = Table.ExpandTableColumn(#"Объединенные запросы", "NewColumn", {"Формула"}, {"Формула"}),
    #"Сортированные строки" = Table.Sort(#"Развернутый элемент NewColumn",{{"№ пом.", Order.Ascending}, {"Формула", Order.Ascending}}),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Сортированные строки",{{"Формула", "Материал"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Переименованные столбцы1",{{"№ пом.", Int64.Type}, {"№ типа", Int64.Type}})
in
    #"Changed Type"
F1 творит чудеса
 
Цитата
Максим Зеленский написал: Можно чуть подсократить:
Конечно!
Код
1
2
3
4
5
6
7
let
    types = Excel.CurrentWorkbook(){[Name="типы"]}[Content],
    houses = Excel.CurrentWorkbook(){[Name="помещения"]}[Content],
    renHouses = Table.RenameColumns(houses, { {"№ типа", "typeName"} }),
    joined = Table.Join(renHouses, {"typeName"}, types, {"№ типа"})[[#"№ пом."], [#"№ типа"], [Формула]]
in
    Table.RenameColumns(joined, { {"Формула", "Материал"} })
 
Цитата
Jack Famous написал #5:
С.М. , как обращаться с этим зверем?))) выделял и 1 и 2 таблицу, запускал макрос - ничего(((
Не надо ничего выделять, жмём кнопку :
 
С.М., огромное спасибо!!! Буду разбираться с кодом)))
если можно закомментируйте, пожалуйста код - хочу понять, какие переменные участвуют, чтобы запихнуть их в диалоговые окна при запуске макроса…
JeyCi, благодарю за подсказку и коррекцию)))
Андрей VG и Максим Зеленский, благодарою за вариант решения через PQ - в перспективе этот вариант, скорее всего станет основным, а пока буду учить матчасть))))
Изменено: Jack Famous - 18.11.2016 13:45:07
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Андрей VG, нет предела совершенству  :D
Скрытый текст
Изменено: Максим Зеленский - 18.11.2016 15:12:10
F1 творит чудеса
 
Максим, у меня PQL через раз ругается, что не может выполнить Join из-за одинаковых названий столбцов
Код
1
Table.Join(houses, {"№ типа"}, types, {"№ типа"})
, поэтому и пришлось делать "лишнюю" операцию. Причём, если соединение по двум и более столбцам, тогда без вопросов - отрабатывает как и должно быть. Один из глюков PQL - может в последних и поправили.
 
странно, у меня не ругается...
F1 творит чудеса
 
я думаю, в этом дело:
Цитата
An Expression.Error is thrown if a column with the same name to appear in both tables of the join unless the column is selected by both key1 and key2 and the join is an inner join.
F1 творит чудеса
 
Максим Зеленский, Андрей VG, подскажите, а эти формулы только руками вбивать или есть что-то вроде мастера функций, как в Excel - тогда дело за синтаксисом и практикой))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: а эти формулы только руками вбивать или
Jack Famous вы кнопки в надстройке нажимайте и смотрите, что получается, а в расширенном редакторе - весь код целиком увидеть можно... вопрос в том в какой последовательности какие кнопки (в зависимости от того, какие шаги по коду совершить хотите)... последовательность - это уже вопрос алгоритмизации... для получения нужного на выходе... вы не стесняйтесь знакомиться с надстройкой  ;) , если чётко себе представляете алгоритм, который вам надо закодировать [решение порождает человек, простые шаги может пройти по кнопкам на ленте PQ]... сложные моменты придётся править руками, когда захотите выполнять ювелирную работу (как с макрорекодером)... - что вызвало проблему, чтобы самому прийти к такому выводу?? - особенно после прохождения по моему линку в #10 и ответа Максима там...
Изменено: JeyCi - 18.11.2016 18:30:27
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Jack Famous написал:
С.М. , Буду разбираться с кодом)))
если можно закомментируйте, пожалуйста код - хочу понять, какие переменные участвуют
Вот:
 
JeyCi, надо пробовать - спасибо за напутствие!))
С.М., большое спасибо вам!)) Попробую что-нибудь сделать с этим ;)  наверняка куча вопросов будет  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
С.М., посидел, посмотрел - из переменных, которые смог: разглядеть только типы, помещения и таблица. Первые 2 - в виде именованных диапазонов, а таблица и есть таблица)) не могли бы вы изменить сам принцип работы макроса? Сейчас он решает одну конкретную задачу - ни влево, ни в право, к тому же он вставляет не значения столбца, а самостоятельно индексирует третий столбец справочника. То есть, если мне нужно вставлять какой-либо другой столбец - это очень замороченная процедура получится…
Прошу вас попробовать сделать нечто похожее, как я начал в #3. То есть, выбираем ключевые поля в обоих таблицах через диалоговые окна, выбираем, какой столбец справочника переносить в целевую таблицу (размножением строк) и всё. Номеров типов и слоёв ведь тоже может не быть, поэтому макрос должен считать всё самостоятельно, ориетируясь не на числа, а только на то, сколько строк переносимого столбца справочника соответствуют одному и тому же значению ключа справочника
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Доброго утра, уважаемые форумчане!
Александр С.М. согласился помочь с макросом и вот, что мы получили в итоге (выкладываю файл с макросом и отдельно модуль и класс для замечаний и предложений по оптимизации):

В модуле

В Class1 раздела Class Modules

Инструкция к макросу
Изменено: Jack Famous - 24.11.2016 10:25:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Отдельная благодарность Андрей VG, Максим Зеленский и JeyCi - с их подсказок удалось довольно простым способом осуществить подобную связь в динамически обновляемом виде через запросы в Power Query - теперь, связав 2 и более таблицы через запросы по ключевым полям и удалив в этих запросах всё лишнее, можно готовый итоговый запрос выгрузить в книгу и строить сводную по нему. При изменении/дополнении/удалении данных в справочниках - всё динамически обновляется и в сводной.
Теперь я серьёзно настроен на изучение Power BI в целом - спасибо, мастера!  8)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
можно готовый итоговый запрос выгрузить в книгу
Можно и не выгружать
F1 творит чудеса
 
Максим Зеленский, да - добавить в модель данных и готово))) подскажите, пожалуйста аналоги функций СУММЕСЛИМН и СЧЁТЕСЛИМН для Power Query. Или это только через DAX в Power Pivot? А то таблички посвязывал по ключевым полям (6 штук), а этого капец как не хватает…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Доброе время суток
Цитата
Jack Famous написал:
аналоги функций СУММЕСЛИМН и СЧЁТЕСЛИМН для Power Query
Смотря что вы под этим подразумеваете. В общем случае - фильтрация по критериям и группировка (плоская сводная таблица).
 
Андрей VG, доброй ночи!
Вы мне всегда подсказывали по поводу сводных и Power Pivot - надеюсь, что и тут поможете… Прикрепил файл-пример со связкой 3х таблиц через Power Query - как вышло и чего не хватает.
ЖЁЛТЫМ выделены ключевые поля
ЗЕЛЁНЫМ выделены поля с формулами
СИРЕНЕВЫМ выделены пользовательские столбцы с формулами в Power Query
ОРАНЖЕВЫМ выделено то, чего не смог достичь внутри запросов в Power Query

Изменено: Jack Famous - 30.11.2016 00:24:07
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
МОДЕРАТОРАМ: предлагаю (из-за развития темы вне названия) следующее название темы - "Объединение таблиц. Макросы, Power Query и Power Pivot"
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1 2 След.
Читают тему
Loading...