什麼是 Python 中的自我:真實世界的例子
什麼是 Python 中的自我:真實世界的例子
在本教程中,我們將重新討論我之前介紹的關於如何使用 List.Zip 在 Power Query 中取消透視多個列的主題。一位 LuckyTemplates 成員在上詢問如何使該方法動態化。您可以在本博客底部觀看本教程的完整視頻。
我將此標記為高級,因為我們將編寫許多 M 函數,其中一些對您來說甚至可能是新的。
話雖如此,讓我們轉到 Power Query。
目錄
表格格式的數據
如您所見,此數據已轉換為適合分析的適當平板電腦格式。這個過程雖然非常重要,但不會在此處介紹,但我們將簡要介紹每個步驟。
在源步驟中,我們看到值對不斷重複,它們是上面列出的每個屬性的小時數和聯繫方式。
在Applied Steps中,您可以看到其餘的步驟。我們刪除了一些最上面的行,刪除了空列,清理了我們的文本值並填充了它們。然後,我們轉置我們的數據,刪除空記錄,合併第一列和第二列,再次清理我們的文本值,然後轉置我們的數據。
我們創建了一個自定義步驟,稍後我們將對其進行更詳細的檢查,從我們的列表中提取值,然後最終更改類型。
讓我們看一下整個代碼。我們在這裡感興趣的是List.Zip函數。簡要回顧一下,它以單個列表作為參數,然後返回一個列表。結果,我們看到此實例中的這個單個列表包含三個單獨的列表。
如果我們檢查第一個列表,它包含硬編碼的屬性名稱,只是鍵入的文本值。第二個列表包含小時值的硬編碼列引用。最終列表包含聯繫人值的硬編碼列引用。
List.Zip 然後從這三個列表中的每一個中獲取一個元素,並根據它們在新列表中的位置組合它們。例如,這些列表中的每個第一個元素都會組合到一個新列表中。對於該列表中列在第二位的所有值,也會發生同樣的情況,依此類推。
如果屬性不太可能隨時間改變,則可以關注硬編碼值。因此,如果下次不是所有項目都存在或存在新項目,您就會遇到麻煩。
更改代碼以動態取消透視多個列
那麼我們如何使這種動態呢?
我做的第一件事是單步執行代碼,看看是否有一個地方我們可以獲取這些屬性值,而無需設計一個單獨的步驟來完成它。所以我們要回過頭來查看代碼,這個RemoveNull這一步是完美的。
您可以看到它在此處的第一列中列出了所有屬性值。我們可以使用用戶界面來提取它們。
因此,右鍵單擊該標題,然後在下方選擇Add as new query。
我們得到了這個列表,這是個好消息,因為我們想用動態列表替換我們之前看到的硬編碼列表。我們需要做的就是整理這些值。
讓我們從刪除那些空值開始。所以在公式欄內,我們將添加一個List.RemoveNulls。正如您現在看到的,所有項目都是重複的,這是因為值對。它按小時列出一次。
然後再次,對於聯繫人,要刪除那些重複項,我們可以添加一個List.Distinct。現在我們已經創建了這個邏輯,我們所要做的就是複制它並將其粘貼回我們的示例查詢。
在Sample query中,打開 Advanced Editor 並創建一個新的變量名稱。我們稱它為AttributeList。然後我們粘貼代碼並放一個逗號。
現在讓我們回到自定義步驟。在 List.Zip 中,我們可以用我們的變量名 (AttributeList) 替換第一個列表。
現在讓我們仔細看看第二個列表。我們知道它引用列名,並且每個列名都以我們在該列表中已有的相同屬性開頭,後跟一個空格和一個文本“小時”。
我們只需要為每個項目添加一個後綴。所以讓我們後退一步,添加一個自定義列來創建一些邏輯。
動態反透視多列:添加自定義列邏輯
它只是一個臨時的列,所以我們不需要給它一個合適的名字。我們會在完成後將其刪除。
要更改列表中的值,我們可以使用List.Transform函數。我們需要轉換AttributeList中的值,所以我要把它粘貼進去。
在標題中,我們看到文本值以大寫字母開頭,其餘為小寫字母。我們的屬性只包含一個大寫的單詞,因此我們也必須轉換該文本值。我們可以使用下劃線訪問列表中的每一項,我們將添加該後綴。
有了它,我們在我們的列中得到了一個列表值。選擇哪一個並不重要,只需單擊此處任意一個空白處的一側即可。
在頁面下方,我們可以看到我們創建的列表的預覽。因此,您會看到我們現在已正確區分了這些列標題,以便將我們在此處看到的列標題與此列表相匹配。
我們現在有辦法從我們的記錄中識別我們想要訪問的字段。因此,讓我們再次打開我們的自定義列對話框並添加Record.SelectFields。它需要一條記錄作為記錄,因此我們可以使用該下劃線來訪問我們所在的當前記錄。然後我們給它一個包含所有這些字段名稱的列表,所以添加一個右括號並按OK。
所以我們不再有一個列表,但我們現在有一個記錄。讓我們再次單擊空白處的一側以查看該記錄的內容。這裡我們看到它列出了記錄字段名稱和記錄字段值。
但我們只對記錄字段值感興趣,所以我們需要提取它。讓我們回到我們的自定義列對話框並添加Record.FieldsValues。
我們現在又得到了一個列表,不再是一條記錄。我們再次單擊空白處的一側,您會看到我們現在有一個僅包含這些值的列表。所以這看起來不錯。
讓我們複製我們創建的完整邏輯,除了最後一個右括號。現在我們可以刪除我們的臨時列,因為我們不再需要它。
在我們的公式欄上,我們選擇第二個列表並將其替換為我們的邏輯。
要創建一個包含聯繫人記錄字段值的列表,我們需要更改的只是後綴。所以我們也可以選擇最後一個列表,並粘貼到我們的邏輯中。
然後,讓我們將其更改為 contacts而不是 hours。
沒有錯誤,看起來不錯。現在這是取消透視多列的動態解決方案。
LuckyTemplates Unpivot 列——Power
Query
教程
結論
這就是您如何使用 List.Zip 在中動態取消透視多個列。
如果有新屬性進來,它會自動被 AttributeList 拾取。當一個項目不再存在時,它就不會出現在該列表中。
我希望你喜歡這個。觀看下面的完整視頻以了解有關本教程的更多詳細信息,並查看下面的鏈接以了解有關在 LuckyTemplates 中逆透視多個列的更多內容。
一切順利
梅麗莎
什麼是 Python 中的自我:真實世界的例子
您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。
在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。
本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。
在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。
我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。
了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。
本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。
如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。
什麼是 LuckyTemplates 網關?所有你必須知道的