Вот упрощенный пример моей проблемы. Нужно получить значение-оценку, которая основывается на нескольких полях в строке. Эти n-полей будут собраны в список. Список будет использоваться два раза. Идея заключается в том, чтобы создать список 1 раз, использовать его два раза по переменной li, и сохранить только результирующее значение. Я могу решить проблему создав доп. столбец, где будет валяться этот список (шаг добавитьСписок). Затем добавить колонку с результатом (шаг попытка2). Затем удалить колонку со списками. Но может-быть кто-нибудь знает, как объявить и создать его прямо внутри шага вычисления результата (как в шаг итогОценка)?
Код
let
// как буд-то 1 строчка таблицы
Источник = Table.FromRecords ( { [ A = 1, B = 1, C = 1, D = - 2, E = 1 ] } ),
// чтобы работало нужны значения-цифры
#"Измененный тип" = Table.TransformColumnTypes (
Источник,
{
{ "A", Int64.Type },
{ "B", Int64.Type },
{ "C", Int64.Type },
{ "D", Int64.Type },
{ "E", Int64.Type }
}
),
// добавляю колонку, в которой храню списки
добавитьСписок = Table.AddColumn ( #"Измененный тип", "list", each { [A], [B], [C], [D], [E] } ),
// потыка 1 угадать синтаксис - неуспешная
итогОценка = Table.AddColumn (
добавитьСписок,
"оценка",
let
li = { [A], [B], [C], [D], [E] }
in
each
if List.MatchesAll ( li, each _ = - 2 ) then
"искл"
else if List.MatchesAny ( li, each _ = 1 or _ = 4 ) then
"проблема"
else
"ок",
type number
),
// вот так работает как задуманно, но используется нежелательный столбец [list]
попытка2 = Table.AddColumn (
добавитьСписок,
"оценка",
each
if List.MatchesAll ( [list], each _ = - 2 ) then
"искл"
else if List.MatchesAny ( [list], each _ = 1 or _ = 4 ) then
"проблема"
else
"ок",
type text
)
in
попытка2
// потыка 2 угадать синтаксис - успешная
итогОценка = Table.AddColumn (
добавитьСписок,
"оценка",
each
let li = { [A], [B], [C], [D], [E] } in
if List.MatchesAll ( li, each _ = - 2 ) then
"искл"
else if List.MatchesAny ( li, each _ = 1 or _ = 4 ) then
"проблема"
else
"ок",
type number
),