Страницы: 1
RSS
Функция для условия фильтрации строк в Power query
 
Добрый день!

Есть запрос к OLAP кубу, в определенном шаге фильтруются нужные дни. Код шага ниже (в фильтре указано 3 дня):
Код
#"Строки с примененным фильтром5" = Table.SelectRows(#"Добавленные элементы4", each (Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[1]" meta [DisplayName = "1"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[2]" meta [DisplayName = "2"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[3]" meta [DisplayName = "3"])),
Кол-во дней в месяце - это переменная величина, и проблема в том, что на каждый выбранный вручную день, редактор добавляет код :
Код
' or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[2]" meta [DisplayName = "2"]
а дни будут задаваться переменной.

Написали функцию DenOLAP(NN), которая на основе кол-ва дней генерирует текстовый код типа, указанного выше. Чтобы редактор понимал текст формулы, использовали функцию Expression.Evaluate.
Код
#"Строки с примененным фильтром5" = Table.SelectRows(#"Добавленные элементы4", each (Expression.Evaluate(DenOLAP(NN), #shared))),
Редактор выдает ошибку

Expression.Error: Неизвестный идентификатор. Использовалось ли условное обозначение [field] для _[field] вне выражения "each"?

Где ошибка?

Заранее, благодарен!
Изменено: spryte - 04.10.2018 11:51:16
 
Ошибка в вашей функции скорее всего... что такое NN? Что возвращает эта функция - true/false?
Проверьте, соответствует ли функция синтаксису Table.SelectRows
F1 творит чудеса
 
NN это переменная - количество дней. Функция DenOLAP(5) возвращает текст
Код
'Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[1]" meta [DisplayName = "1"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[2]" meta [DisplayName = "2"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[3]" meta [DisplayName = "3"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[4]" meta [DisplayName = "4"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[5]" meta [DisplayName = "5"]
Для проверки синтаксиса копировали вместо Expression.Evaluate(DenOLAP(NN), #shared) этот текст, все отрабатывает.
 
Обратите внимание, на то как в примере к описанию функции Expression.Evaluate обозначаются текстовые значения внутри текста, который она должна преобразовывать. Там используются двойные кавычки.
т.е. на выходе DenOLAP должно быть что-то вроде:
Код
"Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[1]"" meta [DisplayName = ""1""] or и т.д."

Не уверен что поможет, но мало ли?
Вот горшок пустой, он предмет простой...
 
Выдает ошибку

Expression.Error: [1,59-1,60] Ожидался токен Eof.
Сведения:
List

при вставке
Код
'Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[1]"" meta [DisplayName = ""1""] or Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[2]"" meta [DisplayName = ""2""] or Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[3]"" meta [DisplayName = ""3""] or Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[4]"" meta [DisplayName = ""4""] or Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[5]"" meta [DisplayName = ""5""]
 
Цитата
spryte написал:
[field] для _[field] вне выражения "each"?
Вообще суть ошибки в том, что PQ считает что ему для оператора each вместо значения какого-то столбца в текущей строке подсунули все значения этого столбца целиком.
Вот горшок пустой, он предмет простой...
 
Ох, что-то в тупике я:( Может быть вообще кто-то сталкивался с подобной задачей и есть какой то альтернативный вариант замены выражения (в данном выражении в фильтре указаны 1,2 и 3 дни месяца)
Код
#"Строки с примененным фильтром6" = Table.SelectRows(#"Добавленные элементы4", each (Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[1]" meta [DisplayName = "1"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[2]" meta [DisplayName = "2"] or Cube.AttributeMemberId([Период.День месяца]) = "[Periods].[Period Day].&[3]" meta [DisplayName = "3"])),
с месяцами и годами, главное, все просто, но тут из-за перечисления вся логика ломается
 
spryte, а не проще отправлять запрос MDX и получать уже отфильтрованные данные, чем фильтровать их в PowerQuery?
Страницы: 1
Наверх