重组数据Excel

时间:2016-04-11 21:10:24

标签: excel csv powerpivot powerquery

我需要采取以下(CSV):

deviceId,ip,mac,serial,version,platform,vtpDomain,stack num, stack ports, stack model, stack version, stack image, stack MAC, stack Serial    AA_MDF_2960X_2,10.10.10.10,abab.abab.abab, 123123123,15.0(2a)EX5,cisco WS-C2960X-48FPS-L,'AAHS',,,,,,,
,,,,,,,1,52,WS-C2960X-48FPD-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,2,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,3,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,*4,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
AA_MDF_2960X_2,10.10.10.10,abab.abab.abab, 123123123,15.0(2a)EX5,cisco WS-C2960X-48FPS-L,'AAES',,,,,,,
,,,,,,,1,52,WS-C2960X-48FPD-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,2,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,3,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123
,,,,,,,*4,52,WS-C2960X-48FPS-L,15.0(2a)EX5,C2960X-UNIVERSALK9-M,abab.abab.abab, 123123123

看起来像:

Excel CSV Ready for import

列类有重复的信息。交换机堆栈中的每个主站都有名称,IP,MAC,序列号,版本,型号,位置。我的示例中显示了两个主控,每个堆栈一个。显示堆栈中每个交换机(包括主站)的相同信息。此外,还有表示堆栈中位置的数字(以及显示主站的' *'),交换机端口和堆栈映像。 以Name开头的每一行都是交换机堆栈中的主服务器。以空格开头的行是该堆栈中的开关。我需要有关堆栈中的交换机(包括主机)的信息,这些信息放在具有Master信息的行中的单个单元格中。  我可以创建一个excel公式来填充缺少的项目,它看起来像:

(In R123)=if(A123="",R122,A123)

哪个好,但仍然让我删除行,数据仍然是错误的格式。这感觉就像走错了路。此外,我正在寻找一种更自动化的处理方式是数据。 我希望能够采用CSV,打开[Something],刷新,以图片的格式导出新的CSV。 我可以使用power query,Excel或Power Pivot来关闭。 使用Power Query,我可以添加索引列。然后我可以添加一个自定义列来检查第一列是否为空并返回结果。我不知道如何制作Power Query参考"上面的单元格"当列是空白时。

即使建议如何对此问题进行说明以获得有用的Google搜索结果也会有所帮助。凌乱的数据,Power Query数据重新格式化等都太模糊了。

任何人都可以告诉我在引用这两种数据时使用的术语是什么?我认为后者可能是表格式的,绝对不是规范化的。

编辑:我在CSV示例中添加了标题。

我现在在电源查询中使用以下内容:

let
    Source = Csv.Document(File.Contents("C:\rawdata.csv"),[Delimiter=",", Columns=17, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source),
    #"Removed Columns" = Table.RemoveColumns(#"Promoted Headers",{"mac", "serial", "platform"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Notes_StepOne", each Text.Combine({[stack num],[#" stack model"],[#" stack version"],[#" stack image"],[#" stack MAC"],[#" stack Serial"] ,"#(000D)#(000A)"})),
    #"Replaced Value" = Table.ReplaceValue(#"Added Custom","",null,Replacer.ReplaceValue,{"deviceId", "ip", "version", "vtpDomain"}),
    #"Filled Down" = Table.FillDown(#"Replaced Value",{"deviceId", "ip", "version", "vtpDomain"}),
    #"Group By" = Table.Group(#"Filled Down", {"deviceId", "ip", "version", "vtpDomain"}, {{"notes", each Text.Combine([Notes_StepOne]), type text}})
in
    #"Group By"

编辑:用括号括号替换引号" Notes_StepOne" 做得好的亚历杭德罗!

1 个答案:

答案 0 :(得分:0)

这是一个潜在的解决方案:

  1. 您生成的结果可以是列的组合,也可以是换行符。对于自定义列公式,它看起来像这样:

    Text.Combine({[first column], [second column], "#(000D)#(000A)"})
    
  2. 在您要分组的列中填写值。您可以通过转到“变换”选项卡并选择“填充”来填充Power Query中的值下来。

  3. 做一个分组依据。用户界面不允许您通过将文本列添加到一起进行分组,因此您可能希望将其添加为单独的步骤(单击fx按钮将创建新步骤)。它看起来像这样:

    = Table.Group(#"Filled Down", {"first column", "second column"}, {{"notes", each Text.Combine([custom column made in the first part]), type text}})