Hi all,
I am trying to convert a set of advance python code to Data360.
I am able to re-run the input and output of the data, but I am facing difficulties in converting it to Alteryx.
The python code of Data360 was attached as below:-
out1 += in1
out1 -= in1.Premium
out1 -= in1.Commission
out1.ZERNYR = str
for i in range(1,10):
out1['UAMT0'+str(i)] = float
for i in range(10,13):
out1['UAMT'+str(i)] = float
out1 += in1
import calendar
if fields['START_DATE'] != Null and fields['EXPIRY_DATE'] != Null and fields['TRANDATE'] != Null:
if fields['TRANDATE'] <= fields['START_DATE']:
Year_ZERNYR = int(fields['START_DATE'].strftime("%Y"))
elif fields['TRANDATE'] > fields['START_DATE']:
Year_ZERNYR = int(fields['TRANDATE'].strftime("%Y"))
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'CS'):
out1.ZERNYR = Year_ZERNYR
elif (fields['SACSTYP'] == 'PE' or fields['SACSTYP'] == 'CE'):
out1.ZERNYR = int(fields['EXPIRY_DATE'].strftime("%Y"))
for i in range(2,16):
if fields['SACSTYP'] == 'P'+str(i) or fields['SACSTYP'] == 'C'+str(i):
out1.ZERNYR = Year_ZERNYR +i -1
#Calculate days of month i (case T<S<D)
if fields['START_DATE'] != Null and fields['EXPIRY_DATE'] != Null and fields['TRANDATE'] != Null and fields['TRANDATE'] <= fields['START_DATE'] and fields['START_DATE'] <= fields['EXPIRY_DATE'] and fields['EXPIRY_DATE'] >= fields['TRANDATE']:
Month_S = int(fields['START_DATE'].strftime("%m"))
Year_S = int(fields['START_DATE'].strftime("%Y"))
12/24/2021-12/24/2020
Month_E = int(fields['EXPIRY_DATE'].strftime("%m"))
Year_E = int(fields['EXPIRY_DATE'].strftime("%Y"))
x = list(range(12))
for i in range(12):
if (Year_E - Year_S == 0):
if (i+1 < Month_S or i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_S and i+1 == Month_E):
x[i] = int(fields['EXPIRY_DATE'].strftime("%d")) - int(fields['START_DATE'].strftime("%d")) +1
elif (i+1 == Month_S) : #START_DATE
x[i] = calendar.monthrange(Year_S, Month_S)[1] - int(fields['START_DATE'].strftime("%d")) +1
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = (fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
elif (Year_E - Year_S == 1) :
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'CS') :
if (i+1 < Month_S) : #not in range
x[i] = Null
elif (i+1 == Month_S) : #START_DATE
x[i] = calendar.monthrange(Year_S, Month_S)[1] - int(fields['START_DATE'].strftime("%d")) +1
else:
x[i] = calendar.monthrange(Year_S, i+1)[1]
elif (fields['SACSTYP'] == 'PE' or fields['SACSTYP'] == 'CE') :
if (i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = (fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
elif (Year_E - Year_S >= 2) :
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'CS') :
if (i+1 < Month_S) : #not in range
x[i] = Null
elif (i+1 == Month_S) : #START_DATE
x[i] = calendar.monthrange(Year_S, Month_S)[1] - int(fields['START_DATE'].strftime("%d")) +1
else:
x[i] = calendar.monthrange(Year_S, i+1)[1]
elif (fields['SACSTYP'] == 'PE' or fields['SACSTYP'] == 'CE') :
if (i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = ( fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
#for year 2 - 15:
for j in range(2,16):
if fields['SACSTYP'] == 'P'+str(j) or fields['SACSTYP'] == 'C'+str(j):
x[i] = calendar.monthrange(Year_S +j -1 , i+1)[1]
if x[i] != Null:
x[i] = float(fields['UNEARNED'])*(float(x[i])/float(fields['NODay']))
if i == 0 :
out1.UAMT01 = x[0]
elif i == 1 :
out1.UAMT02 = x[1]
elif i == 2 :
out1.UAMT03 = x[2]
elif i == 3 :
out1.UAMT04 = x[3]
elif i == 4 :
out1.UAMT05 = x[4]
elif i == 5 :
out1.UAMT06 = x[5]
elif i == 6 :
out1.UAMT07 = x[6]
elif i == 7 :
out1.UAMT08 = x[7]
elif i == 8 :
out1.UAMT09 = x[8]
elif i == 9 :
out1.UAMT10 = x[9]
elif i == 10 :
out1.UAMT11 = x[10]
elif i == 11 :
out1.UAMT12 = x[11]
#(case D<S,D<T)
elif fields['START_DATE'] != Null and fields['EXPIRY_DATE'] != Null and fields['TRANDATE'] != Null and (fields['START_DATE'] > fields['EXPIRY_DATE'] or fields['TRANDATE'] >= fields['EXPIRY_DATE']) :
Month_S = int(fields['START_DATE'].strftime("%m"))
Year_S = int(fields['START_DATE'].strftime("%Y"))
x = list(range(12))
for i in range(12):
if (i+1 < Month_S) : #not in range
x[i] = Null
elif (i+1 == Month_S) : #START_DATE
x[i] = 1
else:
x[i] = Null
if x[i] != Null:
x[i] = float(fields['UNEARNED'])*(float(x[i])/float(fields['NODay']))
if i == 0 :
out1.UAMT01 = x[0]
elif i == 1 :
out1.UAMT02 = x[1]
elif i == 2 :
out1.UAMT03 = x[2]
elif i == 3 :
out1.UAMT04 = x[3]
elif i == 4 :
out1.UAMT05 = x[4]
elif i == 5 :
out1.UAMT06 = x[5]
elif i == 6 :
out1.UAMT07 = x[6]
elif i == 7 :
out1.UAMT08 = x[7]
elif i == 8 :
out1.UAMT09 = x[8]
elif i == 9 :
out1.UAMT10 = x[9]
elif i == 10 :
out1.UAMT11 = x[10]
elif i == 11 :
out1.UAMT12 = x[11]
#(case S<T<E)
elif fields['START_DATE'] != Null and fields['EXPIRY_DATE'] != Null and fields['TRANDATE'] != Null and fields['TRANDATE'] > fields['START_DATE'] and fields['START_DATE'] <= fields['EXPIRY_DATE'] and fields['EXPIRY_DATE'] >= fields['TRANDATE'] :
Month_S = int(fields['TRANDATE'].strftime("%m"))
Year_S = int(fields['TRANDATE'].strftime("%Y"))
Month_E = int(fields['EXPIRY_DATE'].strftime("%m"))
Year_E = int(fields['EXPIRY_DATE'].strftime("%Y"))
if fields['TRANDATE'] > fields['START_DATE'] :
Sum_startDays = calendar.monthrange(Year_S, Month_S)[1] - int(fields['TRANDATE'].strftime("%d")) + int((fields['TRANDATE'] - fields['START_DATE']).days) + 1
x = list(range(12))
for i in range(12):
#Calculate days of month i
if (Year_E - Year_S == 0):
if (i+1 < Month_S or i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_S and i+1 == Month_E):
x[i] = int((fields['EXPIRY_DATE'] - fields['START_DATE']).days) +1
#x[i] = int(fields['EXPIRY_DATE'].strftime("%d")) - int(fields['START_DATE'].strftime("%d")) +1
elif (i+1 == Month_S and i+1 != Month_E) : #START_DATE
x[i] = Sum_startDays
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = (fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
elif (Year_E - Year_S == 1) :
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'CS') :
if (i+1 < Month_S) : #not in range
x[i] = Null
elif (i+1 == Month_S) : #START_DATE
x[i] = Sum_startDays
else:
x[i] = calendar.monthrange(Year_S, i+1)[1]
elif (fields['SACSTYP'] == 'PE' or fields['SACSTYP'] == 'CE') :
if (i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = ( fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
elif (Year_E - Year_S >= 2) :
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'CS') :
if (i+1 < Month_S) : #not in range
x[i] = Null
elif (i+1 == Month_S) : #START_DATE
x[i] = Sum_startDays
else:
x[i] = calendar.monthrange(Year_S, i+1)[1]
elif (fields['SACSTYP'] == 'PE' or fields['SACSTYP'] == 'CE') :
if (i+1 > Month_E) : #not in range
x[i] = Null
elif (i+1 == Month_E) : #EXPIRY_DATE
x[i] = ( fields['EXPIRY_DATE'] - datetime.date(Year_E, Month_E,1)).days +1
else:
x[i] = calendar.monthrange(Year_E, i+1)[1]
#for year 2 - 15:
for j in range(2,16):
if fields['SACSTYP'] == 'P'+str(j) or fields['SACSTYP'] == 'C'+str(j):
x[i] = calendar.monthrange(Year_S +j -1 , i+1)[1]
if x[i] != Null :
x[i] = float(fields['UNEARNED'])*(float(x[i])/float(fields['NODay']))
if i == 0 :
out1.UAMT01 = x[0]
elif i == 1 :
out1.UAMT02 = x[1]
elif i == 2 :
out1.UAMT03 = x[2]
elif i == 3 :
out1.UAMT04 = x[3]
elif i == 4 :
out1.UAMT05 = x[4]
elif i == 5 :
out1.UAMT06 = x[5]
elif i == 6 :
out1.UAMT07 = x[6]
elif i == 7 :
out1.UAMT08 = x[7]
elif i == 8 :
out1.UAMT09 = x[8]
elif i == 9 :
out1.UAMT10 = x[9]
elif i == 10 :
out1.UAMT11 = x[10]
elif i == 11 :
out1.UAMT12 = x[11]
if (fields['SACSTYP'] == 'PS' or fields['SACSTYP'] == 'PE'):
out1.SACSTYP = 'P'
for i in range(2,16):
if fields['SACSTYP'] == 'P'+str(i):
out1.SACSTYP = 'P'
if (fields['SACSTYP'] == 'CS' or fields['SACSTYP'] == 'CE'):
out1.SACSTYP = 'C1'
for i in range(2,16):
if fields['SACSTYP'] == 'C'+str(i):
out1.SACSTYP = 'C1'
And below are the input/output of the data.
Please if someone understands the python code, please let me know.
Also, if there is any awesome way like generating rows like my last post, do let me know to so that I can learn more tips and trick about alteryx!
Cheers!
bump!
@terrellchong
Can not gurantte I have fully understood the code, but most like it. 😂
i tried to rerun the workflow with my personal data, didnt tally
The workflow gave me some ideas on how to generate it, let me try and tweak it a littlebit
abit of an update, i split the code into 3 filters, now I am figuring out what is wrong with my current formula...
datetimeparse(datetimetrim([EXPIRY_DATE],"lastofmonth"),"days")I want to get the last day of the month of the date.. Am i doing anything wrong here?
Try datetimeformat() function instead.
DateTimeFormat(datetimetrim([EXPIRY_DATE],"lastofmonth"),"%d")
https://help.alteryx.com/20213/designer/datetime-functions
Hope this helps : )
