Страницы: 1
RSS
Использование функции List.First (Last) с условиями, Power Query
 
Здравствуйте, товарищи.
Помогите с вопросом следующего плана.
В PQ формируется запрос. Данные сгруппированы. Хочу вытащить из сгруппированной таблицы некоторые значения (первое и последнее встречающееся).
Конечно, может не оптимально все это делаю, но уж на что ума хватает, так сказать.
Одиночные значения вытаскиваются без проблем. А вот с условием "если так, то брать из одного столбца, если не так, то из другого"... Возможно в синтаксисе напутал.
выдает:"Не удается преобразовать значение типа Function в тип Logical" - может для кого это и подсказка, но не для меня. (
В файле - "запрос1" я в нем закомментировал свою формулу.
Если всё же так не получится как я хочу - то подскажите, как тогда вытащить значения по условию первое и последнее встречающееся.
 
 
Доброе время суток
Конструкция each _ в Power Query аналог в VBA
Код
For each _ In List
    'Чт-то делаем с _
Next
. Поэтому не нужно вставлять each там где не нужно. Если _ не скалярное значение, то в Power Query его можно опустить, хотя полная запись выглядит List.First(_[параметры][ОстатокGPS])
Почитайте спецификацию языка, коль приходится отходить от правильного мышиного хардкода, она полезная.
 
Цитата
Андрей VG написал:
мышиного хардкода
Опять это слово.:)
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Использовал такую конструкцию
Код
ОстатокНаКонец = Table.AddColumn(ОстатокНаНачало, "Остаток на конец", each List.Last([параметры][Остаток1GPS])),
То есть просто выбирать последнее значение из списка без всяких ухищрений. Иногда возникает ситуация когда последнего значения нет -null, зато
есть предыдущее и далее. Моя формула выбирает, естественно последнее, null. Можно ли добавить формулу чем-то типа:
Код
Table.AddColumn(ОстатокНаНачало, "Остаток на конец", each List.Last(([параметры][Остаток1GPS]),each List.Select([параметры][Остаток1GPS]>0)))
Думал будет выбирать последнее из тех, которые больше ноля. Но все равно берет просто последнее значение в списке.
Подскажите, как правильно прописать, чтобы брал последнее больше ноля, то есть перебирал с конца до первого попавшегося положительного числа?
 
Вариант
Код
let
    Source = {1, -3, 4, null, -3, 0, null, -1},
    test = List.Accumulate(List.Reverse(Source), null, (cum, item) => if cum <> null then cum else if item is null then null else if item > 0 then item else null)
in
    test

Цитата
Александр написал:
Опять это слово
Забавно :)
 
Андрей, а зачем так сурово? Почему нельзя так?
Код
let
    Source = {1, -3, 4, null, -3, 0, null, -1},
    test = List.Last( List.Select( List.RemoveNulls(Source), each _>0 ) )
in
    test
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
а зачем так сурово? Почему нельзя так?
Да почему нельзя, можно, только, а как позапутывать (что - это только ТСам можно?), а как тогда повыпендриваться? :)
 
PooHkrd, не подскажете. по вашей формуле
Код
=Table.AddColumn(предыдущий шаг, "новый столбец", List.Last( List.Select(List.RemoveNulls([назв. столбца группировки][назв. вложенного столбца]), each _>0)))
пишет "Неизвестный идентификатор. Использовалось ли условное обозначение [field] для _[field] вне выражения "each"?"
В чем у меня ошибка?
Извините, нашел ошибку, вопрос снимается. Оставляю вдруг кому понадобиться
Код
=Table.AddColumn(предыдущий шаг, "новый столбец", each List.Last( List.Select(List.RemoveNulls([назв. столбца группировки][назв. вложенного столбца]), each _>0)))
Изменено: игорь сергеев - 13.09.2018 06:04:10
 
Андрей VG ваш вариант работает, спасибо. С реверс и без, то есть с начала и конца. )
PooHkrd, спасибо за более понятный вариант. Я уж правда чуть-чуть начал List.Accumulate понимать с его state и current )
Оба варианта применил - оба работают. Спасибо большое ребята.
Страницы: 1
Наверх