Я работаю в Power BI и имею набор данных со столбцами, содержащими «Y», «N» или «NA». Здесь более 100 столбцов, поэтому я стараюсь не создавать оператор if для каждого столбца. Есть ли способ подсчитать количество букв «Y» в каждой строке для каждого столбца? На примере я мог бы сделать это и для буквы «N». Заранее спасибо. Результатом будет новый столбец, в котором будут подсчитаны все буквы «Y» в других столбцах. Вот что получается в Excel (но на самом деле у меня более 100 столбцов/вопросов):
Спасибо за ответ. Я поместил вывод в вопрос. Надеюсь, это поможет!
Я попробовал с этим набором данных:
Я пошел в «Преобразовать данные» -> «Добавить столбец» -> «Пользовательский столбец».
Я использовал этот код:
let
columnNames = Table.ColumnNames(#"Source"),
customColumn = Table.AddColumn(#"Source", "Count of Y", each List.Sum(List.Transform(columnNames, (col) => if Record.Field(_, col) = "Y" then 1 else 0)))
in
customColumn
Замените #"Source" на предыдущий шаг процесса Power Query. Вы также можете изменить «Количество Y» на желаемое новое имя столбца.
Мой результат был:
Ваш результат - это именно то, что я ищу. Когда я использую код, он появляется в виде нового столбца с надписью «таблица» в ячейках, а затем, если я выпадаю оттуда, он дает мне все столбцы в качестве опции, включая новый столбец «Количество Y». Извините, что не позволяет мне добавить скриншот. Происходит то же самое, что и при использовании «запросов на слияние». Я уверен, что сделал что-то не так, но не знаю, что именно.
Это измененный код, который я вставил, когда перешел к настраиваемому столбцу: Это код, который я использовал с измененным исходным кодом. let columnsNames = Table.ColumnNames(#"Замененное значение3"), customColumn = Table.AddColumn(#"Замененное значение3", "Количество Y", каждый List.Sum(List.Transform(columnNames, (col) => if Record .Field(_, col) = "Y", затем 1, иначе 0))) в customColumn
Очень хорошее решение
Всем, кому нужно использовать код, мне пришлось щелкнуть ячейку с надписью «Таблица», чтобы получить результаты.
Да. Вам нужно нажать «Таблица», и она появится автоматически. Забыл упомянуть об этом в комментарии.
Связанная альтернатива
Добавить столбец.. пользовательский столбец... с
= List.Sum(List.Transform(Record.FieldValues(_), each if _ = "Y" then 1 else 0))
Чтобы создать все столбцы «результатов», мы добавляем «запись», содержащую все столбцы результатов, а затем расширяем ее.
Начнем с таблицы, содержащей ТОЛЬКО столбцы с вопросами:
вы можете использовать этот код, вставленный в расширенный редактор:
let
//Change Source line to reflect your actual data source
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WilTSAWM/RwgRqxOt5AfngyVjYwE = ", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Question 1" = _t, #"Question 2" = _t, #"Question 3" = _t, #"Question 4" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source, List.Transform(Table.ColumnNames(Source), each {_, type text})),
#"Add Results" = Table.AddColumn(#"Changed Type", "Results", (r)=>
let
Ycount=List.Count(List.Select(Record.FieldValues(r), each _ = "Y")),
Ncount=List.Count(List.Select(Record.FieldValues(r), each _ = "N")),
TotalQ = Ycount+Ncount,
Passed = Ycount/TotalQ
in
[YES=Ycount, NO=Ncount, TOTAL Qs=TotalQ, #"% of audit passed = "=Passed],
type[YES=Int64.Type, NO=Int64.Type, TOTAL Qs=Int64.Type, #"% of audit passed = "=Percentage.Type]
),
#"Expanded Results" = Table.ExpandRecordColumn(#"Add Results", "Results", {"YES", "NO", "TOTAL Qs", "% of audit passed = "})
in
#"Expanded Results"
Результаты:
Примеры данных и ожидаемый результат, пожалуйста.