We are celebrating the 10-year anniversary of the Alteryx Community! Learn more and join in on the fun here.
Start Free Trial

Alteryx Designer Desktop Discussions

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

Change a macro into a custom function

EJ5916
7 - Meteor

Is there a way to save a macro as a custom function to use in the formula tool?

 

I'm trying to change some mainframe fields that I parsed out from EBCDIC format (00999870D) into a readable decimal. (99987.04)

 

But I have over 100 fields across 4 different files so I'm not sure how best to send these all thru the macro. 

 

Is there a way to save the macro as a function so I could convert the field in the formula tool?  I would do this in Excel VBA and call it like =EBCDICtoDec([Field])

 

Should I be using something else to do this?  

6 REPLIES 6
binuacs
21 - Polaris

@EJ5916 you cannot call the macro inside the formula tool but if you convert the macro into a batch macro you can use this in your dataset. Sample attached

image.png

EJ5916
7 - Meteor

I have 100 fields in this format, are you saying I have add a macro icon for each field?   Isn't there a better way?  

binuacs
21 - Polaris

@EJ5916 if you have more fields then transpose the data and run through the batch macro, cross tab the result

EJ5916
7 - Meteor

what would that looks like?  I have 171,000 rows and 100 columns.  

binuacs
21 - Polaris

@EJ5916 I can only suggest options, another option I'm thinking create a formula that converts EBCDIC format to decimal format, use the save expression option in the formula tool to save the formula then re-use, giving you a sample formula

 

image.png

EJ5916
7 - Meteor

I ended up using the Multi-Field Formula tool with this formula:

 

ToNumber(if RIGHT([_CurrentField_],1) ='}' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"0")

elseif RIGHT([_CurrentField_],1) ='J' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"1")
elseif RIGHT([_CurrentField_],1) ='K' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"2")
elseif RIGHT([_CurrentField_],1) ='L' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"3")
elseif RIGHT([_CurrentField_],1) ='M' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"4")
elseif RIGHT([_CurrentField_],1) ='N' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"5")
elseif RIGHT([_CurrentField_],1) ='O' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"6")
elseif RIGHT([_CurrentField_],1) ='P' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"7")
elseif RIGHT([_CurrentField_],1) ='Q' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"8")
elseif RIGHT([_CurrentField_],1) ='R' then (-1) * ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"9")


elseif RIGHT([_CurrentField_],1) ='{' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"0")
elseif RIGHT([_CurrentField_],1) ='A' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"1")
elseif RIGHT([_CurrentField_],1) ='B' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"2")
elseif RIGHT([_CurrentField_],1) ='C' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"3")
elseif RIGHT([_CurrentField_],1) ='D' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"4")
elseif RIGHT([_CurrentField_],1) ='E' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"5")
elseif RIGHT([_CurrentField_],1) ='F' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"6")
elseif RIGHT([_CurrentField_],1) ='G' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"7")
elseif RIGHT([_CurrentField_],1) ='H' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"8")
elseif RIGHT([_CurrentField_],1) ='I' then ToNumber(Substring([_CurrentField_],0,Length([_CurrentField_])-1)+"9")

else [_CurrentField_]
endif) * .01

Labels
Top Solution Authors