Страницы: 1
RSS
Аналог функции ЕСЛИ в PowerQuery, Проверка значения поля на соответствие условиям в Power Query
 
И снова доброго времени суток, Планетяне!
Обыскался в интернете, но ничего даже похожего не нашёл. Вот есть у меня 2 поля в PQ: Проверка документа и Проверка материала. Значение в них либо "ГОТОВО", либо пустая ячейка. На данный момент могу только проверить, что они оба равны =[Проверка документа]=[Проверка материала]. Если добавляю проверку на "готовность" (=[Проверка документа]=[Проверка материала]="ГОТОВО"), то уже ошибка.
А ведь есть более сложные варианты, когда нужно проверять попадает ли значение поля в диапазон и т.д. В Excel всё без проблем реализуется, но всё больше хочется "разгрузить" таблицы на листах, убрав многие пересчёты в PQ…
Изменено: Jack Famous - 13.12.2017 12:30:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Так а в PQ есть IF
К примеру в пользовательский столбец
Код
=if [Проверка документа] = [Проверка материала] then РЕЗУЛЬТАТ else РЕЗУЛЬТАТ
ИЛИ в редакторе
Код
Table.AddColumn(ВЕРХНИЙ ШАГ, "НВОЫЙ СТОЛБЕЦ", each if [Проверка документа] = [Проверка материала] then РЕЗУЛЬТАТ else РЕЗУЛЬТАТ)
Изменено: Илья Демид - 13.12.2017 12:38:56
 
Вот как вариант в пустой запрос
Код
let
    Источник = #table({"Проверка документа","Проверка материала"},{{"Готово",""},{"","Готово"},{"Готово","Готово"}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательская", each if [Проверка документа]="Готово" and [Проверка материала]="Готово" then "11" else if [Проверка документа]="Готово" and [Проверка материала]="" then "10" else if [Проверка документа]="" and [Проверка материала]="Готово" then "01" else "ERROR")
in
    #"Добавлен пользовательский объект"
Ну или так
Код
=if [Проверка документа]=[Проверка материала] and [Проверка документа]="Готово" then "11" else "KY-KY"
Изменено: Илья Демид - 13.12.2017 12:51:54
 
Илья Демид, попробовал так для моего случая: =if [Проверка документа] = [Проверка материала] = "ГОТОВО" then 1 else 0 — ошибки нет, но везде 0, хотя должно быть почти везде 1  :(
и как, в таком случае, использовать вложенные проверки? Через ElseIf, как в VBA?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
выше дополнил, надо использовать and
Код
=if [Проверка документа]=[Проверка материала] and [Проверка документа]="Готово" then "11" else "KY-KY"
 
Цитата
Jack Famous написал:
[Проверка документа] = [Проверка материала] = "ГОТОВО"
В Excel так тоже не работает (точнее, если ввести в ячейку =3=3=3, то будет ЛОЖЬ) :)
Может всё же стоит скачать и прочитать спецификацию языка? Там же базовые конструкции прописаны и с примерами.
Изменено: Андрей VG - 13.12.2017 12:56:42
 
Илья Демид, всё получилось! Спасибо вам большое!
А можно один пример для пользовательского столбца с вложенными условиями - а то я пока капец как неуверенно себя чувствую в расширенном редакторе?)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Андрей VG, ну запутался я  :D ваша правда)))
Цитата
Андрей VG написал:
Может всё же стоит скачать и прочитать  спецификацию языка ?
так я смотрел (только ваш файл, а не спецификацию) и не нашёл ничего по фильтру If)))
Изменено: Jack Famous - 13.12.2017 13:01:31
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Во вложении пример
 
Илья Демид, кажется разобрался на вашем примере)))) просто же всё оказалось - только запутался  :D
Илья Демид, Андрей VG, спасибо вам большое!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Помогите пожалуйста исправить ошибку в PQ
Не получается дополнить третье условие, не знаю куда вставить and чтобы не ругалось
Код
= if [Время]=#time(10,0,0) or [Цена]=[Ценапред] or [Объем]>[Объем день]*0.05 and ([Цена]-[Ценапред])/[Ценапред]<0,01 then 0 else 1
Изменено: abutov - 20.06.2020 22:27:20
 
А на что ругается?
F1 творит чудеса
 
В 0,01 должна быть точка вместо запятой
Надеюсь только в этом была ошибка
 
Цитата
Максим Зеленский написал:
А на что ругается?
добрый день, не ругается, а просто не отрабатывает условие с or/and:

Table.AddColumn(#"Добавлен пользовательский объект2", "Пользовательский", each if [stock] <= 90 then 0 else if [stock] > 90 or [stock] <= 180 then "90-180" else if [stock] > 180 or [stock_days in the end Q] <= 270 then "180-270" else if [stock] > 270 or [stock] <= 360 then "270-360" else ">360")

в результате только 2 разбивки "0" и "90-180", хотя должны быть все группировки так как в условном столбце числа от 1 до 2220
 
Доброе вр
Цитата
Anatoliy_N написал:
"0" и "90-180",
Вполне естественно
Цитата
Anatoliy_N написал:
if [stock] > 90 or [stock] <= 180 then "90-180"
100 больше 90, да, а то что больше 180 для or уже не имеет значение. :)
 
В общем, or надо позаменять на and, и расставить скобочки для верности :)
F1 творит чудеса
 
Anatoliy_N,

Если нужно разбить со стандартным шагом (в вашем случае 90)

Код
(numeric as number, step as number, optional min as number, optional max as number) =>
let
    choice = { numeric <= min, numeric > max, numeric = 0, Logical.FromText("true") },
    position = List.PositionOf(choice, Logical.FromText("true") ),
    Left = Number.RoundDown (numeric/ step) * step,
    Right = Number.RoundUp (numeric / step) * step,
    LeftReturn = if Left = Right then Right - step else Left,
    Return = Text.From(LeftReturn) & " - " & Text.From(Right)
in
    { "<= "& Text.From(min), "> "& Text.From(max), "0 - " & Text.From(step), Return}{position}
Страницы: 1
Наверх