Using a SQL/1010data hybrid
While it is possible to access and query 1010data tables solely with SQL, you can also combine SQL with 1010data Macro Language to get the most out of 1010data's platform.
The following example uses a SQL expression on the table
pub.fin.risk_share.stacr.history
to calculate conditional
prepayment rates. However, it also uses the 1010data group function g_tshift()
and
the 1010data mortgage amortization function amort()
.
These functions can be accessed through the SQL engine by using the prefix
mdb.
, for example, mdb.g_tshift()
and
mdb.amort()
.
However, if a group function has more than one first argument, as is the case with
g_first1()
, you are required to "wrap" the computation in a
COMPUTE()
function, as was done in this line of the code:
COMPUTE( BOOLEAN , $$ g_first1("id_loan" "is_paidoff";;"fmonth") $$) is True
)
.
<code language_="sql" options_="{importwithlabels:0}"> <![CDATA[ SELECT F.deal,F.fmonth,round((1-(1-F.vol_smm)^12)*100,1) AS vol_cpr, ROUND((1-(1-F.invol_smm)^12)*100,1) AS invol_cpr, ROUND((1-(1-(F.invol_smm+F.vol_smm))^12)*100,1) AS cpr FROM (SELECT E.*,(E.curtailment+E.vol_prepay)/E.schedbal AS vol_smm, E.invol_prepay/E.schedbal AS invol_smm FROM (SELECT D.deal,D.fmonth,SUM(D.schedbal) AS schedbal, SUM(D.curtailment) AS curtailment, SUM(D.vol_prepay) AS vol_prepay , SUM(D.invol_prepay) AS invol_prepay FROM (SELECT C.*,CAST((payoff_reason is NULL) AS INTEGER) * greatest(delta,0.0) AS curtailment, CAST(payoff_reason = 1 AS INTEGER)*upb_at_removal AS vol_prepay , CAST(payoff_reason != 1 AS INTEGER),upb_at_removal AS invol_prepay FROM (SELECT B.*,mdb.g_tshift(id_loan,1,fmonth,'M',schedbal_next,-1) AS schedbal, schedbal-act_endg_upb AS delta FROM (SELECT A.*,mdb.amort(new_int_rt,mths_remng,1)*act_endg_upb AS schedbal_next FROM (SELECT *,substr(id_loan,1,6) AS deal, NOT coalesce(payoff_reason, NULL) AS is_paidoff FROM "pub.fin.risk_share.stacr.history") AS A WHERE payoff_reason IS NULL OR COMPUTE( BOOLEAN , $$ g_first1("id_loan" "is_paidoff";;"fmonth") $$) is True ) AS B) AS C WHERE schedbal IS NOT NULL) AS D GROUP BY D.deal,D.fmonth) AS E WHERE E.schedbal>0) AS F ]]> </code>