永久假期日曆 – POTW #12(Power Query 解決方案)

永久假期日曆 – POTW #12(Power Query 解決方案)

在這篇博文中,我們將探討我對解決方案。對於這個挑戰,我們重新審視了 LuckyTemplates 的第一個“本週難題”挑戰,我們在其中根據特定日期和相關日期的組合創建了一個永久假期日曆。但是這一次,我們將只使用Power Query您可以在本博客底部觀看本教程的完整視頻。

永久假期日曆 – POTW #12(Power Query 解決方案)

如果您堅持解決問題本身,您可以重新訪問第,看看是否有任何方法可以幫助您應對這一挑戰。

永久假期日曆 – POTW #12(Power Query 解決方案)

在閱讀提交的內容時,我看到很多人利用用戶界面編寫自定義函數來創建萬年曆。分析每個條目都很愉快,如果您想獲得靈感,我鼓勵您也這樣做。

當我自己處理這個場景時,我最終創建了多個解決方案。我選擇的那個最好地說明瞭如何不僅可以將問題分解成更小的部分,而且還可以使它們可見。如果您遇到錯誤或意外結果,這將非常有用。

目錄

創建萬年曆的起點

這張原始假期表是我們的起點。要拼湊一個日期,我們需要年、月和日來表示特定日期。所缺少的只是年份。

永久假期日曆 – POTW #12(Power Query 解決方案)

但是對於相對日期,我們需要做更多的工作。對於初學者,我們需要將那一天的列拆分為數字和工作日。讓我們回顧一下這些步驟。

從日期表中檢索年份

為了使這個解決方案動態化,我將從日期表中檢索年份。在公式欄中,您可以看到我使用投影從我的日期表中獲取了一個列表。當然,這將包含重複項。要刪除這些,我添加了Table.Distinct

永久假期日曆 – POTW #12(Power Query 解決方案)

當我單擊任何這些表旁邊的空白處時,您還會看到一個列表,其中包含我的日期表查詢中存在的不同年份。

永久假期日曆 – POTW #12(Power Query 解決方案)

我們得到了一個月份名稱,但實際上我們需要一個月份編號。現在,當我們將年份連接到月份名稱時,我們可以使用Date.From函數返回該月份的第一天作為日期值。

通過添加Date.Month,我們只剩下該特定日期的月份編號。對於 1 月,它返回 1。對於 2 月,它返回 2,依此類推。

永久假期日曆 – POTW #12(Power Query 解決方案)

從日列中獲取數字

為了從日列中獲取數字,我們決定不拆分列而是提取值。正如您在編輯欄中看到的,我們使用了Text.BeforeDelimiter並使用該空格來標識該文本字符串的左右部分。

永久假期日曆 – POTW #12(Power Query 解決方案)

如果沒有空間,我們想返回天列中剩餘的任何內容。因此,對於第一條記錄,它返回 1。對於包含該空格的第二條記錄,它返回文本字符串的第一部分,即單詞Third

永久假期日曆 – POTW #12(Power Query 解決方案)

我們將使用類似的方法來獲取日期名稱,但使用函數List.PositionOf。這將返回作為第一個參數傳遞的列表中值的從零開始的偏移量,如果該值未出現在該列表中,則返回 -1。

永久假期日曆 – POTW #12(Power Query 解決方案)

對於第一條記錄,它傳遞值 1,該值不在我們的列表中。這就是它返回值 -1 的原因。對於第二條記錄,它返回值Monday

它將它傳遞給我們的函數並返回 1,因為它是我們列表中的第二項。接下來,我們將用null替換所有 -1 值。

永久假期日曆 – POTW #12(Power Query 解決方案)

至此,我們已經創建了調用自定義函數所需的所有構建塊。

調用萬年曆的自定義函數

在公式欄中,我們可以看到該函數有四個參數:a yearmonthnumeralweekday

永久假期日曆 – POTW #12(Power Query 解決方案)

但是它如何確定該日期值呢?我們將再次使用List.PositionOf來獲取數字的數值。我們有一個包含第一、第二、第三和第四的列表。當我們將數字傳遞給List.PositionOf時,它返回從零開始的偏移量。

永久假期日曆 – POTW #12(Power Query 解決方案)

同樣,如果值不存在,則返回 -1。所以對於第一條記錄,我們傳遞值 1。1 不存在於此列表中,這就是它返回值 -1 的原因。對於第二條記錄,我們傳遞值 Third,這是我們列表中的第三項。這將返回值 2。

創建日期列表

現在讓我們創建一個日期列表。我們將確定該月的開始日期,確定該月的天數,並使用List.Dates創建一個包含該月所有天數的列表。

永久假期日曆 – POTW #12(Power Query 解決方案)

接下來,我們將使用List.Select僅保留特定工作日的日期。

永久假期日曆 – POTW #12(Power Query 解決方案)

當我們點擊任何這些列表旁邊的邊時,我們可以看到它只包含這四個項目。

永久假期日曆 – POTW #12(Power Query 解決方案)

應用條件邏輯

最後,我們將應用條件邏輯來構造或檢索日期。如果工作日為null,表明我們有一個特定的日期,我們可以使用內在的#date來構造一個日期值。

永久假期日曆 – POTW #12(Power Query 解決方案)

如果數字等於最後一個,那麼我們可以使用List.Reverse函數反轉列表中的順序並提取第一個值。

永久假期日曆 – POTW #12(Power Query 解決方案)

如果我們想將此升序更改為降序,我們始終可以從該日期範圍中提取最後一個日期。列表中有四個或五個元素並不重要。通過顛倒順序並提取第一個項目,我們總是有最後一個日期。

永久假期日曆 – POTW #12(Power Query 解決方案)

對於所有其他情況,我們使用List.Skip

永久假期日曆 – POTW #12(Power Query 解決方案)

我們可以根據列表中的這個位置提取值。對於感恩節,數字是第四個,第四個返回 3。這將跳過列表中的前三個值,並始終返回第四個項目。

永久假期日曆 – POTW #12(Power Query 解決方案)

讓我們將它們放在一起並轉到解決方案查詢。對於源步驟,我們調用 RAW 假期日期表。接下來,我們將添加一個返回日期列表的列。

永久假期日曆 – POTW #12(Power Query 解決方案)

回顧萬年曆的 M 代碼

讓我們檢查列的 M 代碼。對於表中的每一行,我們嵌套了一個包含日期表中不同年份的表。然後我們通過調用自定義函數來轉換該年份列中的值。

永久假期日曆 – POTW #12(Power Query 解決方案)

當然,為了能夠調用自定義函數,我們必須先進行一些設置。我們必須得到月份數數值,當然還有工作日。然後從那個嵌套表中,我們保留了帶有日期的列表。

永久假期日曆 – POTW #12(Power Query 解決方案)

當我們點擊空白處的一側時,我們可以在下方看到該列表的預覽。

永久假期日曆 – POTW #12(Power Query 解決方案)

下一步是擴展該列表並添加CelebratedOnDate

永久假期日曆 – POTW #12(Power Query 解決方案)

這是我們在此計算中使用的邏輯:如果日期是星期六,那麼我們將減去一天,以便在星期五著陸。如果是星期天,那麼我們將添加一天以在星��一著陸。如果不是星期六或星期日,那麼我們需要一個空值。

永久假期日曆 – POTW #12(Power Query 解決方案)

最後,最後一步是更改類型。

永久假期日曆 – POTW #12(Power Query 解決方案)

結論

只需快速提醒一下,是 LuckyTemplates 論壇上每週一和第三個星期三的持續系列。第一周發布的問題需要基於 DAX 的解決方案,而第三週發布的問題需要基於 Power Query 的解決方案。

如果您喜歡本 POTW 中涵蓋的內容,請訂閱 LuckyTemplates 電視頻道​​以獲取更多信息。我和一系列內容創作者一直在發布大量內容,所有內容都致力於改進您使用 LuckyTemplates 和 Power Platform 的方式。

梅麗莎


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的