提取分隔符之间的多个值

时间:2021-07-01 12:11:28

标签: powerquery m

我有一列包含一个活动的已处理数据元素的值,如下所示:

<块引用>

[数据主体:信息类型]数据元素

因此,如果信息类型或数据主体不同,则将其写为单独的数据段,以分号作为分隔符。

我需要从一个单元格(一组值)中提取数据主体的所有唯一值(在“[”和“:”之间)和信息类型(在“:”和“]”之间)。信息类型应该用换行符分隔(无法在此表中显示所以我会写(换行符))

<头>
数据主体和个人数据 数据将由 Atos 处理的人员类别(预期结果) 处理的个人数据类别(预期结果)
[(新/前)员工:联系信息] 电话号码、个人邮箱、家庭住址、联系方式、专业邮箱、紧急联系方式; [(新/离职)员工:就业信息] 劳动力管理详情、合同详情 (新/离职)员工 联系信息(换行)就业信息
【业务合作伙伴:联系方式】专业邮箱; [商业伙伴:个人身份证明]姓,名; 【客户/客户:联系方式】专业邮箱; 【访客:健康资讯】血型 商业伙伴;客户/客户;访客 联系信息(换行)个人身份(换行)健康信息

1 个答案:

答案 0 :(得分:0)

这是进行转换的 M 代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Custom" = Table.AddColumn(Source, "newCol", each [#"Data Subjects & Personal Data"]),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Added Custom", {{"newCol", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "newCol"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"newCol", type text}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type1", "persons", each Text.Replace( Text.Split( Text.Trim([newCol]),":"){0},"[","")),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "data", each Text.Trim( Text.Split( Text.Split([newCol],":"){1},"]"){0})),
    PersonalCategory = Table.Distinct( Table.SelectColumns(#"Added Custom2",{"Data Subjects & Personal Data","persons"})),
    PersonalCombined = Table.Group(PersonalCategory,"Data Subjects & Personal Data",{"Personal Category",each Text.Combine([persons],"; ")}),
    DataCategory = Table.Distinct( Table.SelectColumns(#"Added Custom2",{"Data Subjects & Personal Data","data"})),
    DataCombined = Table.Group(DataCategory,"Data Subjects & Personal Data",{"Data Category",each Text.Combine([data],Character.FromNumber(10))}),
    withPersonal = Table.NestedJoin(Source,{"Data Subjects & Personal Data"},PersonalCombined,{"Data Subjects & Personal Data"}, "personal",JoinKind.LeftOuter),
    PersonalExpanded = Table.ExpandTableColumn(withPersonal, "personal",{"Personal Category"}),
    withData = Table.NestedJoin(PersonalExpanded,{"Data Subjects & Personal Data"},DataCombined,{"Data Subjects & Personal Data"},"data",JoinKind.LeftOuter),
    #"Expanded data" = Table.ExpandTableColumn(withData, "data", {"Data Category"}, {"Data Category"})
in
    #"Expanded data"

enter image description here