發表文章

目前顯示的是 10月, 2022的文章

R語言 : as.Date() 中的小陷阱, time zone

圖片
 在HR資料處理中,其中一個關鍵便是出勤資料了。,通常完整的資料除了上班打卡時間 / 下班打卡時間以外,通常還需要一個欄位,將打卡的時間歸類於幾月幾號的工時, 例如: 2022/10/28 23:00上班 / 2022/10/29 09:00下班,而歸屬日期為10/28 但現實也不免為碰到不完整的資料無法進行判別,因此需要透過打卡時間或者班別來推斷日期,於是便於其中一個打卡時間萃取日期出來,然後應用as.Date()轉換就完成萃取。 但我們都沒想到的是,單純的使用as.Date( ) 卻會因為系統時差轉換而和我們心中的理想日期有所誤差。 as.Date("yyyy-mm-dd hh:mm:ss",tz = Sys.timezone()) 因此我們需要tz 函數來執行細節設定好讓我們確認時間能夠和預期相符。 在此直接列出使用範例: CHECK <- Time %>% mutate(as_date = as.Date(PUNCH_TIME), as_date_Taiwan = as.Date( PUNCH_TIME ,tz = "Asia/Taipei"), #台灣 as_date_Kolkata = as.Date( PUNCH_TIME ,tz = "Asia/Kolkata"), #印度 DIFF = ifelse((as_date!=as_date_Taiwan| as_date!=as_date_Kolkata| as_date_Taiwan!=as_date_Kolkata),1,0)) %>% filter(DIFF ==1) CHECK %<>% filter(as_date_Taiwan != as_date_Kolkata) CHECK_INDIA %<>% select( PUNCH_TIME , as_date,as_date_Taiwan,as_date_Kolkata) 印度時間早台灣2.5小時,因此投一筆資料會直接將日期轉換為2022-09-01而非我們預想...

Power BI 疑難雜症: hresult 0x80040e4e

圖片
   萬年沒更新,終於又抓到一點時間來分享,目前仍在HR單位底下擔任推動數位轉型的小小螺絲釘,開發看板給予高級主管進行決策參考,Power BI便是工作場域中,不可或缺的重要腳色了,網路上的大神比比皆是,無論是DAX語法應用或者Power Query的應用網路上有許許多多的資源在此也不賣弄大刀,但相對少數提到的Error是HRESULT 0x80040e4e, 這Error是工程師的惡夢,每每碰到總讓人措手不及,資料排程沒有任何更動卻又殺得你措手不及,像班上的惡霸,讓你一整天都無法心安理得開會、研究,但隨著筆者經驗累積,也慢慢有其應對之道了,還請看下去~ 如圖所示,BI工程師碰到這問題時常抱頭不知如何是好: 多數開發人員看到這種類型的result,又看到ODBC會以為是資料渠道出現問題,但事實上卻並非如此,但多方探究之後其實是因為欄位性質異動原因: 欄位文字格式變動: Encoding 變動(UTF-8~Big5) 欄位本身格式變動: 由日期變成Binary 二元 ,本次Error即是因為某張表的日期格式因為資料變為空集合,導致欄位變成binary 綜合前兩項變動,導致表間關聯出問題,請參考: https://www.youtube.com/watch?v=iVY1GkiYs-U&ab_channel=JessieWang 建議解決方向如下: 回想最近一次的更新做的更動有哪些? 是否新增某些資料集? 將新增的資料集刪除後再行更新會否成功? 如果前兩個順利了,就表示error導因於近期更新的資料集,再去擒賊頭確認資料源頭即可。 這次避免空集合的資料源頭被誤判,做了兩項處理: if {nrow(dataframe) == 0} {dataframe[1,1] < - “XXXX”} 空集合賦值 將Excel檔改為CSV檔,Power Query會預判Excel的資料格式,CSV則不會,故作此調整 以上,解決噩夢了嗎?哈哈