Запрос мощности: есть ли способ получить среднее значение оценок каждого учащегося с несколькими оценками?

#powerquery

#powerquery

Вопрос:

У меня есть таблица с идентификаторами учащихся (1-11), и они повторяются 5 раз, каждый из учащихся имеет 5 оценок по 3 предметам. Мое задание — создать 3 новых столбца в таблице со средним значением каждого учащегося по этим 3 предметам. Моя проблема в том, что я не знаю, как это сделать, поскольку мой профессор попросил класс сделать это очень странным способом, что затрудняет понимание того, как это сделать.

введите описание изображения здесь

Как показано на рисунке, это довольно странная настройка для таблицы. Мой вопрос таков, как я описал его ранее. Мне нужно создать 3 новых столбца со средним значением каждого учащегося, их 5 оценок по каждому из предметов.

Комментарии:

1. Мне кажется, что вам нужна дополнительная таблица с groupby и join .

Ответ №1:

Вы можете сгруппировать копию таблицы по идентификатору, усреднить столбцы с оценками и объединить их с исходной таблицей.

 let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSAWNjpVgdCM8IiE3gPGMgNgXzjMAsHSULOM8MiC3hPHOQSQZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [id = _t, gradeA = _t, gradeB = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"id", Int64.Type}, {"gradeA", Int64.Type}, {"gradeB", Int64.Type}}),
    Buffer1 = Table.Buffer(#"Changed Type"),
    grouped = 
        let
            sourceGroup = Buffer1,
            grouped = Table.Group(sourceGroup,"id",{{"AVGgradeA", each List.Average([gradeA]), type nullable number}, {"AVGgradeB", each List.Average([gradeB]), type nullable number}})
        in
            grouped,
    #"join" = Table.Join(Buffer1,"id",grouped,"id")
in
    #"join"