Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 131 След.
Power query Открыть самый первый файл отчетного месяца
 
В общем, PooHkrd был прав, что в этом случае
Код
let earliest = List.Min(types[Date]) in each [Date] = earliest
List.Min вызывается только один раз и очень близок к правде о том, почему это происходит. Если интересно, ответ от разработчика Power Query (немного неожиданный, кстати, во второй части). Посмотрим, подтвердит ли он мою догадку о природе этого явления, но я думаю, что да
F1 творит чудеса
Настройка максимального количества строк Power Query, Помогите, пожалуйста, 2 дня мучаюсь..
 
Проверьте диапазон, который получает PQ. Возможно, это не весь
F1 творит чудеса
Ошибка в PQ: слишком длинное выражение, ошибка при обновлении данных из источников и затем операции слияния таблиц
 
Хрустальный шар не работает сегодня, пасмурно
F1 творит чудеса
Ошибка в PQ: слишком длинное выражение, ошибка при обновлении данных из источников и затем операции слияния таблиц
 
А что за точки у вас после [_]? Есть сомнения в правильности синтаксиса.
Если под [_] вы подразумевает текущую строку, то удалите, вместо с точками
Изменено: Максим Зеленский - 21 Фев 2019 09:40:20
F1 творит чудеса
Power query Открыть самый первый файл отчетного месяца
 
Цитата
Aleksei_Zhigulin написал:
1. Согласно посту  #14  все варианты можно вывести один из другого,
вот в том и дело, что не получается пока. У меня нет точного ответа ещё
Изменено: Максим Зеленский - 21 Фев 2019 09:12:37
F1 творит чудеса
Столбец со статьями(операциями) обратить в строки, имеется выгрузка 1С преобразовать её в человеческий вид.Подсказать может ссылку или шаги к решению.
 
Еще вариант
F1 творит чудеса
PQ как обратиться к шагу другого запроса
 
Цитата
Alexey_Spb написал:
Активно использую эту функцию
можете столкнуться в весьма неожиданными результатами... Далеко не всегда тот #shared, который виден в окне редактора, это тот #shared, который будет доступен внутри другого запроса - мало ли, решило не evaluate ненужный запрос.
Может, сейчас пофиксили, но раньше так и было - первая выгрузка на лист нормально, следующие с ошибкой
F1 творит чудеса
PQ как обратиться к шагу другого запроса
 
Как показывает практика, количество возможных имен переменных всегда ограничено  :D :D :D
Особенно это заметно в PQ на многократно вложенных функциях :) :)
F1 творит чудеса
Power query Открыть самый первый файл отчетного месяца
 
Aleksei_Zhigulin, у меня вот такие результаты за 10 обновлений на массиве 1 млн дат:

BuiltIn - это встроенный отбиратор (где let earliest...)
PreCalc - расчёт минимума в переменную заранее
Func - вынос функции-отбиратора в отдельный шаг
Simple - обычное сравнение типа [Date] = List.Min(Typed[Date])

Предрасчёт более-менее быстрее, хотя разница первых трех приемов незаметна. Простой отбор, конечно, самый нудный.
Эксперимент не очень чистый, так как порядок расчёта может влиять, не был отключен Caclulation, ну и т.п.
F1 творит чудеса
Power query Открыть самый первый файл отчетного месяца
 
Цитата
PooHkrd написал:
Если переменная один раз посчиталась и на выходе простой тип (число/текст/дата) то эта переменная автоматом пишется в память, и при следующем обращении к этой переменной не пересчитывает её а берет готовое значение. В данном случае функция вызывается один раз до each,
А здесь другой принцип.
Смотрите, вы даете в виде функции в Table.SelectRows выражение, которое можно переписать как отдельный шаг и затем использовать в Table.SelectRows:
Код
MyFunction = let earliest = List.Min(Typed[Date]) in (_)=>_[Date] = earliest,
Filtered = Table.SelectRows(Typed, MyFunction)

результат его вычисления - функция (function value), принимающая аргумент _:

Вопрос: на каком этапе вычисляется List.Min(Typed[Date])? Предположим, что Table.SelectColumns сначала вычисляет выражение MyFunction и получает function value, которое затем invoked (вычисляется с передачей аргументов) для каждой строки. Так вот из-за ленивости let-выражения, будет ли List.Min(Typed[Date]) рассчитан до того, как функция вызывается для расчёта результата?
А если вот так переписать:
Код
MyFunction = each [Date] = List.Min(Typed[Date])
будет ли результат тот же?
а если написать просто
Код
Table.SelectRows(Typed, each [Date] = List.Min(Typed[Date]))

будет ли разница?
F1 творит чудеса
PQ как обратиться к шагу другого запроса
 
не, ну зря, что ли, люди старались: The Environment concept in M for Power Query and Power BI Desktop
Только, конечно, надо предупредить, что #shared не работает в Power BI Service, ибо нефиг
F1 творит чудеса
PQ как обратиться к шагу другого запроса
 
artyrH, ну если очень-очень надо...
Код
= Expression.Evaluate("Источник", #shared)
F1 творит чудеса
Возврат количества значений в столбце выше среднего
 
Код
=СЧЁТЕСЛИ(B2:B346;">"&СРЗНАЧ(B2:B346))
F1 творит чудеса
Power query Открыть самый первый файл отчетного месяца
 
Цитата
PooHkrd написал:
Код
each let latest = List.Min(types[Date]) in [Date] = latest)
В таком случае он точно не будет для каждой строки таблицы пересчитывать каждый раз минимум по столбцу из предыдущего шага, а посчитает один раз, сохранит в переменной и уже с ней будет сравнивать каждую строку.
Вы уверены?.. по идее, мы передаем функцию-comparer, которая будет вызвана N раз для каждой строки.
Что эта функция
Код
each [Date] = List.Min(types[Date])

что эта
Код
each let latest = List.Min(types[Date]) in [Date] = latest

будут вызваны одинаковое количество раз, соответственно List.Min(types[Date]) так же будет посчитан одинаковое количество раз.
Тогда уж надо добавлять до Table.SelectRows такой шаг:
Код
latest = List.Min(types[Date])

и уже тогда
Код
each [Date] = latest
Изменено: Максим Зеленский - 20 Фев 2019 16:46:37
F1 творит чудеса
Распознавание диапазонов на листе и разнесение данных по столбцам на другой лист/книгу
 
Задачка решается на PQ, но если надо на VBA - то тут я пройду мимо, некогда.
вот это смущает немного:
Цитата
Alexander123 написал:
Этот блок может быть, а может и не быть на листе
, хотя вполне решается проверкой количества столбцов следующего блока.
F1 творит чудеса
Генерировать умную таблицу, повторяя набор строк заданное количество раз
 
Предлагаю название: "Генерировать умную таблицу, повторяя набор строк заданное количество раз"
F1 творит чудеса
PQ в условном или в настраиваемом столбце пронумеровать строки в случае истины
 
Да черт его знает, есть там ленивость + обещания, или нет. Я подозреваю, что есть, но точнее сказать могут только два человека, а их на нашем форуме нет. Не зря же все аргументы - функции. Они, как известно, вычисляются лениво. Да и в принципе в самой логике работы (насколько я вообще понимаю promises, а понимаю я их весьма поверхностно) для обещаний как раз простор в реализации.
F1 творит чудеса
PQ в условном или в настраиваемом столбце пронумеровать строки в случае истины
 
Цитата
PooHkrd написал:
Он как я понял работает по аналогии с List.Transform, только не преобразует ничего, а создает с список нуля
не совсем... на List.Transform не сильно похоже. Это скорее Do While ... Loop
Описывал тут когда-то: Генератор произвольных списков в Power Query и Power BI
А ещё в List.Accumulate есть такое нечто, связанное с promises :) что может приводить к достаточно интересному эффекту Stack Overflow :) вот тут в конце и в комментариях
F1 творит чудеса
PQ в условном или в настраиваемом столбце пронумеровать строки в случае истины
 
Цитата
PooHkrd написал:
собирает новый список на каждой итерации добавляя в него плюс один элемент
не очень точно. Не собирает новый список, а высчитывает очередное некое значение, копируя предыдущее состояние и изменяя его в соответствии с функцией. То, что второй аргумент - запись, содержащая список, так это задано руками. Вообще аккумулятор возвращает одно значение, например:
Код
List.Accumulate({1..5},1,(s,c)=>s*c)

Никакие списки тут не создаются, а высчитывается некое значение в соответствии с количеством итераций=List.Count(первый аргумент)
F1 творит чудеса
PQ в условном или в настраиваемом столбце пронумеровать строки в случае истины
 
Код
// мои пять копеек
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Индекс", 1, 1),
    #"Added Index1" = Table.AddIndexColumn(Table.SelectRows(#"Added Index", each [Столбец2] < 30), "<30", 1, 1) & Table.SelectRows(#"Added Index", each [Столбец2] >= 30),
    #"Sorted Rows" = Table.Sort(#"Added Index1",{{"Индекс", Order.Ascending}}),
    #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Индекс"})
in
    #"Removed Columns"
F1 творит чудеса
Power BI. Детализация в матрицах
 
Цитата
misha_kargin написал:
суть вопроса в excel приложенном файле
да, но лучше бы вы приложили табличку исходных данных, из которых вы формируете такую матрицу. Индикатор1-2-3 - это значения столбца? Меры? автоматические вычисления? Это названия столбцов или значения одного столбца?
F1 творит чудеса
Абсолютная ссылка на умную таблицу
 
Всё так. Самый простой способ - который описал ZVI, а если нужно сослаться на ссылку в текущей строке, то
=Таблица1[@[Расход]:[Расход]]
F1 творит чудеса
Заменить ошибки в Настраиваемом столбце(в формуле) Power Query, поправить функцию Try может есть другой подход
 
А ещё есть null, деление на который даёт null, а не ошибку и не упомянутое выше
F1 творит чудеса
Заменить ошибки в Настраиваемом столбце(в формуле) Power Query, поправить функцию Try может есть другой подход
 
Цитата
Александр L написал:
у меня вроде так и прописано когда создаю  доп столбец но не работает
Потому что деление на 0 это не совсем ошибка, которая стопорит запрос:
0/0 = NaN,
20/0 = Infinity
-20/0 = -Infinity
F1 творит чудеса
Заменить ошибки в Настраиваемом столбце(в формуле) Power Query, поправить функцию Try может есть другой подход
 
Проще всего так:
Код
=if ([#"Количество (в базовых единицах), короба"]*[Вложения]) = 0 then 0 else ([База]/([#"Количество (в базовых единицах), короба"]*[Вложения]))

Еще можно - создать столбец =[#"Количество (в базовых единицах), короба"]*[Вложения] и использовать в формуле его, чтобы не считать два раза, а потом удалить.
F1 творит чудеса
Как сделать плоскую таблицу из сгруппированных блоков
 
В принципе именно такую структуру можно разобрать и без той функции:
Код
// Таблица1
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Removed Columns" = Table.RemoveColumns(Source,{"Столбец2"}),
    #"Removed Top Rows" = Table.Skip(#"Removed Columns",3),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Top Rows",{{"Столбец3", "Цена"}, {"Столбец4", "Ед."}, {"Столбец1", "Наименование"}}),
    #"Added Index" = Table.AddIndexColumn(#"Renamed Columns", "Индекс", 1, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "IsGoods", each if [Цена]<>null then [Индекс] else null),
    #"Filled Up" = Table.FillUp(#"Added Custom",{"IsGoods"}),
    #"Inserted Subtraction" = Table.AddColumn(#"Filled Up", "LvlBack", each [IsGoods]-[Индекс] , type number),
    #"Removed Columns1" = Table.RemoveColumns(#"Inserted Subtraction",{"Индекс", "IsGoods"}),
    #"Added Index1" = Table.AddIndexColumn(#"Removed Columns1", "Индекс", 0, 1),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index1", {{"LvlBack", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Added Index1", {{"LvlBack", type text}}, "ru-RU")[LvlBack]), "LvlBack", "Наименование"),
    #"Sorted Rows" = Table.Sort(#"Pivoted Column",{{"Индекс", Order.Ascending}}),
    #"Filled Down" = Table.FillDown(#"Sorted Rows",{"3", "2", "1", "0"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([#"Ед."] = "пар")),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"3", "2", "1", "0", "Цена", "Ед."}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"3", type text}, {"2", type text}, {"1", type text}, {"0", type text}, {"Ед.", type text}, {"Цена", type number}})
in
    #"Changed Type"

Михаил Витальевич С., мне думается, здесь скорее подойдёт Row.OutlineLevel
F1 творит чудеса
Удаление строк в PQ если данные есть из всех столбцов только в столбце NAME
 
Братцы, всё проще можно сделать.
Берем таблицу и делаем по ней "Удалить пустые строки", получаем такой автокод:
Код
Table.SelectRows(Source, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))

и вместо знака _ (подчеркивания) пишем такое:
Код
Record.RemoveFields(_, {"NAME"})

получается вот такое:
Код
= Table.SelectRows(Source, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(Record.RemoveFields(_, {"NAME"})), {"", null})))

и всё.
Это если почти однокнопочный вариант :)

А если пренебречь пустой строкой "" вместо null, то можно и так:
Код
= Table.SelectRows(
    Source, 
    each List.NonNullCount(Record.FieldValues(Record.RemoveFields(_, {"NAME"})))>0)
Изменено: Максим Зеленский - 14 Фев 2019 13:08:10 (для читабельности)
F1 творит чудеса
Удаление дубликатов из столбца по условию в другом столбце при помощи Power Query
 
Я так понимаю, в первом случае вы просто заменили разворот столбца записей на сбор таблицы из записей?
Любопытное наблюдение. Нет под рукой подходящего массива, чтобы перепроверить.

Скорее всего, механизм добавления столбца к существующей таблице (что мы и наблюдаем в развороте) быстрее, чем механизм создания таблицы из записей. Снаружи это, конечно, не оценить толком, всё зависит от того, как реализована сама структура данных "таблица" в глубинах PQ и как написаны эти функции.

Я тоже привык считать, что таблица это скорее список записей. АндрейVG часто демонстрировал преимущества использования Table.ToRecords для последующей обработки с сбором в обратно таблицу в некоторых случаях (и есть подозрение, что большая часть встроенных функций обработки таблиц основана на Table.FromRecords <- List.Transform <- Table.ToRecords), но, судя по вашему тесту, эффективно это не всегда.

По поводу второго варианта - имейте в виду, что ExpandTableColumn всегда будет медленнее ExpandRecordColumn:
Код
Table.ExpandTableColumn = (table, column, columnNames, newColumnNames) as table =>
    Table.ExpandRecordColumn(Table.ExpandListColumn(table, column), column, columnNames, newColumnNames)

Немного парадоксально, не правда ли:
Код
let
    Source = #table(2, List.Zip({{1..5},{6..10}})),
    Custom1 = #table(2, {{1,Source}, {2,Source}}),
    Custom2 = Table.ExpandListColumn(Custom1, "Column2")
in
    Custom2


Третий вариант, подозреваю, эквивалентен чему-то вроде такого:
Код
Table.FromRecords(List.Combine(List.Transform(table[column], Table.ToRecords)))

что тоже не выглядит супер-эффективным (хотя из-за наличия второго аргумента - списка столбцов - в Table.Combine я думаю всё еще навороченнее)
F1 творит чудеса
Power Pivot подсчет количества чеков по условию
 
Lari, ну тогда для полного погружения еще и вот это
F1 творит чудеса
Выгрузка\вывод не совпадающих данных в PQ, Необходимо в PQ вывести в разделе слияние не совпадающие по определенных столбцам значения
 
Создать дубликат столбца1.
Удалить столбец2.
Переименовать дубликат в столбец1
F1 творит чудеса
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 131 След.
Наверх