2017-03-13 3 views
0

Mit v 6.5.0 mit einer Entscheidungstabellegeifert, wie Werte in einer Liste in einer Entscheidung Tabelle zusammenzuzufassen

Ich habe ein kompaktes Java-Modell, wie es intakt geliefert wird den Web-Frontend. Daher hat die Benutzerklasse ein Feld, das ein Array von Accounts mit jeweils einem Gesamt-, Betrags- und Datumsfeld darstellt. Ich habe einfache Regeln geschrieben, aber das ist derzeit nicht möglich. Mir ist klar, dass es besser wäre, die Accounts-Objekte getrennt und mit einem Verweis auf die ID des Benutzers zu haben, aber wenn es nicht möglich ist, das zu tun, wird es Zeit sparen.

Ich muss die Account.total für einen Benutzer summieren und testen es ist innerhalb 1 von 3 verschiedenen Bereich. Dann muss ich diese Summe nehmen und die% der Summe der Betragsfelder berechnen und testen, ob das in 1 von 3 Bereichen ist. All dies ist nach einem Datumsbereich gruppiert.

In SQL für eine Gesamt und% -Bereich

SELECT u.id, SUM(a.total) AS TTLSUM, SUM(a.amount)/SUM(a.total) AS PCTSUM 
FROM User u, Account a 
WHERE u.id = a.userid 
GROUP BY u.id 
HAVING SUM(a.total) > 0 AND SUM(a.total) <=1000 
AND SUM(a.amount)/SUM(a.total) > 0.5 AND SUM(a.amount)/SUM(a.total) <=0.75 

Antwort

1

Was Sie tun, ist, dass Sie zwei Funktionen schreiben, eine für die Summe und eine für den Prozentsatz:

function boolean totalInRange(User user, double lo, double hi){ 
    // access user's double[] and calculate the sum, do the test 
    return lo < sum && sum <= hi; 
} 

Dann schreiben Sie ein paar der Regeln

rule "is sum in range x" 
when 
    $u: User() 
    eval(totalInRange($u, 0, 1000)) 
then 
    // do something 
end 
+0

Kann ich dies in der Entscheidungstabelle tun, die der Analyst unterhält ?. Wenn Code benötigt wird, den sie nicht verwalten können, mache ich das in der Java-Klasse. – csDave

+0

Sie können eine Funktion in die Entscheidungstabelle einfügen und den Särgen sagen, sie nicht zu berühren. Sie sollten das verstehen ;-) – laune

Verwandte Themen