Страницы: 1
RSS
Проблема при раскрытии table в PowerQuery после фильтрации, При раскрытии столбца table берёт данные которые уже отфильтрованы в предыдущем запросе
 
Здравствуйте, Уважаемые форумчане.
Возникла вот такая проблема:
В power query беру исходные данные и сортирую их по дате и отбираю самые новые. Но когда вставляю полученные данные в другую таблицу и раскрываю "table" то берутся не полученные цифры, а самые первые по дате, которые отфильтрованы в предыдущем запросе. Пробовал добавлять настраиваемый столбец с изъятием первого значения повторно, но файл вырос с 200 кб до 12 мб, и стал работать во столько же раз медленнее.  

Хотелось бы узнать почему так происходит и как с этим бороться. Power Query только начал изучать. Пробовал в 2013 и 365 офисе, проблема такая же. Файл с примером прикрепляю.

Спасибо что уделили время.  
 
я ХЗ почему так, но замените запрос ПрихЦены на этот:

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Дата", type date}, {"Номенклатура", type text}, {"Контрагент", type text}, {"Цена", type number}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Номенклатура"}, {{"Количество", each _, type table [Дата=nullable date, Номенклатура=nullable text, Контрагент=nullable text, Цена=nullable number]}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Сгруппированные строки", "Пользовательский", each Table.Max([Количество],"Дата")),
    #"Развернутый элемент Пользовательский" = Table.ExpandRecordColumn(#"Добавлен пользовательский объект", "Пользовательский", {"Дата", "Контрагент", "Цена"}, {"Дата", "Контрагент", "Цена"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Развернутый элемент Пользовательский",{"Количество"}),
    #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Удаленные столбцы",{"Дата", "Номенклатура", "Контрагент", "Цена"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Переупорядоченные столбцы",{{"Дата", type date}, {"Цена", type number}, {"Контрагент", type text}, {"Номенклатура", type text}}),
    #"Сортированные строки1" = Table.Sort(#"Измененный тип1",{{"Контрагент", Order.Ascending}, {"Номенклатура", Order.Ascending}})
in
    #"Сортированные строки1"
 
Спасибо большое, попробую такой вариант.
 
Так еще можно.
 
Цитата
написал:
Так еще можно.
Да там уже продвинутый уровень :) Спасибо большое, но пока такое не на моем уровне.  
 
alfikgg, В запросе ПрихЦены добавьте колонку с индексом.
И вот для ознакомления
 
Цитата
написал:
alfikgg , В запросе ПрихЦены добавьте колонку с индексом.И  вот  для ознакомления
Спасибо. Полезная информация.  Надо будет попробовать, может сработает как надо.
 
Здравствуйте!
alfikgg, скорректировала Ваш вариант.
Код
Убрала строку 
//#"Сортированные строки" = Table.Sort(#"Измененный тип",{{"Дата", Order.Descending}}),
Добавила сортировку: 
вместо строки
#"Добавлен пользовательский объект" = Table.AddColumn(#"Сгруппированные строки", "Пользовательский", each Table.First([Количество])),
добавила строку
= Table.AddColumn(#"Сгруппированные строки", "Пользовательский", each Table.First(Table.Sort([Количество],{"Дата",1})))
Все работает корректно...
Всего доброго! )
 
Цитата
написал:
Здравствуйте! alfikgg , скорректировала Ваш вариант
и Вам спасибо большое. Хорошо что есть столько способов решить задачу, интересно только какой вариант быстрее работает в огромном файле.
 
Все-таки может кто-то пояснить, как вообще такое возможно? Какая разница, какие были преобразования в запросе "ПрихЦены? важно что результатом запроса "ПрихЦены" является таблица,  результат в запрос "КалькСЦенами" тянется из этой таблицы - из конечного результата.
Либо получается, что Table.NestedJoin тянет результат не из конечного шага-результата запроса  "ПрихЦены", а из др. шага этого запроса?
Как-же дальше можно надеяться на корректную работу Table.NestedJoin?!

upd: ошибка происходит именно на этапе разворота таблицы после joina в запросе "КалькСЦенами" - если не разворачивать, а создать пользовательский столбец и в нем обратиться к вложенной таблице, то значение получается правильное . Что-то происходит на этапе разворота, но это очень печально.
Возможно, что-то в глобальном конфликте имен - но я и таблицы исходные умные переназвал, и в join др. имя таблицы задал - все-равно при развороте после join неправильно.
Изменено: voler83 - 15.05.2024 12:42:40
 
Цитата
voler83 написал:
Все-таки может кто-то пояснить, как вообще такое возможно?
По ссылке переходили? Знакомились?
 
Михаил Л, еще раз перечитал, и по ссылкам на др. темы тоже - так, видимо, и не нашли корневую проблему, костыли это не решение, можно очень сильно влететь на практике. Нет никакого понимания, почему именно разворачивание все ломает - прикол же в том, что во вложенных таблицах после join значения верные, т.е. непосредственно Table.NestedJoin правильно отрабатывает, что доказывается также тем, что если не разворачивать, а обращаться к влож. таблице напрямую через {} и [], то значения вытаскиваются правильные. Что происходит на этапе разворота? - заново делается join по др. данным?
Изменено: voler83 - 15.05.2024 13:55:58
 
Цитата
voler83 написал:
не нашли корневую проблему
Да, причину не нашли. Однако в запросе после работы со строками(изменение очередности, сортировка и др.) рекомендуют закреплять таблицу колонкой с индексом.
То что в голове все это не держится - это да. На практике наверное гуляют такие запросы пока не заметят неладное.
Страницы: 1
Наверх