Страницы: 1
RSS
Power Query – Подсчет возраста. РАЗНДАТ
 
Здравствуйте уважаемые знатоки Excel!
Прошу помочь рассчитать возраст в Power Query: Дата на сегодня – дата рождения
Нашла на форуме формулу DateTime.Date(DateTime.LocalNow())-[Дата рождения], у меня не получилось
Изменено: Валентина83 - 19.09.2020 18:30:29
 
Доброе время суток
Цитата
Валентина83 написал:
рассчитать возраст
По какой методике считается возраст?
 
Если опираться на инструменты PQ можно так:
Код
let
    from = Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="Параметры"]}[Content]{0}[Путь к исходным данным]), null, true),
    filtr = Table.SelectRows(from, each ([Kind] = "Sheet")),
    A1content = Table.AddColumn(filtr, "Содержимое A1", each [Data][Column1]{0}),
    filtr2 = Table.SelectRows(A1content, each Text.Contains([Содержимое A1], "Специальность - ")),
    select = Table.SelectColumns(filtr2,{"Name", "Data"}),
    transf = Table.TransformColumns(select,{{"Data", each Table.PromoteHeaders(Table.SelectRows(_, each ([Column2] <> null and [Column2] <> " " and [Column2] <> "академический отпуск" and [Column2] <> "ДПИ" and [Column2] <> "ДПИ " and [Column2] <> "ЖИВ")))}}),
    list = List.Select(List.Distinct(List.Combine(List.Transform(transf[Data],each Table.ColumnNames(_)))), each not Text.Contains(_,"Column")),
    expand = Table.ExpandTableColumn(transf, "Data", list),
    rename = Table.RenameColumns(expand,{{"Спец-ть", "Специальность"}, {"Name", "Группа"}}),
    typ = Table.TransformColumnTypes(rename,{{"Дата рождения", type date}}),
    age = Table.AddColumn(typ, "Возраст", each   (Duration.TotalDays(Date.From(DateTime.LocalNow()) - [Дата рождения])/ 365), type number),
    round = Table.TransformColumns(age,{{"Возраст", Number.RoundDown, Int64.Type}}),
    to = Table.SelectColumns(round,{"Ф.И.О.", "Курс", "Стастус", "Специальность", "Дата рождения", "Примечание", "Группа", "Возраст"})
in
    to

но нужно понимать, что переход к годам идет через деление на 365 с последующим округлением вниз
Изменено: buchlotnik - 24.08.2019 16:54:09
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, коллега, а вы уверены в методике?
Цитата
(Duration.TotalDays(Date.From(DateTime.LocalNow()) - [Дата рождения])/ 365)
Например, в поликлинике запрашивают возраст как число полных лет. Если вам завтра исполняется 60 лет, то сегодня у вас только 59 полных лет :)
 
Цитата
Андрей VG написал:
Если вам завтра
именно поэтому сделал оговорку
Цитата
buchlotnik написал:
опираться на инструменты PQ
- мышкой там годы вынимаются таким макаром, причем завтра, т.е. погрешность в один день - это для годовалого младенца, с возрастом погрешность, естественно, накапливается - для возраста 59 насчитает 60 всем с 25/08/1959 по 09/09/1959
Изменено: buchlotnik - 24.08.2019 17:06:54
Соблюдение правил форума не освобождает от модераторского произвола
 
Например: 24.08.2019-12.09.2002=16 лет; 24.11.2019-12.09.2002=17 лет
 
Добрый день
первое, что пришло в голову
Код
= Table.AddColumn(#"Измененный тип1", "Возраст", each let 
        age=(a,b)=>let 
            y=Date.Year(b)-Date.Year(a), 
            yd=Date.Month(b)-Date.Month(a),
            dd=Date.Day(b)-Date.Day(a)
        in y-(if yd>0 then 0 else if yd=0 then if dd>=0 then 0 else 1 else 1) 
    in age([Дата рождения],DateTime.Date(DateTime.LocalNow())), type number)
Изменено: Андрей Лящук - 24.08.2019 17:19:53
 
Подсмотрел у Джелена
Скрытый текст
Изменено: buchlotnik - 24.08.2019 17:22:08
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik СПАСИБО БОЛЬШОЕ!!!
 
buchlotnik,
Подскажите, пожалуйста, а что за [ActionDate]?
 
del
Изменено: buchlotnik - 23.08.2021 17:37:29
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх