【例項】PowerQuery的自定義日曆
由於資料分析經驗不足,我對自定義日曆體驗不深,但看到一些大牛對自定義日曆推崇備至,因此照貓畫虎也籌劃自己的自定義日曆。
一、自定義日曆的兩個來源
- 一個是本地的自定義日曆,比如自建,或直接複製別人做好的日曆。比較推薦此方法。
- 另一個是用網上現成的日曆,比如這個https://api.datamarket.azure.com/BoyanPenev/DateStream/v1/ 。這個日曆需要Azure賬號,可以免費申請。也很強大,但是速度有點慢。
我個人推薦自己建一個本地日曆,因為這樣使用方便快速。
二、建立本地自定義日曆
我建立了一個自己需要用到的日曆:
let
源 = List.Dates(#date(1900,1,1),Duration.Days(Date.From(#date(2020,12,31))- Date.From(#date(1900,1,1))),#duration(1,0,0,0)),
轉換為表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
重新命名的列 = Table.RenameColumns(轉換為表,{{"Column1", "Date"}}),
複製的列 = Table.DuplicateColumn(重新命名的列, "Date", "Date - 複製"),
重新命名的列1 = Table.RenameColumns(複製的列,{{"Date - 複製", "Year"}}),
更改的型別2 = Table.TransformColumnTypes(重新命名的列1,{{"Date", type date}}),
獲取年份 = Table.TransformColumns(更改的型別2,{{"Year", Date.Year}}),
月份 = Table.AddColumn(獲取年份, "Month", each if Date.Month([Date])<10 then "0"&Text.From(Date.Month([Date])) else Date.Month([Date])),
更改的型別3 = Table.TransformColumnTypes(月份,{{"Month", type text}}),
獲取日期 = Table.AddColumn(更改的型別3, "Day", each if Date.Day([Date])<10 then "0"&Text.From(Date.Day([Date])) else Date.Day([Date])),
更改的型別4 = Table.TransformColumnTypes(獲取日期,{{"Day", type text}}),
中文星期名稱 = Table.AddColumn(更改的型別4, "DayName", each Date.ToText([Date],"dddd")),
一年中的第幾周 = Table.AddColumn(中文星期名稱, "Week", each Date.WeekOfYear([Date])),
更改的型別 = Table.TransformColumnTypes(一年中的第幾周,{{"Date", type date}}),
更改的型別1 = Table.TransformColumnTypes(更改的型別,{{"Date", type date}, {"Month", type text}, {"Day", type text}}),
獲取星座 = Table.NestedJoin(更改的型別1,{"Month", "Day"},星座,{"月份", "日期"},"NewColumn",JoinKind.LeftOuter),
星座獲取完畢 = Table.ExpandTableColumn(獲取星座, "NewColumn", {"星座"}, {"星座"})
in
星座獲取完畢
注意星座是在本地建立了一個日期和星座的對應表,然後引入到PowerQuery,再合併到日曆中。沒需要可以不用管。
三、使用本地日曆
要注意到我自定義的日曆是到2020年。其實我們實際使用的時候,往往用不到將來的日曆。比如我自己就只用到本年的日期。所以我將日曆引入到我的分析模型時,用下面的程式碼對日曆做了篩選:
篩選的行 = Table.SelectRows(更改的型別, each Date.IsInYearToDate([Date])),
篩選的行1 = Table.SelectRows(篩選的行, each [Month] < Number.From(Date.Month(Date.From(DateTimeZone.LocalNow()))))
第一次篩選,只篩選出本年度到今天的日期;第二次篩選,則篩選出本月之前的月份。原因在於:我每月月初需要提交至上月月底的分析報告,所以做了這麼一個篩選。如果有不同需求,可以進行不同篩選,目的是獲取日曆的有效時間範圍即可。
相關文章
- JavaScript日曆效果程式碼例項JavaScript
- 微信小程式 vue 自定義日曆 sku微信小程式Vue
- Flutter日曆,可以自定義風格UIFlutterUI
- Calendar -『為移動端而生』的自定義日曆
- 自定義view之實現日曆介面(一)View
- 自定義view之實現日曆介面(二)View
- HTML5自定義日曆控制元件HTML控制元件
- JavaScript簡單的日曆效果程式碼例項JavaScript
- js簡單日曆效果程式碼例項JS
- iOS 自定義日曆(日期選擇)控制元件iOS控制元件
- Android 自定義 TabActivity 的例項方法Android
- django自定義過濾器例項Django過濾器
- 縱享絲滑滑動切換的周月日曆,水滴效果,豐富自定義日曆樣式,仿小米日曆(ViewDragHelper實現)View
- 網頁裡引用mui的日曆,城市,自定義選擇標籤網頁UI
- PHP的時間日期與例項應用:日曆核心程式PHP
- jQuery自定義標籤程式碼例項jQuery
- Java 經典例項:自定義迭代器Java
- Vue.js自定義指令的用法與例項Vue.js
- Vue日曆的編寫,可顯示周和月的模式(其中可以自定義日曆裡內容的顯示)Vue模式
- Android自定義日曆控制元件的實現過程詳解Android控制元件
- 1.17 另一個自定義的CVCalendar日曆 [iOS開發中的神兵利器]iOS
- css自定義列表計數程式碼例項CSS
- jquery自定義事件簡單例項程式碼jQuery事件單例
- MapReduce程式設計例項之自定義排序程式設計排序
- Qt自定義訊號槽的使用淺析+例項QT
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫
- HarmonyOS NEXT應用開發案例—自定義日曆選擇器
- Android自定義預定日曆,並且顯示陰曆Android
- MapReduce程式設計例項之自定義分割槽程式設計
- node.js實現的自定義事件程式碼例項Node.js事件
- PHP生成日曆(例項詳解)PHP
- css自定義單選按鈕的樣式程式碼例項CSS
- Qt5MV自定義模型與例項淺析QT模型
- 自定義註解例項實現SQL語句生成SQL
- 自定義右鍵導航選單程式碼例項
- CSS自定義滑鼠指標形狀程式碼例項CSS指標
- css自定義滑鼠指標圖示程式碼例項CSS指標
- 自定義 Behavior,實現巢狀滑動、平滑切換周月檢視的日曆巢狀