什麼是 Python 中的自我:真實世界的例子
什麼是 Python 中的自我:真實世界的例子
Mudassir:今天,我們要解決一個非常有趣的問題。這個文件的問題是它是由列分隔的,我不知道如何使用 Microsoft Power Query 解決這個問題。您可以在本博客底部觀看本教程的完整視頻。
首先,動態刪除列對我來說並不容易。其次,在這份報告中,我們有一個列寬不同的表格,然後是另一個列寬不同的表格。
所以如果我在頂部動態應用一個分隔符,我將無法整齊地獲取數據。我想從第二個表中獲取所有這些數據,並從第一個表中獲取我的產品編號。我還想要所有表的每一行中的工作編號。
我試圖自己解決它,但由於這與電源查詢有關,我需要 Melissa 的幫助。我以為她至少需要兩天時間,但她馬上想出了解決辦法。
Melissa 將向我們展示她是如何解決這個複雜問題的。我認為大多數人都會處理這類問題,並且正在尋找解決這些問題的方法。
Melissa:第一個提示是,如果您正在查看固定長度的文件,您可以轉到“查看”選項卡並打開“等寬”選項。
我們可以看到它是一個定長字體。我們還可以看到標題、初始表和子表。這些是我們感興趣並希望從中提取的部分。
另外,請確保啟用了公式欄。在屏幕上顯示它總是一件好事,因為我們會經常使用它來對輸入進行細微修改。
我為存儲 CSV 文件的文件位置創建了一個參數。我將其作為暫存文件引入,並將其替換為我的文件位置參數。然後我創建了一個參考,我將從該參考開始工作。這就是我們現在在 Microsoft power query 中看到的內容。
目錄
添加索引列
通常,當我開始處理這樣的文件時,我需要了解客戶的要求。我問客戶需要什麼,要尋找什麼。
在這種情況下,我們需要標題中的項目編號和作業編號,然後我們需要屬於該特定標題的所有詳細信息。
我們需要一把鑰匙來把這些東西重新組合起來。但是如果沒有鍵,那麼我的做法是添加一個索引列。我將單擊迷你表圖標,選擇Add Index Column,然後添加From 0。
稍後我將對列表使用邏輯,它具有基於 0 的索引。讓你的索引從零開始實際上意味著你可以引用同一行。否則,您必須減去 1 才能到達基於 0 的位置。
然後,我們需要找到標題所在的位置,這很容易做到,因為這些標題在整個文件中不斷重複。
首先,讓我們複製這個值:
添加一個新的空白查詢,將其粘貼進去,並將其稱為HeaderID。
我將為子表執行相同的過程。我將復制該文本字符串,創建另一個空白查詢,然後粘貼該值。這將是我們在查找詳細行時將使用的字符串。
如果此過程以某種方式更改了任何這些表的標題,我所要做的就是更改其中一個文本字符串,文件將再次運行。
我真的不必深入研究 M 代碼來搜索我們正在尋找的字符串。我們可以將其用作參數。
讓我們為這兩個查詢啟用負載。
在 Microsoft Power Query 中創建緩衝區列表
我要做的第一件事是通過引用一次並將 Column1 加載到內存中,將它變成一個列表。這樣,我就不必重複調用該文件。
我將打開高級編輯器並將其一直放在頂部。當您使用用戶界面構建代碼時,它將引用上一步。
當您在代碼中的其他任何位置放置一個緩衝步驟並且您想要稍後進行修改時,它將幫助您對您手動創建的步驟進行更改。
我將調用此BufferList並引用 Column1。要將其加載到內存中,我將添加一個List.Buffer步驟。
這是我的變量一直在頂部。我可以一遍又一遍地參考它。
我想要確定的第一件事是我的標題從哪裡開始,因為我需要一個鍵來保留這些標題部分並為所有這些行獲取一個值。為此,我將添加一個自定義列並將其命名為Header。
我會寫如果 Column1 等於我們的 Header ID,那麼我希望我的索引號為空。
結果,它找到了文本並返回了 5 和 23。
我需要所有行的值,所以我需要填寫它。您可以右擊向下填充,但您也可以使用非常簡單的語法並將其添加到公式欄中。
在這種情況下,我添加了Table.FillDown並在文本字符串中指明了我們要填寫的列(標題)。
現在,我們已經為所有行填寫了它。我們有一個用於所有標題部分和所有行部分的鍵,因為它們都共享這個值。
從行中拆分標題
下一步是從行中拆分標題。我將添加另一個自定義列並將其命名為Temp。這一次,我們將做一些更精細的事情,並利用我之前創建的BufferList。
我們將使用幾個列表函數來查看每個位置並查找是否與索引匹配。
我將從if 語句開始並使用List.Contains查找BufferList中的特定位置並引用查詢HeaderID。
我們想在文件的整個長度上找到它,然後返回該項目在列表中的位置。如果它與索引匹配,我們就有了該特定行的匹配項。
然後我想返回一個值來標識標題。在這種情況下,我只是返回一個 H。我將復制語法,這樣我就不必重新寫一遍。
我們還需要確定行部分。如果列表不包含HeaderID,但包含DetailID,那麼我們在行部分。
如果Column1是空文本字符串,那麼我希望它保持為空。如果不是這種情況,那麼我希望它為null。
這個反對派獲得了標題行並返回了一個 H,然後它找到了一個詳細的行並返回了一個 R。然後它為該行部分中共享的所有項目返回了 0。
這些空白或空值很重要,因為它們可以讓您向下填充。向下填充不會跨過這些空白單元格,因此我們可以稍後消除它們。
我們將在公式欄中執行此操作並再次使用Table.FillDown。它需要一個包含列名的列表,這是我們的Temp列。
現在我們在整個列中重複了 H 和 R 值,這意味著我們實際上可以將標題與詳細部分分開。
如果您不想編寫代碼,也可以從用戶界面將其填寫下來。您只需右鍵單擊並選擇Fill,然後選擇Down。
刪除 Microsoft Power Query 中的空值和空白
既然我們有了這個權利,我們就可以消除我們不需要的東西。一切為空或包含空白的行都是我們不需要且必須刪除的行。我們可以通過過濾來消除這些。
拆分部分
一旦我們刪除了那些空白和空值,我們就剩下了我們需要的一切。在這一點上,我們可以拆分部分。我們可以專注於標題行,並將它們挑出來,因為它們與所有詳細信息行(它們也有單獨的間距)有單獨的間距。
我將在公式欄中添加一個新步驟,允許我在同一列上創建另一個過濾器。在這種情況下,我將只保留所有標題部分。
現在,我這裡有所有這些標題行。
我可以選擇Column1,轉到公式欄,選擇Split column,然後按位置拆分。
然後讓電源查詢本身解決這個問題。它會建議幾個位置。單擊“確定”接受這些位置。
標題中我們唯一感興趣的是item和job number。
在這裡的公式欄內,我可以用Item和Job #重命名那些。這將使我免於另一個重命名列步驟。
在這一步之後,我所要做的就是選擇Item,選擇Job #,當然,選擇我們的header key。然後我將刪除所有其他列,因為我不再需要它們。
這將是結果。我們仍然需要清理值並刪除文本項和破折號。我們想要的只是介於兩者之間的那些值。
所以我們打開它並取消選擇破折號和項目。
現在,所有標題都已完成。
我們也必須為DetailID執行相同的過程。我需要重命名這些步驟,以便稍後更容易返回到它。
我們將遍歷回到我們開始的初始查詢。我們從 Applied Steps 窗格中的 Filtered Rows 開始。
我要復制它並將其添加到我的過濾器中。這次,我沒有選擇 H,而是選擇了 R。
然後我將選擇 Column1,轉到 Split 列,按位置拆分,然後讓 power query 計算出來。
這就是權力查詢的建議。讓我們試一試。
這實際上看起來很不錯。甚至總行也完美地分開了。當然,有很多空格,因為我們有縮進。
修剪 Microsoft Power Query 中的文本字符串
我將選擇第一列,然後按 Down + Shift 選擇直到第 1.10 列。轉到轉換,選擇格式,然後選擇修剪。修剪只會刪除字符串前面或結尾的多餘空格,不會刪除字符串之間的多餘空格。
接下來,我們可以只提升標題,這樣我就不必為這些列鍵入所有標題或標題。在拆分步驟中,我重命名了兩列。當然,現在有 10 列,這有點麻煩。
我們還必須擺脫那些多餘的價值。因為我們有總計,所以我必須使用最後三列中的一列,因為它們是唯一具有介於兩者之間的附加值的行。然後我們將取消選擇那些空格、破折號和文本。
然後我將刪除不必要的列,這樣剩下的就是一個只有標題和細節的表格。我們需要一把鑰匙將這些部分重新組合在一起。
為此,我們可以使用自合併,這樣我們就可以將表與自身合併,將信息重新組合在一起。在Home選項卡上,選擇Merge,然後選擇 Column 5 和相同的查詢。
我希望將 AllHeaders 作為我要與之合併的初始表,而不是 AllDetails。
這從標題表中帶回了所有信息,每個項目和每個作業編號只有一行。
我們使用一個鍵來合併詳細信息行。如果我按下此處空白處的一側,我們將看到屬於標題 5 的所有行的預覽。
我們將在此處刪除最後一列,然後完成修復 Microsoft power query 中的混合固定列寬。
結論
在本教程中,我們提出了一種使用 Microsoft Power Query 解決混合固定列寬問題的方法。如果您喜歡本教程中涵蓋的內容,請不要忘記訂閱 LuckyTemplates 電視頻道。
我和一系列內容創作者一直在發布大量內容,他們都致力於改進您使用 LuckyTemplates 和 Power Platform 的方式。
梅麗莎
什麼是 Python 中的自我:真實世界的例子
您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。
在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。
本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。
在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。
我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。
了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。
本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。
如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。
什麼是 LuckyTemplates 網關?所有你必須知道的