發表文章

目前顯示的是 1月, 2023的文章

藥品交互作用網頁文字轉存成格式化的資料表 - Challenge

圖片
  在經過前面 4 篇「列轉欄」的修練後,我來分享一個在工作上實際的案例,步驟雖然簡單,卻是滿滿的干貨。 這是一個醫藥界位居翹楚的 MicromeXXX「藥品交互作用查詢結果」的網頁,我希望將它轉換成 excel 資料表,以便能匯入到 HIS 使用。以下是一些特性與限制: 網頁文字可以複制。 網頁原始碼檢視只能看到一些程式碼以及版權宣告,完完全全找不到任何網頁的內文,也就是說想要依靠解析網頁原始碼中的 HTML 標簽來擷取資料這招,在這裡無用武之地。 由於這網頁內容是付費資料,醫院雖有購買,但不代表著可以將它大勒勒的曝露在大眾面前,所以一切敏感內容都被遮蔽! 【網頁文字轉存成格式化的資料表 】關鍵的部份完成後,接下來若想要全流程自動化,那麼我會把院內每個藥品的交互作用網址 URL 存成 EXCEL 檔,用 VBA 寫迴圈,每季按一鍵就去抓取院內千百個藥品"最新"的交互作用資料,並且再讓它比對一下和上次抓取的檔案是否有更新,有更新的再丟給 HIS 去滙入,這樣就達到了徹底懶人化的目標囉~~~~ 檔案下載: 藥品交互作用網頁文字轉存成格式化的資料表   Thst’s begin~~ 這是一個藥品交互作用網頁,內容呈現 CLOPIDOGREL 這藥品與下面哪些藥品有交互作用,以及一些特性的敘述。  網頁原始碼: Ctrl+A 全選內容後,Ctrl+C 複製。 選擇性貼上→文字 ,貼到 excel 。 (如果只是單純地貼上,或貼上HTML,都會有換行及空白行) 內容看起來就像這樣。 在進入 Power Query 之前,我們先看一下整體資料長成什麼樣子。 前面 5 列是要移除的,藥名之下的就是一些特性,似乎都是以 數字) 的方式來列表 再往下看一看,8) 裡面的列表是以 英文) 的方式來呈現。 到這裡我可以歸納出一個規則,藥名就是文字內沒有 “)” 符號,特性就是有 “)” 符號。 拉到最尾段,最後有 4 列也是我不要的。 資料格式分析完後,就可正式進入 Power Query 了 step 1 - 移除頂端 5 列。 step 2 - 移除底端 4 列。 目前看起來像這樣。 step 3 - 為了要將資料分組,我需要加入一行輔助資料行,用來判斷從第n列到第n列是同一組資料。 是藥名的就直接帶出藥名,不是藥名的就代入 null 。 s

MoM為何算出來都是0 ( DAX練習 )

圖片
昨天不小心透露使用 Power BI 六年資歷,今天馬上就要接受考驗,可見還是有人 F/U 我的 FB。 上網 google 了一下,這是 Microsoft Power BI 官網的這篇 How to calculate MOM% ? 所以我就去官網下載了它的練習檔,有興趣的人可以去找找玩玩。 比較了上面那張算不出來,長得和下面這張官網的 solution 好像也沒什麼差別 就這兩個 table , 而且也用 Date 欄位設了關聯 我能想到的可能,如果,把 table 之間的關聯取消,它會算不出來。 我試了試官網的練習檔,是可以 run 的,由於沒有拿到那位提問人的原始檔案,所以還真不知道他的問題在哪裡?! 官網原版的 solution 雖然可以 run ,也不是說不好,只是有更 smart 一點的寫法。 如果知道多一點點語法的話,例如: PREVIOUSDAY、PREVIOUSMONTH、PREVIOUSQUARTER、PREVIOUSYEAR...等 一堆 時間智慧函式 ,會比用 DATEADD 來得一目了然。如果不知道時間智慧函式也沒什麼不好,就用 DATEADD 來一招打通關也沒有不可以。 DIVIDE 或是 IFERROR 的用法,也會比 IF(ISBLANK()) 來得好一些。 比較一下原版的寫法,與我改寫的另一種表示法,優劣高下,立判。 檔案下載: 1120113MoM為何算出來的都是0(DAX練習)How to calculate MO

使用 Power Query 擷取含某疾病別的記錄

圖片
檔案下載:  擷取含某疾病別的記錄

找出每個 project 的執行天數

圖片
  範例資料如下: Problem : 找出每個 project 實際執行多少天? 可以看到同一個 project 有好幾筆資料,每筆資料的天數有若干天數重疊,例如 project 3 有三筆資料 1/17~1/26 、 1/16~2/3 和 1/3~2/1,實際執行天數是 32 天。 檔案下載: 找出每個 project 的執行天數 1.用 Power Query 來做 2.用 DAX 來做 =COUNTROWS(DISTINCT(GENERATE(Table1,FILTER(CALENDARAUTO(),[Date]>=Table1[st date]&&[Date]<=Table1[End Date])))) 嗯! 這個例子, 可以計算藥物持有天數.