删除 Power BI 表中的多个预定义字符串,仅保留自由格式文本

问题描述 投票:0回答:1

我正在处理来自 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 多个答案执行此操作(我预计会发生)的可能性令人望而生畏。 有没有更直接或更简洁的方法来实现相同的输出?

powerbi dax powerquery powerbi-desktop m
1个回答
0
投票

这是一个数据重组问题。您需要在 Power Query 中重塑数据。例如

enter image description here

enter image description here

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"

enter image description here

现在您可以轻松地计算颜色或其他颜色,如下所示:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.