SUM( CASE WHEN CURR.FINAL_LEVEL = 'AAA' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS AAA_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'AA' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS AA_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A-' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_MINUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BBB' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BBB_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB-' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_MINUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'B+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS B_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'B' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS B_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'CCC' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS CCC_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'CC' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS CC_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'C' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS C_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'D' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS D_BAL\,
0 AS NOT_RATING_BAL\,0 AS UP_BAL\,0 AS DOWN_BAL\,0 AS UP_RATIO\,0 AS DOWN_RATIO\,0 AS CHG_EXPONENT
FROM CURR
WHERE NOT EXISTS ( SELECT 1 FROM LAST_R WHERE LAST_R.CUST_NO = CURR.CUST_NO )
)\,
NR AS (
SELECT
LAST_R.FINAL_LEVEL\,SUM(IFNULL( LAST_R.BORR_BAL\, 0 )) AS NOT_RATING_BAL
FROM LAST_R
WHERE NOT EXISTS ( SELECT 1 FROM CURR WHERE CURR.CUST_NO = LAST_R.CUST_NO )
GROUP BY LAST_R.FINAL_LEVEL
)\,
CHG AS (
SELECT
SUM( CASE WHEN CURR.FINAL_LEVEL <> LAST_R.FINAL_LEVEL THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS CHG_BAL
FROM CURR LEFT JOIN LAST_R ON LAST_R.CUST_NO = CURR.CUST_NO
)
SELECT * FROM (
SELECT
S.SCALE_LEVEL AS FINAL_LEVEL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'AAA' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS AAA_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'AA' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS AA_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'A-' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS A_MINUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BBB' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BBB_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'BB-' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS BB_MINUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'B+' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS B_PLUS_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'B' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS B_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'CCC' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS CCC_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'CC' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS CC_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'C' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS C_BAL\,
SUM( CASE WHEN CURR.FINAL_LEVEL = 'D' THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS D_BAL\,
NR.NOT_RATING_BAL\,
SUM( CASE WHEN CURR.ORDER_NUM < LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS UP_BAL\,
SUM( CASE WHEN CURR.ORDER_NUM > LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END ) AS DOWN_BAL\,
CASE WHEN CHG.CHG_BAL = 0 THEN 0 ELSE SUM( CASE WHEN CURR.ORDER_NUM < LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END )/ CHG.CHG_BAL
END AS UP_RATIO\,
CASE WHEN CHG.CHG_BAL = 0 THEN 0 ELSE SUM( CASE WHEN CURR.ORDER_NUM > LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END )/ CHG.CHG_BAL
END AS DOWN_RATIO\,(
CASE WHEN CHG.CHG_BAL = 0 THEN 0 ELSE SUM( CASE WHEN CURR.ORDER_NUM < LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END )/ CHG.CHG_BAL
END)-(CASE WHEN CHG.CHG_BAL = 0 THEN 0 ELSE SUM( CASE WHEN CURR.ORDER_NUM > LAST_R.ORDER_NUM THEN IFNULL( CURR.BORR_BAL\, 0 ) ELSE 0 END )/ CHG.CHG_BAL END ) AS CHG_EXPONENT
FROM NS_CFG_MAIN_SCALE S
LEFT JOIN LAST_R ON LAST_R.FINAL_LEVEL = S.SCALE_LEVEL
LEFT JOIN CURR ON CURR.CUST_NO = LAST_R.CUST_NO
LEFT JOIN NR ON NR.FINAL_LEVEL = S.SCALE_LEVEL
LEFT JOIN CHG ON 1 = 1
GROUP BY S.SCALE_LEVEL\,S.ORDER_NUM\,NOT_RATING_BAL\,CHG.CHG_BAL
ORDER BY S.ORDER_NUM ) A
UNION
SELECT * FROM NEW_R",,,,,,
"18","rptModelMonitorDiff","模型区分能力监控报表","DM DBMS","WITH A AS (
SELECT 0 AS DOWN\, 10 AS UP\, 1 AS SCORE_AREA UNION
SELECT 10 AS DOWN\, 20 AS UP\, 2 AS SCORE_AREA UNION
SELECT 20 AS DOWN\, 30 AS UP\, 3 AS SCORE_AREA UNION
SELECT 30 AS DOWN\, 40 AS UP\, 4 AS SCORE_AREA UNION
SELECT 40 AS DOWN\, 50 AS UP\, 5 AS SCORE_AREA UNION
SELECT 50 AS DOWN\, 60 AS UP\, 6 AS SCORE_AREA UNION
SELECT 60 AS DOWN\, 70 AS UP\, 7 AS SCORE_AREA UNION
SELECT 70 AS DOWN\, 80 AS UP\, 8 AS SCORE_AREA UNION
SELECT 80 AS DOWN\, 90 AS UP\, 9 AS SCORE_AREA UNION
SELECT 90 AS DOWN\, 100 AS UP\, 10 AS SCORE_AREA
)\,
B AS (
SELECT
V.EFFECTIVE_Q\,
A.SCORE_AREA\,
COUNT( V.FINAL_LEVEL ) AS CUST_CNT\,
SUM( CASE WHEN V.FINAL_LEVEL <> 'D' THEN 1 ELSE 0 END ) AS GOOD_CNT\,
SUM( CASE WHEN V.FINAL_LEVEL = 'D' THEN 1 ELSE 0 END ) AS BAD_CNT
FROM VIEW_RPT_BASE_INFO V\, A
WHERE V.MODEL_SCORE > A.DOWN
AND V.MODEL_SCORE <= A.UP
AND V.EFFECTIVE_MONTH BETWEEN DATE_FORMAT( ADD_MONTHS( '#EFFECTIVE_MONTH'\, -12 )\, '%Y%m' )
AND DATE_FORMAT( '#EFFECTIVE_MONTH'\, '%Y%m' )
AND V.MODEL_CODE='#MODEL_CODE'
GROUP BY V.EFFECTIVE_Q\,A.SCORE_AREA
)\,
C AS (
SELECT DISTINCT
B.EFFECTIVE_Q\,
B.SCORE_AREA\,
CAST(SUM( CUST_CNT ) OVER ( PARTITION BY B.EFFECTIVE_Q )AS DECIMAL) AS TOT_CUST_CNT\,
CAST(SUM( B.GOOD_CNT ) OVER ( PARTITION BY B.EFFECTIVE_Q ) AS DECIMAL) AS TOT_GOOD_CNT\,
CAST(SUM( B.BAD_CNT ) OVER ( PARTITION BY B.EFFECTIVE_Q ) AS DECIMAL) AS TOT_BAD_CNT
FROM B
)\,
D AS (
SELECT
T1.EFFECTIVE_Q\,
T1.SCORE_AREA\,
SUM( T2.GOOD_CNT ) AS GOOD_CNT\,
SUM( T2.BAD_CNT ) AS BAD_CNT
FROM(
SELECT
B.EFFECTIVE_Q\,
B.SCORE_AREA\,
SUM( B.GOOD_CNT ) AS GOOD_CNT\,
SUM( B.BAD_CNT ) AS BAD_CNT
FROM B
GROUP BY B.EFFECTIVE_Q\, B.SCORE_AREA
) T1 INNER JOIN (
SELECT
B.EFFECTIVE_Q\,
B.SCORE_AREA\,
SUM( B.GOOD_CNT ) AS GOOD_CNT\,
SUM( B.BAD_CNT ) AS BAD_CNT
FROM B
GROUP BY B.EFFECTIVE_Q\, B.SCORE_AREA
) T2 ON T1.EFFECTIVE_Q = T2.EFFECTIVE_Q
AND T1.SCORE_AREA >= T2.SCORE_AREA
GROUP BY T1.EFFECTIVE_Q\, T1.SCORE_AREA
)\,
E AS (
SELECT
T1.EFFECTIVE_Q\,
T1.SCORE_AREA\,
SUM( T2.CUST_CNT ) AS CUST_CNT\,
SUM( T2.BAD_CNT ) AS BAD_CNT
FROM(
SELECT
B.EFFECTIVE_Q\,
B.SCORE_AREA\,
SUM( B.CUST_CNT ) AS CUST_CNT\,
SUM( B.BAD_CNT ) AS BAD_CNT
FROM B
GROUP BY B.EFFECTIVE_Q\, B.SCORE_AREA
) T1 INNER JOIN (
SELECT
B.EFFECTIVE_Q\,
B.SCORE_AREA\,
SUM( B.CUST_CNT ) AS CUST_CNT\,
SUM( B.BAD_CNT ) AS BAD_CNT
FROM B
GROUP BY B.EFFECTIVE_Q\, B.SCORE_AREA
) T2 ON T1.EFFECTIVE_Q = T2.EFFECTIVE_Q
AND T1.SCORE_AREA >= T2.SCORE_AREA
GROUP BY T1.EFFECTIVE_Q\, T1.SCORE_AREA
)\,
KS AS (
SELECT
T.EFFECTIVE_Q\,
MAX( T.DIFF ) AS KS
FROM(
SELECT
D.EFFECTIVE_Q\,
D.SCORE_AREA\,
CASE WHEN C.TOT_GOOD_CNT=0 THEN 0 ELSE D.GOOD_CNT / C.TOT_GOOD_CNT END AS GOOD_RATIO\,
CASE WHEN C.TOT_BAD_CNT=0 THEN 0 ELSE D.BAD_CNT / C.TOT_BAD_CNT END AS BAD_RATIO\,
ABS( (CASE WHEN C.TOT_GOOD_CNT=0 THEN 0 ELSE D.GOOD_CNT / C.TOT_GOOD_CNT END) - (CASE WHEN C.TOT_BAD_CNT=0 THEN 0 ELSE D.BAD_CNT / C.TOT_BAD_CNT END) ) AS DIFF
FROM D
LEFT JOIN C ON C.EFFECTIVE_Q = D.EFFECTIVE_Q
AND C.SCORE_AREA = D.SCORE_AREA
) T
GROUP BY T.EFFECTIVE_Q
)\,
AR AS (
SELECT
T.EFFECTIVE_Q\,
ROUND( SUM( T.DIFF )/( T.NORMAL_RATIO / 2 )\, 4 ) AS AR
FROM (
SELECT
E.EFFECTIVE_Q\,
E.SCORE_AREA\,
CASE WHEN C.TOT_CUST_CNT=0 THEN 0 ELSE E.CUST_CNT / C.TOT_CUST_CNT END AS CUST_RATIO\,
CASE WHEN C.TOT_BAD_CNT=0 THEN 0 ELSE E.BAD_CNT / C.TOT_BAD_CNT END AS BAD_RATIO\,
((CASE WHEN C.TOT_BAD_CNT=0 THEN 0 ELSE E.BAD_CNT/C.TOT_BAD_CNT END)-E.CUST_CNT/C.TOT_CUST_CNT)/2*1/CC.TOT_CUST_CNT AS DIFF\,
(CC.TOT_CUST_CNT-CC.TOT_BAD_CNT)/CC.TOT_CUST_CNT AS NORMAL_RATIO
FROM E LEFT JOIN C ON C.EFFECTIVE_Q = E.EFFECTIVE_Q
AND C.SCORE_AREA = E.SCORE_AREA
LEFT JOIN ( SELECT DISTINCT C.EFFECTIVE_Q\, C.TOT_CUST_CNT\, C.TOT_BAD_CNT FROM C ) CC
ON CC.EFFECTIVE_Q = E.EFFECTIVE_Q
) T GROUP BY T.EFFECTIVE_Q\, T.NORMAL_RATIO
)
SELECT
KS.EFFECTIVE_Q\,
KS.KS\,
AR.AR\,
CASE WHEN AR.AR >= 0.4 AND KS.KS >= 0.4 THEN '低度'
WHEN AR.AR >= 0.3 AND AR.AR < 0.4 AND KS.KS < 0.4 THEN '中度'
WHEN AR.AR < 0.3 OR KS.KS < 0.3 THEN '高度'
ELSE '低度' END AS RISK_LEVEL\,
CC.TOT_NORMAL_CNT\,
CC.TOT_BAD_CNT\,
CC.TOT_CUST_CNT
FROM KS INNER JOIN AR ON AR.EFFECTIVE_Q = KS.EFFECTIVE_Q
LEFT JOIN (SELECT DISTINCT C.EFFECTIVE_Q\, C.TOT_CUST_CNT\, C.TOT_BAD_CNT\, C.TOT_CUST_CNT - C.TOT_BAD_CNT AS TOT_NORMAL_CNT FROM C ) CC
ON CC.EFFECTIVE_Q = KS.EFFECTIVE_Q
ORDER BY KS.EFFECTIVE_Q",,,,,,
"19","rptModelMonitorStable","模型稳定性监控报表","DM DBMS","WITH A AS (
SELECT 0 AS DOWN\, 10 AS UP\, 1 AS SCORE_AREA UNION
SELECT 10 AS DOWN\, 20 AS UP\, 2 AS SCORE_AREA UNION
SELECT 20 AS DOWN\, 30 AS UP\, 3 AS SCORE_AREA UNION
SELECT 30 AS DOWN\, 40 AS UP\, 4 AS SCORE_AREA UNION
SELECT 40 AS DOWN\, 50 AS UP\, 5 AS SCORE_AREA UNION
SELECT 50 AS DOWN\, 60 AS UP\, 6 AS SCORE_AREA UNION
SELECT 60 AS DOWN\, 70 AS UP\, 7 AS SCORE_AREA UNION
SELECT 70 AS DOWN\, 80 AS UP\, 8 AS SCORE_AREA UNION
SELECT 80 AS DOWN\, 90 AS UP\, 9 AS SCORE_AREA UNION
SELECT 90 AS DOWN\, 100 AS UP\, 10 AS SCORE_AREA
)\,
B AS (
SELECT
V.EFFECTIVE_Q\,
A.SCORE_AREA\,
V.CUST_NO
FROM VIEW_RPT_BASE_INFO V\,A
WHERE V.MODEL_SCORE > A.DOWN
AND V.MODEL_SCORE <= A.UP
AND V.EFFECTIVE_MONTH BETWEEN DATE_FORMAT( ADD_MONTHS( '#EFFECTIVE_MONTH'\, -12 )\, '%Y%m' )
AND DATE_FORMAT( '#EFFECTIVE_MONTH'\, '%Y%m' )
AND V.MODEL_CODE='#MODEL_CODE'
)\,
B1 AS ( SELECT EFFECTIVE_Q\, SCORE_AREA\, COUNT( 1 ) AS CUST_CNT FROM B GROUP BY EFFECTIVE_Q\, SCORE_AREA )\,
B2 AS ( SELECT EFFECTIVE_Q\, CAST(SUM( CUST_CNT ) AS DECIMAL) AS TOT_CUST_CNT FROM B1 GROUP BY EFFECTIVE_Q )\,
B3 AS (
SELECT
B1.EFFECTIVE_Q\,
B1.SCORE_AREA\,
B1.CUST_CNT / B2.TOT_CUST_CNT AS CURR_RATIO
FROM B1 LEFT JOIN B2 ON B2.EFFECTIVE_Q = B1.EFFECTIVE_Q
ORDER BY B1.EFFECTIVE_Q\, B1.SCORE_AREA
)\,
C AS (
SELECT
V.EFFECTIVE_Q\,
A.SCORE_AREA\,
V.CUST_NO
FROM VIEW_RPT_BASE_INFO V\,A
WHERE V.MODEL_SCORE > A.DOWN AND V.MODEL_SCORE <= A.UP
AND V.EFFECTIVE_MONTH BETWEEN DATE_FORMAT( ADD_MONTHS( '#EFFECTIVE_MONTH'\, -24 )\, '%Y%m' )
AND DATE_FORMAT( ADD_MONTHS( '#EFFECTIVE_MONTH'\, -13 )\, '%Y%m' )
AND V.MODEL_CODE='#MODEL_CODE'
)\,
C1 AS ( SELECT EFFECTIVE_Q\, SCORE_AREA\, COUNT( 1 ) AS CUST_CNT FROM C GROUP BY EFFECTIVE_Q\, SCORE_AREA )\,
C2 AS ( SELECT EFFECTIVE_Q\, CAST(SUM( CUST_CNT ) AS DECIMAL) AS TOT_CUST_CNT FROM C1 GROUP BY EFFECTIVE_Q )\,
C3 AS (
SELECT
C1.EFFECTIVE_Q\,
C1.SCORE_AREA\,
C1.CUST_CNT / C2.TOT_CUST_CNT AS LAST_RATIO
FROM C1 LEFT JOIN C2 ON C2.EFFECTIVE_Q = C1.EFFECTIVE_Q
)
SELECT
EFFECTIVE_Q\,
ROUND(PSI\,4) AS PSI\,
CASE WHEN PSI <= 0.1 THEN '低度' WHEN PSI > 0.1 AND PSI <= 0.25 THEN '中度'