如何在 Excel 中将模式不一致的数据分离为结构化格式

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

单元格中的值不一致

我正在使用一个数据集,其中单元格中的多个值被标记在位置、主机、访客和存储桶等类别下,并用换行符分隔。我需要根据标签将它们分成单独的列,但值不一致,因此通过换行符分隔会创建许多不需要的列。此外,我需要将多个访客和存储桶合并到每个类别的单列中。

列标题建议我在单独的列中需要的值,但并非所有标题都是必需的,因为某些列大部分为空。它们有数百个,所以我无法手动完成。

突出显示的蓝色和灰色是此列中的单元格类型,值由换行符分隔
Highlighted blue and grey are the kind of cells in this column, values are seperated by line break

使用了分隔符

当我使用分隔符分隔数据时,它对于“位置”和“主机”列效果很好,因为它们在整个列中都很相似,但其他值(例如“访客”和“存储桶”)在单元格之间不一致,因此它们在之后会溢出到不同的列中分离。当尝试正确构建数据时,这会导致问题。

enter image description here

我已经清理了大部分数据集,但我仍然不知道如何处理这些不一致的模式。我花了几个小时试图弄清楚,尝试使用不同的公式,如 textsplit、wrapcols、wraprows 等,但无济于事。我很沮丧请帮忙。

您能建议解决这个问题的最佳方法吗?任何意见或建议将不胜感激!

excel powerquery data-cleaning dataformat data-transform
1个回答
0
投票

我不清楚您的需求,但看看以下内容是否能让您到达您想要的位置。

假设起始表为:

活动 您的专栏
阿尔法 位置:LocAlpha
主机:HstAlpha1
主机:HstAlpha2
访客:GstAlpha1
访客:GstAlpha2
访客:GstAlpha3
音乐访客:MGAlpha1
音乐访客:MGAlpha2
安全:SecAlpha1
存储桶:BktAlpha1
存储桶:BktAlpha2
存储桶:B kt阿尔法3
桶:BktAlpha4
常规:RegAlpha1
常规:RegAlpha2
测试版 位置:LocBeta
主持人:HstBeta1
主持人:HstBeta2
客人:GstBeta1
客人:GstBeta2
客人:GstBeta3
音乐客人:MGBeta1
音乐客人:MGBeta2
安全:SecBeta1
存储桶:BktBeta1
BktBeta 2
桶:BktBeta3
存储桶:BktBeta4
常规:RegBeta1
常规:RegBeta2
查理 位置:LocCharlie
主机:HstCharlie1
主机:HstCharlie2
客人:GstCharlie1
音乐客人:MGCharlie1
安全:SecCharlie1
存储桶:BktCharlie1
存储桶:BktCharlie2
常规:RegCharlie1
常规:RegCharlie2

您可以执行以下步骤:

  1. 按换行符拆分列
    Split by Delimiter to rows
  2. 再次拆分列,但现在按
    : 

    拆分为列 Split by Delimiter to columns
  3. 可选:修剪值
  4. 分组并合并值 Group by
    然后您需要更新公式栏,替换:
List.Sum([Value])

Text.Combine([Value], ", ")
  1. 在类别列上旋转
    Pivot

给您以下结果表:

活动 地点 主持人 嘉宾 音乐嘉宾 安全 常规
阿尔法 LocAlpha HstAlpha1、HstAlpha2 GstAlpha1、GstAlpha2、GstAlpha3 MGAlpha1、MGAlpha2 SecAlpha1 BktAlpha1、BktAlpha2、BktAlpha3、BktAlpha4 RegAlpha1、RegAlpha2
测试版 LocBeta HstBeta1、HstBeta2 GstBeta1、GstBeta2、GstBeta3 MGBeta1、MGBeta2 SecBeta1 BktBeta1、BktBeta2、BktBeta3、BktBeta4 RegBeta1、RegBeta2
查理 洛克查理 HstCharlie1,HstCharlie2 GstCharlie1 MG查理1 第二查理1 Bkt查理1,Bkt查理2 RegCharlie1、RegCharlie2

全电量查询:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Event", type text}, {"Your Column", type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Your Column", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Your Column"),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "Your Column", Splitter.SplitTextByDelimiter(": ", QuoteStyle.Csv), {"Category", "Value"}),
    #"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter1",{{"Value", Text.Trim, type text}}),
    #"Grouped Rows" = Table.Group(#"Trimmed Text", {"Event", "Category"}, {{"Values", each Text.Combine([Value], ", "), type nullable text}}),
    #"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[Category]), "Category", "Values")
in
    #"Pivoted Column"
© www.soinside.com 2019 - 2024. All rights reserved.