6.決策表

2019-09-19 11:35 更新

6.決策表

簡介

決策表是一種以表格形式表現(xiàn)規(guī)則的工具,它非常適用于描述處理判斷條件較多,各條件又相互組合、有多種決策方案的情況,決策表提供精確而簡潔描述復(fù)雜邏輯的方式,可將多個條件及與這些條件滿足后要執(zhí)行動作以圖形化形式進行對應(yīng),對于決策表的定義,我們提供的是全可視化、圖形化的操作方式,通過簡單的鼠標(biāo)點擊就可以快速定義出與業(yè)務(wù)相匹配的決策表。

打開URule Pro的控制臺,在項目的“決策表”節(jié)點上右鍵,從彈出的菜單中選擇“添加決策表”項,就可以創(chuàng)建一個決策表文件,如下圖所示:

使用決策表

可以看到,在決策表當(dāng)中,同樣需要我們導(dǎo)入需要使用的變量庫、參數(shù)庫、常量庫及動作庫。

和規(guī)則集中的規(guī)則一樣,可以為決策表添加若干屬性,但不同的是決策表中可添加的屬性只有五個,其含義和作用與決策集中的規(guī)則相同,這里不再贅述,如下圖所示:

一旦為決策表定義了屬性,那么這些屬性將會被應(yīng)用到?jīng)Q策表中定義的每個規(guī)則上。

實際使用當(dāng)中,我們可能會將若干個決策表或若干個決策表與若干個決策集放在一個知識包中使用,這個時候如果沒有使用決策流來對它們的執(zhí)行順序進行編排的話,那么優(yōu)先級屬性的作用就顯現(xiàn)出來,通過定義優(yōu)先級屬性,可以實現(xiàn)若干個決策表文件與若干個決策集文件放在一個知識包中執(zhí)行順序的編排,也就是優(yōu)先級的值越大,執(zhí)行越靠前。

URule Pro中的決策表,整體可分為左右兩個部分,分別是條件列部分與動作列部分,它們之間以一較粗的灰黑色線分隔,該線左邊為條件列,右邊則為動作列。在導(dǎo)入好相關(guān)的變量庫或參數(shù)庫后,那就可以在條件列的列頭上右鍵,通過右鍵菜單選擇當(dāng)前條件要綁定的變量或參數(shù),如下圖所示:

在URule Pro當(dāng)中,所有的彈出菜單在不選擇菜單項目時,如果需要隱藏,那么必須在空白處雙擊才能實現(xiàn)隱藏,之所以這樣做是為了防止用戶因為誤單擊而出現(xiàn)已彈出菜單隱藏的情況。同時對于所有的二級菜單,如果菜單項目超過20個,在二級菜單頂部會出現(xiàn)過濾框,可在這個框中對二級菜單項目進行過濾,以快速找到目標(biāo)菜單項。

要設(shè)置決策表的條件,我們必須先為條件列設(shè)置好與之綁定的變量或參數(shù),否則是無法設(shè)置當(dāng)前條件列下單元格中的條件的。URule Pro中的決策表提供了三種類型的動作列,分別是:賦值動作列、執(zhí)行方法動作列以及控制臺輸出動作列。

所謂的賦值動作列,就是指在條件列相關(guān)對應(yīng)條件滿足后對某個目標(biāo)變量或參數(shù)進行賦值,同樣在設(shè)置賦值動作列時,必須先插入一個賦值動作列,然后選擇與當(dāng)前綁定的參數(shù)或變量名稱,最后才能在當(dāng)前列對應(yīng)的單元格中輸入具體值,在對應(yīng)的條件滿足時為目標(biāo)變量或參數(shù)賦值,如下圖所示:

執(zhí)行方法動作列就是在這個列當(dāng)中,在相關(guān)條件滿足時執(zhí)行指定的方法。執(zhí)行方法動作列與賦值動作列不同,我們需要做的就是添加一個執(zhí)行方法動作列,而不用將該列與任何變量、參數(shù)或方法綁定,添加好執(zhí)行方法動作列后,就可以在該列對應(yīng)的單元格中添加具體的要執(zhí)行的方法即可,如圖所示:

所謂的控制臺輸出動作列,就是將該列對應(yīng)的單元格里設(shè)置的內(nèi)容直接輸出至控制臺,其效果與Java中的System.out.println(...)效果完全一致。

添加好條件列并配置好與之綁定的參數(shù)和變量后,接下來就可以在該列對應(yīng)的單元格添加具體的條件,添加條件方法比較簡單,在目標(biāo)單元格右鍵,在彈出的菜單中選擇“配置條件”項即可。

在彈出的配置條件窗口中,可以看到,這個配置條件的窗口采用的是向?qū)綏l件配置方式,與“向?qū)揭?guī)則”中條件配置方式基本一致,不同的地方是向?qū)經(jīng)Q策表中向?qū)綏l件配置不能添加“聯(lián)合條件”,同時對于單個條件不用指定條件左值(這是因為當(dāng)前條件列的列頭已與具體的參數(shù)或變量綁定,這個綁定的參數(shù)或變量就是其下所有條件單元格條件的左值),如下圖所示:

對于賦值動作列,在綁定好要賦值的參數(shù)或變量后,就可以在該列對應(yīng)的單元格中選擇輸入具體的值,可以看到在對賦值動作列對應(yīng)的單元格設(shè)置值時,其可選值的范圍與操作方式與“向?qū)揭?guī)則”中條件右值的設(shè)置方式完全相同。

對于執(zhí)行方法動作列,在設(shè)置其下具體單元格中要執(zhí)行的方法時,我們需要先導(dǎo)入包含已定義好方法的動作庫文件,否則是無法操作的,一旦導(dǎo)入動作庫文件,我們就可以設(shè)置執(zhí)行方法動作列下對應(yīng)的單元格中需要執(zhí)行的方法:

在設(shè)置具體要執(zhí)行的方法時,與“向?qū)揭?guī)則”中動作設(shè)置中執(zhí)行方法部分的設(shè)置完全相同。

對于控制臺輸出動作列,其設(shè)置方式與賦值動作列基本一致,唯一不同的地方是它不需要設(shè)置與該列綁定的參數(shù)或變量,因為它作用就是將當(dāng)前列單元格中定義的內(nèi)容直接輸出到控制臺,所以一般用于調(diào)試。

下面是一個已設(shè)置好的向?qū)經(jīng)Q策表的截圖,在這個例子當(dāng)中,有三個條件列,兩個動作列。

在上面的截圖中,按一行一個規(guī)則的標(biāo)準(zhǔn)來計算,最張生成的規(guī)則有八個。因為一行對應(yīng)一條規(guī)則,所以在上面的截圖當(dāng)中,第一行對應(yīng)的規(guī)則用腳本式規(guī)則表現(xiàn)就是下面的樣子:

if
    員工.car==true && 員工.house==true && 員工.married==true
then
    員工.username="張三";
    out(員工.username);
end;

從Excel中導(dǎo)入決策表

URule Pro中的決策表支持從外部的Excel中導(dǎo)入,在Excel中按要求定義好決策表,然后導(dǎo)入即可使用。打開決策表編輯器,可以看到工具欄上有“導(dǎo)入Excel”按鈕,點擊該按鈕在彈出的窗口中選擇要導(dǎo)入的Excel文件即可。如下圖所示Excel:

導(dǎo)入后決策表效果如下:

我們來看下Excel中如何定義決策表(下載這個Excel)。

Excel中定義決策表,與URule Pro中實際的決策表區(qū)別不大,也分為條件列和動作列,我們先來看看條件列如何定義。

條件列 {#id-6.決策表-條件列}

對于條件列的列頭支持變量及參數(shù)兩種類型的值,如上圖中的“員工.年齡”、“員工.性別”兩個條件列采用的都是變量,在定義的時候要求我們在要導(dǎo)入的項目中已定義好對應(yīng)的變量,比如這里的“員工”,那當(dāng)前要導(dǎo)入的項目中要有一個變量分類名為“員工”,這樣導(dǎo)入時引擎會自動查找這個變量分類,如果Excel里定義里某個變量分類或具體分類,但在項目中不存在這么個變量分類或變量,則在導(dǎo)入時會失敗。

列頭在定義時要放在第一行,這是必須的,否則在導(dǎo)入時會產(chǎn)生錯誤。列頭定義好后,接下來就可以定義對應(yīng)的具體條件了。條件在定義時只需要具體的比較操作符及條件右值即可,如下圖所示:

多條件連接時與、或可使用 || 及&&表示,如果是等于(==),則等于號可省略不寫,如下圖所示:

上圖中,“員工.性別”屬性只能為男和女兩種,在定義條件時可不寫等于號;“員工.年齡”最后一個條件中等于65或70或80也省略了等于號。需要特別指出的是,多條件不支持括號,不能用括號把多個條件連接。

動作列 {#id-6.決策表-動作列}

動作列支持兩種類型:一種是用于賦值的動作列(如上圖中的員工.薪水以及員工.地址兩列都是用于賦值操作的);另一種就是輸出到控制臺的動作列(如上圖中的控制臺輸出列)。在URule Pro當(dāng)中通過為列頭添加備注來區(qū)分當(dāng)前動作列是賦值列還是輸入到控制臺的列。如果是賦值列,則需要為列頭添加“賦值”或“assign”的字符串備注,如果是輸出到控制臺的列,則列表添加“控制臺輸出”或"out"的字符串備注,如下圖所示:

定義好動作列表后,在下面的行中就可以定義具體的內(nèi)容,需要指出的是,目前內(nèi)容只支持字符數(shù)字之類的簡單值,不支持內(nèi)容里采用別的參數(shù)或變量或調(diào)用方法等。同時在Excel中定義決策表時,決策表需要放在第一個Sheet頁中,對于定義的決策表外觀上的修飾不影響決策表的導(dǎo)入,如上圖中決策表邊線及背景色等有無皆可。

到這里Excel也就定義好了,接下來只需要打開我們的決策表文件,選擇工具欄上的“導(dǎo)入Excel”按鈕,將這個Excel文件導(dǎo)入即可使用。

示例

我們采用之前定義好的“會員”這個變量來實現(xiàn)一個簡單的決策表示例,通過對當(dāng)前會員自身各個條件的判斷,從而給會員的“級別”屬性賦值,做好的決策表如下圖所示:

在這個例子當(dāng)中,有三列條件,第一列是年齡,第二列是婚否,第三列是性別;在年齡列中,我們將年齡劃分為四個區(qū)段,每個區(qū)段又通過第二列的婚否和第三列的性別拆分出四個條件,所以上面的決策表在運行時共有16個規(guī)則產(chǎn)生,且每個規(guī)則都是互斥的;最后一列是變量賦值列,在每行條件滿足后都會對“會員”變量的“等級”屬性進行賦值。

配置好決策表后,切換到“知識包”節(jié)點,添國一個新的知識包,將這個決策表文件添加到這個新包當(dāng)中,點擊工具欄上的“快速測試”按鈕,對這個決策表進行快速測試,如下圖所示:

對應(yīng)我們的決策表,可以看到上述條件剛好吻合決策表第7行對應(yīng)的規(guī)則,所以可以看到“等級”屬性被賦上12的值。在這個測試窗口中,我們還可以修改年齡、性別及婚否的值,以進一步驗證其它情況下決策表對“等級”屬性的賦值。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號