Community Halloween is live until October 31st! Complete any 2 quick activities to earn the 2025 Community Halloween badge. Feeling brave? Check out the activities here
Start Free Trial

Alteryx Designer Desktop Discussions

Find answers, ask questions, and share expertise about Alteryx Designer Desktop and Intelligence Suite.

Converting Python code to Alteryx

terrellchong
8 - Asteroid

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!

5 REPLIES 5
terrellchong
8 - Asteroid

bump!

Qiu
21 - Polaris
21 - Polaris

@terrellchong 
Can not gurantte I have fully understood the code, but most like it. 😂

0103-terrellchong-A.PNG0103-terrellchong-B.PNG

terrellchong
8 - Asteroid

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

terrellchong
8 - Asteroid

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?

atcodedog05
22 - Nova
22 - Nova

Hi @terrellchong 

 

Try datetimeformat() function instead.

DateTimeFormat(datetimetrim([EXPIRY_DATE],"lastofmonth"),"%d")

 

https://help.alteryx.com/20213/designer/datetime-functions

 

Hope this helps : )

 

Labels
Top Solution Authors