我正在处理来自 Microsoft Form 的数据表。 有些问题允许多个答案,这些答案全部保存为单列中以分号分隔的值。 假设问题有红色、绿色、蓝色和其他(自由文本)选项,示例可能如下所示:
ID Colors
1 Red;
2 Green;yellow-orange;
3 Red;Blue;
4 purple;
5 Red;gold;
到目前为止,我已经能够使用像这样创建的添加列来处理预定义的答案:
Red = IF(CONTAINSSTRING([Colors],"Red;"),1,0)
这使我能够对每个答案进行求和、计数等。 但是,我正在努力找出如何最好地处理“其他”类别中的自由格式文本。 现在,我想出了以下公式来仅输出“其他”类别:
Other Text = SUBSTITUTE(SUBSTITUTE(SUBSTITUTE([Colors],"Red;",""),"Green;",""),"Blue;","")
这可以单独输出其他文本,但该公式已经很笨拙,只有几个预定义的答案。 需要对 10 多个答案执行此操作(我预计会发生)的可能性令人望而生畏。 有没有更直接或更简洁的方法来实现相同的输出?
这是一个数据重组问题。您需要在 Power Query 中重塑数据。例如
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUQpKTbFWitWJVjICctyLUlPzrCtTc3Lyy3XzixLz0lMhksZQlU45pVARE6BIQWlRQQ6UbwpVkZ6fAzIwFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Colors = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Colors", type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Colors", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Colors"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Colors", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type1", each [Colors] <> null and [Colors] <> "")
in
#"Filtered Rows"
现在您可以轻松地计算颜色或其他颜色,如下所示: