2016-04-11 63 views
0

我需要採取以下(CSV):重新組織數據的Excel

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開頭的每一行都是交換機堆棧中的主節點。以空白開始的行是該堆棧中的交換機。我需要將堆棧中的交換機(包括主交換機)的信息放在與主服務器信息連續的列註釋中的單個單元中。 我可以創建一個Excel公式以填補缺失的項目,它看起來像:

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

這很好,但還是給我留下了格式錯誤仍然刪除線和數據。這感覺就像是錯誤的路要走。另外,我正在尋找更自動的數據處理方式。 我希望能夠採取CSV,打開[東西],刷新,以圖片等格式導出新的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」 做得好亞歷!

+0

您可以使用該解決方案找到[這裏](http://stackoverflow.com/questions/29440349/aggregate-collat​​e-and-transpose-rows-into-列/ 29441346#29441346)並使用'Chr(10)'分隔* notes *列。 – Jeeped

回答

0

這裏有一個潛在的解決方案:

  1. 您生成可以是列的組合,再加上一個換行符的結果。它看起來像這樣自定義列公式:

    Text.Combine({[first column], [second column], "#(000D)#(000A)"}) 
    
  2. 向下填充在哪個列您想組的值。您可以通過轉換選項卡並選擇填充|來填寫功率查詢中的值下。

  3. 做一個組。界面不允許您通過添加文本列進行分組,因此您可能需要將其作爲單獨的步驟添加(單擊fx按鈕將創建一個新步驟)。它會是這個樣子:

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

當提供的解決方案非常特定於版本(在問題中沒有任何特定於版本的標籤)時,通常認爲包含注意事項或免責聲明的「良好形式」。 – Jeeped

+0

幹得好! (在text.combine部分中最初使用的引號,但現在全部排序) –