Есть запрос к 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"?
Ошибка в вашей функции скорее всего... что такое NN? Что возвращает эта функция - true/false? Проверьте, соответствует ли функция синтаксису Table.SelectRows
Обратите внимание, на то как в примере к описанию функции Expression.Evaluate обозначаются текстовые значения внутри текста, который она должна преобразовывать. Там используются двойные кавычки. т.е. на выходе DenOLAP должно быть что-то вроде:
Код
"Cube.AttributeMemberId([Период.День месяца]) = ""[Periods].[Period Day].&[1]"" meta [DisplayName = ""1""] or и т.д."
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"])),
с месяцами и годами, главное, все просто, но тут из-за перечисления вся логика ломается