Страницы: 1
RSS
Загрузка файлов из папки Power Query с фильтрацией по времени создания для файлов текущей даты
 
Добрый ночи!
Как отфильтровать столбец "fileDate" по самой поздней дате создания "Date created", что бы избавиться от дубликатов в первом столбце?
Изменено: Александр E - 27.07.2020 04:13:36
 
Александр E,
а отсортировать по убыванию и удалить дубликаты не помогает?
 
Помогло! Спасибо. Не понятно как но помогло!
А. Нет на полных данных не всегда работает.
Изменено: Александр E - 27.07.2020 07:55:25
 
Александр E, легкая модификация алгоритма:
1. Сортировка
2. Создаем столбец индекса
3. Удаляем дубликаты.
4. Удаляем столбец индекса.

И не спрашивайте почему так, сам не знаю. Наверное транслятор языка М слишком умнее меня.  :)  В PQ к сожалению еще немало таких моментов где не обойтись без

 
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
В PQ к сожалению еще немало таких моментов
Не могли бы, к сортировке и удалению дубликатов через индекс, перечислить остальные
Впору в курилке создать тему про функции PQ, которые не ведут себя однозначно при разных количествах строк.
По моему, это капканы для новичков и не новичков. Причем и знать не будем, в капкане итоговые данные или не в капкане..
 
Михаил Л, да все разве упомнишь? Могу только сказать, что помимо Sot + Distinct принципиально в любом коде не использую NestedJoin и разворачивание столбцов Table.ExpandColumns. Только Table.Join в связке с Table.Group и Table.Combine. Так и быстрее и универсальнее (не надо создавать списки с перечислениями столбцов)  и глюков ни разу еще не ловил.

Например задача ТС элементарно решается через Table.Group + Table.Max + Table.Combine безо всяких сортировок. Если эти три функции скормить в поиск форума, то можно найти штук 5 тем, с полным решением задачи.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Table.Group + Table.Max
Хотел тоже предложить, но без примера не стал
 
Offtop
Да ладно вам коллеги придираться. Ну, не удачно оптимизатор упростил выражение, так нынче же кругом одни гуманитарии, а они так видят... :)  Хотите всё держать под контролем и чтобы быстро работало, то добро пожаловать в мир С++ :D
 
офф
Андрей VG, да ладно, чего уж там, приглашайте сразу в ASM. Подозреваю, что тот же bedvit про СИ много интересного рассказал бы и  про глюки среды разработки. Не верю я в безгрешность того, что делают люди. Хотя раньше и трава была зеленее и с девчонками было как-то по-проще...  :D
Изменено: PooHkrd - 27.07.2020 12:21:41
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Table.Group + Table.Max + Table.Combine
не-не-не, так низзя. А Table.Group + Table.Max + Table.FromRecords можна :)

Цитата
PooHkrd написал:
И не спрашивайте почему так, сам не знаю.
Да в общем причина довольно "простая"   :D  :D  :D , насколько мне известно. Называется straming semantics ))) Суть, короче, в том, что таблицы читаются не обязательно целиком за один присест и не обязательно в том же порядке, как мы видим. Ну и плюс к тому  есть понятие query folding. Соответственно, некий набор операций может быть выполнен не в том порядке, который мы видим, и некоторые шаги даже теоретически могут не выполняться. Например, интерпретатор видит последовательность шагов, которая может быть схлопнута в более короткий запрос SQL (или внутреннюю процедуру) с тем же результатом.
Например, для обычной глобальной группировки (или удаления дубликатов как ее разновидности) порядок строк не важен. Поэтому если мы делаем StepN+Sort+Group, алгоритм группировки соберет строки так, как ему удобно, и, возможно, без учета Sort - нафиг он нужен, если все равно группируем. Но если мы зафиксируем непосредственно перед группировкой таблицу в памяти, то тогда порядок строк сохранится - группировка будет брать данные из вот этой фиксированной таблицы.
Фиксация происходит разными путями: добавление столбца индекса, добавления столбца ключа, буфферизация - в общем, любая операция, которая требует enumerate all rows in the table.
F1 творит чудеса
 
Цитата
Михаил Л написал:
перечислить остальные
Увидел еще одни танцы
В запросе идем на шаг Sort, смотрим на расположение первых двух строк. Идем на следующий шаг и смотрим на эти две строки
 
Максим, эти все заклинания я по вашим ссылкам еще 2 года назад читал. Только воз и ныне там. Причем МС об этой всей ерунде 100% в курсе. Вот тебе и селф-сервис БиАй. А потом от начальства прилетает айайай.  :D Другой вопрос, что если в фундаменте системы заложена такая мина, то где и при какой обнове она в следующий раз рванет - это тайна покрытая мраком.
Цитата
Михаил Л написал:
Идем на следующий шаг и смотрим на эти две строки
Короче шаг с сортировкой в PQ мутный.  :D  :D  :D причем добавление буфера или индекса запускает сортировку по-новой и такйо же результат как изначально воспроизвести не получается.
Изменено: PooHkrd - 27.07.2020 15:41:29
Вот горшок пустой, он предмет простой...
 
дел
Изменено: PooHkrd - 27.07.2020 15:40:16
Вот горшок пустой, он предмет простой...
 
Цитата
Михаил Л написал:
идем на шаг Sort, смотрим на расположение первых двух строк.
ну так по дате-то сортировка остается правильной? "К пуговицам вопросы есть?" :) Если вы добавите ПОСЛЕ сортировки столбец индекса, вы увидите тот же порядок строк, что и после FillDown. Точно так же, как и = Table.Buffer(Table.Sort(Merge,{{"Дата", Order.Ascending}}))
Что говорит, наверное, о том, что для превью может быть использован один алгоритм сортировки. А если мы занимаемся фиксацией таблицы в памяти (чем, похоже, занимается в том числе FillDown), то тогда алгоритм другой.
Код
= Table.Sort(Merge,{{"Дата", Order.Ascending}, {"Value", Order.Descending}})
решает проблему.
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
для превью может быть использован один алгоритм сортировки
Я так понимаю, что тут не сколько алгоритм сортировки, сколько алгоритм выборки строк для превью. Два алгоритма сортировки использовать как-то слишком жирно. И, главное, зачем?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Причем МС об этой всей ерунде 100% в курсе.
мало того, они об этом явно пишут в спецификации языка.
Цитата
PooHkrd написал:
Другой вопрос, что если в фундаменте системы заложена такая мина, то где и при какой обнове она в следующий раз рванет - это тайна покрытая мраком.
Какая конкретно мина всё же имеется в виду? Что сортировка по столбцу не означает сохранения сортировки по другим столбцам? Ну да, не так, как в Excel... Но задача-то выполнена - данные отсортированы, отсортированы правильно.
Хотя, безусловно, соглашусь - о том, что исходный порядок строк не гарантирован при таких-то операциях, нужно писать явно и капсом, а не в разных местах доки. Кто ж сейчас читает документацию-то :(
F1 творит чудеса
 
Цитата
PooHkrd написал:
не сколько алгоритм сортировки, сколько алгоритм выборки строк для превью
возможно, но это в целом не имеет значения... получается, правило такое - если хочешь увидеть определенный порядок, задай его, а не надейся на везение
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Какая конкретно мина всё же имеется в виду?
То что Table.Sort перед Table.Distinct или Table.SelectRows внутри таблиц перед Table.ExpandColumns могут игнорироваться интерпретатором без предупреждения. Я только про такие вот выпады. Здесь на форуме про обе ситуации темы с примерами были неоднократно.
Вот горшок пустой, он предмет простой...
 
PooHkrd, я бы даже сказал, что всё еще менее прозрачно, по словам Эрена:
Цитата
The fact that buffering or adding an index column causes the original ordering to be preserved is just an accidental side-effect of how things are currently implemented. In other words, there's no guarantee that such workarounds will continue working in the future. But adding an index column up front and then sorting by it after merging/expanding/etc. is explicit and does not rely on unintended side-effects.
Цитата
PooHkrd написал:
Table.SelectRows внутри таблиц перед Table.ExpandColumns могут игнорироваться
о, а можно пример? не встречал еще.
Изменено: Максим Зеленский - 27.07.2020 16:36:07
F1 творит чудеса
 
Максим Зеленский, пардоньте, про Table.SelectRows это я ошибся. Имел ввиду эту тему, но там в принципе проблема та же: Table.Sort перед Table.Distinct, а уже Table.ExpandColumns сработал как триггер пересчета обеих таблиц, и результат получился фееричный. Память уже не та.  :)
Изменено: PooHkrd - 28.07.2020 09:56:07
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх