Страницы: 1
RSS
[Power Query] Отфильтровать null значения в Record
 
Добрый день! Подскажите пожалуйста как в Power Query удалить из Record записи с null значениями?
 
например так
Код
    del = Table.TransformColumns(
        deleteColumns, 
        {"properties", 
        (x) => 
            Record.FromTable(
                Table.SelectRows(
                    Table.FromColumns(
                        {Record.FieldValues(x), Record.FieldNames(x)},
                        {"Value", "Name"}
                    ),
                    (w) => not Value.Is(w[Value], Null.Type)
                )
            )
        }
    )
Пришелец-прораб.
 
Спасибо!
 
AlienSx, а можно ли создавая Records на шаге addProp сразу "отсеивать" нулевые значения?
Сам - пробовал, получилось не очень
Код
addProp = Table.AddColumn(source, "properties", each Table.SelectRows(Record.ToTable( [[Пол], [Возраст], [Должность], [Оклад]] ), (w) => not Value.Is(w[Value], Null.Type)))


таблицы в рекорды не обворачивал, потому что вроде уже и так неправильно ))
плюс наверняка дальше предполагаются ещё шаги
Изменено: nilske - 15.02.2024 14:03:42
 
Цитата
nilske написал:
можно ли
можно. У меня вот такой вариант получился
Код
let
    source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    nms = Table.ColumnNames(source),
    f = (lst as list, names as list) => 
        [pozz = List.PositionOf(lst, true, Occurrence.All, (x, y) => x <> null),
        recs = Record.FromList(
            List.RemoveNulls(lst),
            List.Transform(pozz, (x) => names{x})
        )][recs],
    add_Prop = Table.AddColumn(source, "properties", (x) => f(Record.FieldValues(x), nms))
in
    add_Prop
Пришелец-прораб.
 
Цитата
nilske написал:
можно ли создавая Records на шаге addProp сразу "отсеивать" нулевые значения?
вроде можно)
Код
addProp = Table.AddColumn(source, "properties", (x)=>[z1 = Record.ToList(x),
                                                    z2 = {0}&List.PositionOf(z1, null, Occurrence.All),
                                                    z3 = Record.RemoveFields(x, List.Transform(z2, (y)=>Table.ColumnNames(source){y}))][z3])
 
нет предела совершенству

Код
let
    source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    filterRecord = (rs as record, conditions as list) as list => 
            List.Transform(
                 List.Select(
                      List.Zip({Record.FieldNames(rs), Record.FieldValues(rs)}),
                            each not List.Contains(conditions, _{1})),
                                each _{0}),
    addProp = Table.AddColumn(source, "properties", (x) => Record.SelectFields(x, filterRecord(x, {null}))),
    deleted = Table.SelectColumns(addProp,{"properties"})
in
    deleted
Изменено: nilske - 15.02.2024 16:35:16 (вот теперь отлично ))
Страницы: 1
Наверх