---
description: 此章節主要介紹 SAS 平台如何整合工作流程生命週期
---

# 第 19 章：工作流程

## 基本介紹

首先當我們需要有個產品和平台用於管理模型生命週期時，則 SAS Viya 分析平台中的 SAS Model Manager 產品就是專門用於管理模型生命週期的產品，並且其最基本一定會包括 SAS Visual Analytics 產品用於設計模型評估客製化報表和 SAS Workflow Manager 產品用於設計模型評估客製化流程。對於企業客戶來說業務流程管理 (Business Process Management，BPM) 相關工具對於改進和優化內部流程來說非常重要，但是要充分利用業務流程管理的軟體，則我們必須了解產業的趨勢，目前已經產業趨勢已經往無代碼或低代碼的平台發展，以利讓使用者能夠在幾乎不知道程式碼情況下建立應用程式，主要透過拖拉點選等視覺化操作的開發環境讓業務部門的使用者開發應用程式以滿足業務流程的需求，而無需依賴資訊部門的資訊人員，當然資訊人員更能夠透過 SAS Viya 分析平台中的 SAS Environment Manager 所提供的幾乎即時的儀表版資訊有效針對 SAS Viya 分析平台中的應用程式進行維運管理，同時 SAS Viya 分析平台更有提供強大的資訊安全管理機制，像是身份驗證、權限控管、稽核記錄、… 等完整功能，以利協助企業落實資訊安全政策，像是符合 ISO 27001:2013 的國際標準。

接著我們將能夠根據企業組織需求客製工作流程，並且最大限度地減少對外部合作夥伴的需求以及提高自動化流程的速度和透明度，如今無程式碼平台正在改善醫療業，金融業和資訊技術等產業的流程管理。此外人工智慧 (Artificial Intelligence，AI) 對於促進業務流程的目標更為重要，像是如何改善客戶體驗和提高效率，則需要透過自然語言處理，機器學習，大數據和視覺識別等技術概念，此時資料科學家更能夠透過 SAS Viya 分析平台中的 SAS Model Studio 以視覺化的網站操作界面，以管線的方式在短時間內建立出最常見的人工智慧和機器學習模型，過程中無需撰寫任何程式碼，並且再將模型分析的結果用於自動化改善 SAS Workflow Manager 產品所設計的業務工作流程，以利消除瓶頸和減少繁瑣的工作任務，更進一步再由 SAS Visual Analytics 產品所設計的分析報表提供見解資訊，請注意不論是所設計的業務工作流程或所設計的分析報表，過程中無需撰寫任何程式碼。

再來 SAS Workflow Manager 主要符合 BPMN 2.0 標準的業務工作流程，並且高效且可擴展將能夠與其他標準業務流程進行整合，以及 BPMN 2.0 標準，同時也是 ISO 19510:2013 的國際標準，其中提到 BPMN 的主要目標是提供業務所有使用者皆能夠理解分析師所建立的流程符號，並且負責實作的技術開發人員將執行這些業務流程，最後是管理和監控這些業務流程的業務人員，因此 BPMN 為業務流程設計和流程之間的差距建立了標準化。此外 SAS Workflow Manager 除了遵循 BPMN 標準之外，更重要的是 SAS 將多年的經驗轉化為最佳實務，像是只有最基本的工作流程才能表示為單個順序流程，而大多數工作流程皆包含活動，事件和閘道的組合，其中工作流程定義通常使用一個或多個工作流程模式，所謂工作流程模式是一種流程結構，用於定義工作流程的行為方式，主要有六大類型，分別為：

| 編號 | 工作流程模式的類型                | 描述說明                  |
| -- | ------------------------ | --------------------- |
| 1  | 順序 (Sequential)          | 主要定義了工作流元素的單個路徑。      |
| 2  | 發散 (Divergent)           | 主要定義了分成多個備用路徑平行執行。    |
| 3  | 聚集 (Convergent)          | 主要定義了在同一元素上合併的多個路徑執行。 |
| 4  | 終止 (Termination)         | 主要定義了路徑到達結束或終止的元素。    |
| 5  | 取消 (Cancellation)        | 主要定義了取消活動或流程的元素。      |
| 6  | 多個實體 (Multiple Instance) | 主要定義了每個參與者單獨執行的任務實體。  |

最後雖然我們能夠透過視覺化的網站操作界面無需撰寫任何程式碼的方式完成遵循 BPMN 標準的業務工作流程之外，在 SAS Workflow Manager 產品中更提供能夠調用 REST API 網路服務操作的服務任務，這代表著能夠透過開發程式碼的方式整合企業內部既有的工作流程，至於若是企業內部既有的工作流程非 REST API，則我們將能夠透過 Python 搭配 Flask 微網站框架在短時間內開發出整合企業內部既有的工作流程的 REST API，以利整合至 SAS Workflow Manager 的業務流程定義中。此外若是考量 REST API 的資訊安全，則建議使用 SAS Job Execution Web Application 開發執行 Python 程式碼的工作任務，透過此方式所開發的工作任務透過 SAS Viya 分析平台的安全機制將能夠確保由已授權的服務使用者在業務工作流程中的正確的服務任務進行執行。

## 整合應用

首先目前許多企業面臨部署分析模型的生命週期的挑戰，我們先將分析模型的生命週期分為三個主要階段，分別為：

1. 資料階段 (Data)：主要會將業務營運資料轉換並載入為商業目標的分析。
2. 發現階段 (Discovery)：主要會產生分析統計報表和開發機器學習模型了解趨勢。
3. 部署階段 (Deployment)：主要使用模型在關鍵業務中做出預測，以利推動營運決策的流程。

此時 SAS Model Manager 搭配 SAS Workflow Manager 就能夠滿足模型的生命週期，其主要就是將模型儲存在公用模型儲存庫 (Common Model Repository) 中，其中模型主要能夠透過 Model Studio、SAS Studio、SAS Visual Analytics、SAS 程式碼、… 等方式所建立，並且能夠透過專案的方式進行模型管理，同時還可以比較模型結果，監控模型成效和發佈模型將模型發佈至 CAS、SAS Micro Analytic Service、Hadoop 和 Teradata 中，以利透過外部應用程式或介面進行評分。此外我們更能夠建立自定義工作流程滿足業務需求，並且對應相關的業務流程，更進一步追蹤工作流程中管理專案模型部署的情況。

接著我們能夠透過[官方網站](https://go.documentation.sas.com/?cdcId=mdlmgrcdc\&cdcVersion=15.2\&docsetId=mdlmgrqs\&docsetTarget=p1246sra0oqf4sn1pt5i6h55g406.htm)所提供的範例程式教學快速上手 SAS Model Manager 的基本操作，其中主要是針對有關住房貸款資訊 HMEQ 資料集建立信貸風險模型的管理流程，而針對模型的管理主要有以下操作步驟，分別為：

1. 登入 SAS Model Manager
2. 匯入資料集
3. 建立專案
4. 匯入模型
5. 設定模型屬性
6. 比較模型
7. 測試模型
8. 選擇冠軍模型
9. 發佈冠軍模型
10. 監控冠軍模型的成效

再來我們也能夠搭配使用 SAS Workflow Manager 建立工作流程，以利管理模型的訓練和評估，至於工作流程包括匯入模型，設定冠軍和挑戰者模型，核准冠軍模型以及為專案發佈冠軍模型等任務，至於要如何快速上手 SAS Workflow Manager 的基本操作，請參考[官方網站](https://go.documentation.sas.com/?docsetId=wfsqs\&docsetTarget=titlepage.htm\&docsetVersion=2.2\&locale=zh-TW)所提供的範例程式教學。

最後已經註冊的模型皆會儲存在模型儲存庫內容的根目錄中，此時必須有經過身份驗證的使用者能能夠存取註冊到 SAS Model Manager 預設和標準儲存庫中的模型，以及我們主要能夠透過 SAS Model Manager 建立標準儲存庫。此外將模型部署到自動化業務流程中將會有許多整合細節需要解決，此時 SAS Model Manager 搭配 SAS Workflow Manager 就能夠滿足模型的生命週期，提供可靠和高效的模型選擇、測試、部署、監控和分析等自動化部署流程。

## 開始使用

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9axxOnnAeiSxFlPt2%2Fimage.png?alt=media\&token=cb89fb30-d294-4701-a430-7466371b4a62)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9bpNputdx9hl_cxsw%2Fimage.png?alt=media\&token=037ad420-0cc5-44a7-9500-aa6ce5ddc0c5)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9bwL1s6Yp5VkZZQty%2Fimage.png?alt=media\&token=c4f952fd-de80-4e18-95cd-3efedd49b54b)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9bz4HixXk3MaMrv2n%2Fimage.png?alt=media\&token=08531d82-4291-48b6-9a95-e42712812eb1)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9c7u8yVUeUbY5P2hB%2Fimage.png?alt=media\&token=2dfb5095-2c4c-4acf-a6a4-c2b8c8f63b8c)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9c4zgXhPk9aW4oUe4%2Fimage.png?alt=media\&token=78ed7a6c-f5d9-4a4f-b0cc-f67c93e59d1b)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cB3PulxdYBX4FMGR%2Fimage.png?alt=media\&token=9603bdbd-a3ec-4003-8196-c8a9d63dd7bd)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cCqG1tw_sdUreZ_0%2Fimage.png?alt=media\&token=b059bca6-3a67-4c6b-ad3a-d0fcaf162f5d)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cF1_ZdN1iEbXFLgF%2Fimage.png?alt=media\&token=49cbfd4c-084e-46e1-bcef-a0606d1a5096)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cHOCzaMaIxOxiGUR%2Fimage.png?alt=media\&token=201bf56e-86d9-4cb4-bc32-731807bda103)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cJTfsca3NOok3qTm%2Fimage.png?alt=media\&token=9d9522eb-8276-4854-a960-23394510aad8)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cLWpJ7WKPDeuV9cn%2Fimage.png?alt=media\&token=0d0deef7-0ced-4fc3-9850-c8230abbe282)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cOAFSDYjCvUuvL5E%2Fimage.png?alt=media\&token=b9afd48a-4fef-4cee-a5f4-7157ea417512)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cRGqRl67bNv-qfY7%2Fimage.png?alt=media\&token=99380960-85ed-4e45-a4c4-04f0174090a0)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cVr7sr3QdiapbPAW%2Fimage.png?alt=media\&token=572e0311-4a30-40f6-96ae-144a44e0ffef)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cb05Ha5_3xq8gI14%2Fimage.png?alt=media\&token=a52e6f74-6338-4216-8aad-6d38242ac191)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9cePToV6FCpIQV-cg%2Fimage.png?alt=media\&token=9ed5256a-4909-42fe-8f25-dce07d18f741)

![](https://2526445221-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LogKtcfXJUZePXhVAsn%2F-Lp9awhn_gDLXRyTSnUu%2F-Lp9chepQptZTMsVx9xO%2Fimage.png?alt=media\&token=e0bc94b4-a43b-4657-b2d1-53f86970e577)
