使用 Tableau Prep 分析醫院床位使用情況
醫院滿員會造成問題,但資源過多也同樣會造成問題。務必要從床位即資源的角度來理解醫院床位。但是,資料通常是從患者的角度進行存放的。我們如何才能獲取相關資料,瞭解患者何時佔用床位並確定床位使用情況?
附註:為了完成這些教程中的工作,您需要安裝 Tableau Prep 並根據需要安裝 Tableau Desktop:
若要安裝 Tableau Prep 和 Tableau Desktop,請參閱 Tableau Desktop 和 Tableau Prep 部署指南(連結在新視窗開啟)。否則,您可以下載 Tableau Prep(連結在新視窗開啟) 和 Tableau Desktop(連結在新視窗開啟) 免費試用版。
您還需要下載三個資料檔案。建議將這些檔儲存在 我的 Tableau Prep 存放庫 > Datasources 資料夾中。
- Beds.xlsx(連結在新視窗開啟)
- Hours.xlsx(連結在新視窗開啟)
- Patient Beds.xlsx(連結在新視窗開啟)
資料
對於我們的四個床位 A、B、C 和 D,我們將跟蹤哪個患者佔用了床位,以及他們佔用床位的開始和結束時間。資料看起如下所示:
初步分析
如果我們將此資料引入 Tableau Desktop,我們可以建立一個甘特圖來顯示患者何時佔用床位。
這是一種有用的視覺元素。我們可以看到,床位 A 和 B 的使用間隔時間很短,但床位 C 使用得非常少。床位 D 的患者沒有結束時間,但我們將利用一些計算來解決該情況。這為我們提供了一個關於床位使用情況的視覺概覽。
但是,如果我們想要計算床位空置的小時數,該怎麼辦?或者,如果我們要比較實施新原則前後的開放床位時間,該怎麼辦?透過採用目前結構方式的資料無法輕鬆地達到目的。
所需的資料結構
透過建立一些非常基本的資料集並在 Tableau Prep 中將其合併,我們可以將此資料集修改為允許我們執行更深入分析並建立更有用的視覺化項的形式。
在進入 Tableau Prep 之前,讓我們回顧一下,想一想我們需要建立什麼才能回答以下問題:「每個床位空置了多少小時?」
我們需要能夠查看每小時的每個床位,並瞭解是否有患者佔用床位。目前,資料僅僅是患者何時佔用床位;我們還未向 Tableau 提供有關空置小時數的資訊。
為了建立包含所有床位和所有小時的完整矩陣,我們將建立兩個新資料集。一個資料集是床位的清單(A、B、C、D),另一個資料集是小時的清單(1、2、3、…、23、24)。透過執行交叉聯結(將一個資料集中的每一列與另一個資料集中的每一列聯結),我們將最終獲得床位和小時的每種可能組合。
Beds.xlsx 資料集看起來如下所示: | Hours.xlsx 資料集看起來如下所示: | 而交叉聯結的結果看起來如下所示: |
![]() | ![]() | ![]() |
接著,我們將引入「Patient Beds」(患者床位)資訊,以是否有特定患者的形式標記每個床位-小時組合。我們最終會得到一個資料集,該資料集中每個床位-小時組合佔一列,並且,如果患者佔用了床位,則包含患者的編號及開始和結束時間。Null 值指明床位未被佔用。
利用此結構中的資料,我們可以執行像這樣的分析,讓我們能夠像調查患者床位一樣輕鬆地調查未佔用的床位。
重構資料
那麼如何使用 Tableau Prep 達到該目的?我們將分兩個部分組建流程,首先組建「Bed Hours」(床位小時)矩陣,然後將其與「Patient Beds」(患者床位)資料合併。確保下載全部三個 Excel 檔(Beds.xlsx、Hours.xlsx 和 Patient Beds.xlsx)以便繼續操作。
床位小時矩陣
首先,我們將連線到 Beds.xlsx 檔案。
- 開啟 Tableau Prep。
- 從開始螢幕中選取「連線至資料」。
- 在「連線」窗格上選取「Microsoft Excel」。巡覽到 Beds.xlsx 的儲存位置,並選取「開啟」。
- 「Beds」(床位)工作表應會自動顯示在「流程」窗格中。
提示:有關連線至資料的詳細資訊,請參閱連線至資料(連結在新視窗開啟)。
接著,我們需要建立一個可用於與「Hours」(小時)資料集執行交叉聯結的欄位。我們將新增一個僅僅為值 1 的計算。
- 在「流程」窗格中選取「Beds」(床位),然後選取建議的「清潔步驟」。
- 隨我們剛剛新增的「清理」步驟一起,「設定檔」窗格將出現。選取工具列中的「建立計算欄位」。
- 將欄位命名為「Cross Join」(交叉聯結),並輸入值 1。
- 「資料」網格應會更新為顯示資料的目前狀態。
現在,我們將使用「Hours」(小時)資料集重複該過程。
- 在「連線」窗格上選取「新增連線」
按鈕以新增另一個資料連線。
- 選取「Microsoft Excel」,然後選取 Hours.xlsx 檔案並按一下「開啟」。
- 在「流程」窗格中選取「Hours」(小時),然後選取建議的「清潔步驟」,以將其新增到流程中。
- 透過「設定檔」窗格中的工具列建立一個名為「Cross Join」(交叉聯結)的計算欄位,並輸入值 1。
兩個資料集現在有一個共同欄位「Cross Join」(交叉聯結),因此可以聯結。
- 透過將「Clean 2」(清理 2)拖到「Clean 1」(清理 1)並放在「聯結」選項上來聯結兩個清理步驟。
- 在以下的「聯結設定」中,聯結設定應會自動填充。
- 由於我們將兩個欄位都命名為「Cross Join」(交叉聯結),因此 Tableau Prep 自動將它們識別為共同欄位,並建立適當的「已應用聯結子句」。
- 預設「聯結類型」為內部聯結,正是我們所需要的。
- 此聯結會將「Beds」(床位)中的所有列與「Hours」(小時)中的所有列匹配,如「資料」網格中所示。
A. 聯結子句
B. 聯結類型
C. 資料格結果
提示:有關聯結的詳細資訊,請參閱聯結資料(連結在新視窗開啟)。
我們不再需要「Cross Join」(交叉聯結)欄位,因此可以將這些欄位移除。
- 在「流程」窗格中,選取「Join 1」(聯結 1),並選取加號
圖示,並選取「清潔清理步驟」。
- 選取欄位「Cross Join-1」(交叉聯結-1)和「Cross Join」(交叉聯結),並選取「移除欄位」。
- 按兩下「Clean 3」(清理 3)標籤,並將該步驟重命名為「Bed Hour Matrix」(床位小時矩陣)。
我們現在有了「Bed Hour Matrix」(床位小時矩陣)資料集,其中包含所有床位和所有小時,並且我們已完成組建資料集的第一部分。
患者床位使用
第二部分是引入患者床位使用情況。首先,我們將連線至資料。
- 在「連線」窗格上選取「新增連線」
按鈕以新增另一個資料連線。
- 選取「Microsoft Excel」,然後選取 Patient Beds.xlsx 檔案,並選取「開啟」。
- 在「流程」窗格中選取「Patient Beds」(患者床位),然後選取建議的「清潔步驟」,以將其新增到流程中。
由於「床位小時矩陣」檔案基於小時,但「患者床位」以實際時間基礎,因此我們需要從「患者床位」開始和結束時間中擷取小時。此外,對於結束時間,我們想要確保,如果患者在一天結束時(午夜,24 時)仍然佔用床位,則我們指明床位被佔用,即使資料集中沒有結束時間也是如此。我們將在此新步驟中新增計算欄位。
- 在工具列中,按一下「建立計算欄位」。
- 將欄位命名為「Start Hour」(開始小時)。對於計算,輸入
DATEPART('hour',[Start Time])
。 - 這將獲取開始時間的小時並將其擷取出來。因此,「1/1/18 9:35 AM」將變為「9」。
- 建立另一個名為「End Hour」(結束小時)的計算欄位。對於計算,輸入
IFNULL(DATEPART('hour',[End Time]), 24)
。
DATEPART
部分獲取結束時間的小時。IFNULL
部分將為任何缺少的結束時間指派結束時間 24 時(午夜)。
現在我們已準備好將患者床位使用情況聯結到「Bed Hour Matrix」(床位小時矩陣)。與我們之前進行的操作相比,此聯結操作更為複雜一些。內部聯結將只會返回兩個資料集中都存在的值。由於我們想要確保保留所有床位-小時槽位,而不管患者是否佔用床位,因此我們需要執行左聯結。此將產生許多 null 值,但這是適當的。
我們還需要匹配床位-小時槽位被一名(或多名)患者佔用的時間。因此,除了匹配患者佔用的床位外,我們還需要考慮時間。「Bed Hour Matrix」(床位小時矩陣)資料集只有「Hour」(小時)欄位,而「Patient Beds」(患者床位)資料集有「Start Hour」(開始小時)和「End Hour」(結束小時)。我們使用一些基本邏輯來確定是否應將患者指派到給定床位-小時槽位:如果其開始小時小於或等於 (<=) 床位-小時槽位,並且其結束小時大於或等於 (>=) 床位-小時槽位,則患者被視為佔用床位。
因此,需要三個聯結子句來將這兩個資料集相應地匹配在一起。
- 將「Clean 3」(清理 3)步驟與「Bed Hour Matrix」(床位小時矩陣)步驟聯結。
- 在「已應用聯結子句」區域中,預設值應為「Hour = End Hour」。選取聯結子句,將運算子從「=」改為「<=」。
- 選取「已應用聯結子句」區域右上角的加號
按鈕,以新增另一個聯結子句。將其設定為「Hour >= Start Hour」
- 為「Bed = Hospital Bed」新增第三個聯結子句。
- 在「聯結類型」部分選取「Bed Hour Matrix」(床位小時矩陣)旁邊圖形的無陰影區域,將聯結類型變更為「左」聯結。
附註:如果將「Bed Hour Matrix」(床位小時矩陣)拖到「Clean 3」(清理 3),而不是相反,則透過使用右聯結(而不是左聯結)可以獲得期望的結果。對於聯結的方向,拖動步驟的順序很重要。聯結子句也將按相反順序 — 一定要保持比較小時的正確邏輯。
資料現在已聯結,但我們應從聯結中清理一些構件,並確保欄位保持整齊。我們不再需要「Start Hour」(開始小時)和「End Hour」(結束小時)。「Hospital Bed」(醫院床位)和「Bed」(床位)也是多餘的。最後,「Patient」(患者)欄位中的值 null 實際上表示床位未被佔用。
- 在「流程」窗格中,新增一個清理步驟以便能對聯結的資料進行整理。
- 按住 Ctrl 按一下(在 Mac 上按住 Command 按一下)以多選方式選取欄位「End Hour」(結束小時)、「Start Hour」(開始小時)和「Hospital Bed」(醫院床位),然後在工具列中選取「移除欄位」。
- 在「Patient」(患者)欄位設定檔卡上,按兩下「null」值並鍵入「Unoccupied」(未佔用)。
我們現在有了每個床位-小時占一列的資料結構;如果在該小時期間有患者佔用床位,則我們也有了患者資訊。餘下的工作就是新增輸出步驟和產生資料集本身。
- 在「流程」窗格中選取「Clean 4」(清理 4),選取加號
圖示,並選取「新增輸出」。
- 在「輸出」窗格中,將「輸出類型」變更為 .csv,然後選取「瀏覽」。
- 為名稱輸入「Bed Hour Patient Matrix」(床位小時患者矩陣),在選取「接受」儲存前選取所需的位置。
- 選取窗格底部的「執行流程」按鈕產生輸出。在狀態對話方塊中選取「完成」關閉對話方塊。
提示:有關輸出和執行流程的詳細資訊,請參閱儲存和共用工作(連結在新視窗開啟)。
最終流程應如下所示:
Tableau Desktop 中的分析
若要在繼續執行本教程之前安裝 Tableau Desktop,您可以下載免費試用版。
現在我們有了採用所需結構的資料集,我們可以執行比用原始資料更深入的分析。
- 開啟 Tableau Desktop。在「連線」窗格中選取「文字檔案」,巡覽到 Bed Hour Patient Matrix.csv 檔案,並選取「開啟」。
- 在「資料來源」索引標籤上,預設情況下資料應出現在畫布中。巡覽至「Sheet 1」。
- 在「資料」窗格中,將「Hour」(小時)拖到「度量」和「維度」分隔線的上方,將其設為離散維度。
- 將「Bed」(床位)拖到「列」架,並將「Hour」(小時)拖到「欄」架。
- 將「Patient」(患者)拖到「色彩」架。
格式設定為可選,但可以幫助使圖示更易於理解。
- 選取「色彩」架,並選取「編輯色彩」。
- 在左側的區域中,選取「Unoccupied」(未佔用)。從右側的下拉清單中,選取「西雅圖灰」調色板。
- 選取第四個最淺的灰色,並按一下「確定」。
- 再次選取「色彩」架,然後按一下「邊框」下拉清單。選取最右側的第二個灰色選項。
- 在工具列中,透過「大小」下拉清單將「標準」變更為「適合寬度」。
- 選取「設定格式」功能表,然後按一下「邊框」。
- 如果是「欄分隔符號」,選取「窗格」下拉清單並選擇一種非常淺的灰色。
- 將「層級」滑塊調整到第二個刻度標記。
- 為「欄分隔符號」重複這些步驟。將「區」色彩設定為淺灰色,並將「層級」調整到第二個刻度標記。
- 按兩下底部的工作表標籤,並將其重命名為「Bed Use by Hour」(按小時列出的床位使用情況)。
此檢視讓我們能快速查看給定床位何時處於佔用或空置狀態。
但我們可以更進一步,並計算每個床位未被佔用的小時數。
- 選取底部的新工作表標籤
開啟一個空白工作表。
- 將「Patient」(患者)拖到「列」。
- 將「Hour」(小時)拖到「欄」。右鍵按一下「小時」膠囊,以開啟功能表。選取「度量」>「計數」。
- 將「Patient」(患者)欄位的另一個副本從「資料」窗格拖到「色彩」架。
- 以滑鼠右鍵按一下軸,並選取「編輯軸」。將標題變更為「Hours」(時數)並關閉對話方塊。
- 將工作表標籤重命名為「Bed Hours by Patient」(患者佔用床位時數)。
此檢視使我們能夠確定我們有多少未佔用床位時數,而這是使用原始資料集做不到的。您可以建立哪些其他圖示或儀表板?既然您的資料結構正確,不妨試一下。
總結和資源
為了使用 Tableau Prep 組建此資料結構,我們需要執行以下操作:
- 針對我們想要分析的各個方面(本例中為床位和小時)組建資料集。
- 交叉聯結這些資料集,建立一個包含床位和小時每種可能組合的「Bed Hour Matrix」(床位小時矩陣)資料集。
- 將「Bed Hour Matrix」(床位小時矩陣)與「Patient Bed」(患者床位)資料聯結,同時確保聯結保留所有床位-槽位小時,並且聯結子句恰當地將患者床位資料與床位-小時槽位匹配。
我們使用以下計算來建立可以聯結的欄位。第二個和第三個計算從原始日期時間欄位中擷取小時資訊。
- Cross Join(交叉聯結)=
1
- 此計算只是為每一列指派值 1
- Start Hour(開始小時)=
DATEPART('hour',[Start Time])
- 這將獲取開始時間的小時並將其擷取出來。因此,「1/1/18 9:35 AM」將變為「9」。
- End Hour(結束小時)=
IFNULL(DATEPART('hour',[End Time]), 24)
- 我們可以使用
DATEPART('hour',[End Time])
,就像我們為「Start Time」(開始時間)所做的一樣。這將獲取結束時間的小時並將其擷取出來。因此,「1/1/18 4:34 AM」將變為 「4」。 - 但我們想要指明仍被佔用(沒有結束時間)的患者床位在使用中,而不是空置。為此,我們將使用
IFNULL
函數為任何缺少的結束時間指派結束時間 24 時(午夜)。如果第一個參數DATEPART('hour',[End Time])
為 null,則計算將改為返回「24」。
- 我們可以使用
附註:想要檢查您的工作?下載 Tableau Prep 已封裝流程檔案 (Hospital Beds.tflx(連結在新視窗開啟)) 和 Tableau Desktop 已封裝工作簿檔案 (Hospital Beds.twbx(連結在新視窗開啟))。
資源:需要更多訓練?參加現場訓練(連結在新視窗開啟)課程。想知道我們涵蓋的功能?請查看 Tableau Prep 線上說明中的其他主題。在尋找其他資源?Master Tableau Prep with this list of learning resources(利用此學習資源清單掌握 Tableau Prep)(連結在新視窗開啟)部落格正適合於您。