Advent of Code is back! Unwrap daily challenges to sharpen your Alteryx skills and earn badges along the way! Learn more now.

Alteryx Designer Desktop Discussions

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

Iterating through a range of dates

feedsoal
6 - Meteoroid

Hello!

 

I'm new to Alteryx and I'm translating some code from ACL Analytics to Alteryx workflows.

Here is the issue:

I need to iterate over a range of dates to perform some tests with given conditions, and I'm pretty confused on how exactly I can do it with iterative macros.

 

I wrote some piece of code using R just to represent the kind of iteration I need.

 

library(lubridate)

# User Input
start_date <- ym("201401")

# User Input
end_date <- ym("202009")

# Variables
var_date <- add_with_rollback(start_date,months(-1))
var_date_end <- end_date

# While Loop
while(var_date < var_date_end){
  var_date <- add_with_rollback(var_date,months(1))
  print(var_date)
}

 

And this is the output:

 

[1] "2014-01-01"
[1] "2014-02-01"
[1] "2014-03-01"
[1] "2014-04-01"
[1] "2014-05-01"
...
[1] "2020-06-01"
[1] "2020-07-01"
[1] "2020-08-01"
[1] "2020-09-01"

 

Basically, I just want to guarantee that in each iteration, my tests will be performed considering 201401 first, then 201402, until 202009. Is iterative macro the way? How?

Unfortunately I couldn't find the help I need with Alteryx videos only.

 

Additionally, I could "almost" find a way using generate row tool, but it would turn my dataset with 7,000,000 lines to a monstrous dataset with 500,000,000+ lines.

 

Thank you! 

4 REPLIES 4
PhilipMannering
16 - Nebula
16 - Nebula

Hey @feedsoal 

 

Best way is using the multi-row.

See attached.

 

PhilipMannering_0-1605633319235.png

 

P

feedsoal
6 - Meteoroid

Thank you for the reply!

 

Well, I notice how the flow works in your example. But, how it will be stored in my "var_date" variable until the process is complete?

 

For example, I have two columns, one with date and one with a value. What I want to do is check if all the values in my current date, say 201501, are greater than 100. Then I'll check it for 201502, 201503, etc. Is it a possibility with the multi-row?

 

Thanks!

PhilipMannering
16 - Nebula
16 - Nebula

Sorry @feedsoal. I don't understand what you're asking. If there's a value for the initial date, it will get replicated (the same) for all the generated dates. But I don't understand where this value comparison comes in. You don't do this in your code. Perhaps you have an example?

feedsoal
6 - Meteoroid

@PhilipMannering, the piece of code was just to represent the kind of loop I expect to be able to do in Alteryx. I'll show you an example of what I need to do (ACL Script).

 

SET SAFETY OFF

COM ###### CLAIMS DATA LOADED PREVIOUSLY ######
COM ###### IT CONTAINS DATA ABOUT SEVERAL TYPES OF INSURANCE CLAIMS AND I WANT TO LOOK AT SOME OBSERVED VALUES IN EACH DATE ######

CLOSE
CLOSE SEC

COM ###### DEFINING THE DATES FOR CONSISTENCY TESTS ########
INITIAL_MONTH = "01"
INITIAL_YEAR = "2014"
FINAL_MONTH = "09"
FINAL_YEAR = "2020"

VAR_MONTH_START = VAL(INITIAL_MONTH;0)
VAR_YEAR_START = VAL(INITIAL_YEAR;0)

VAR_MONTH_END = VAL(FINAL_MONTH;0)
VAR_YEAR_END = VAL(FINAL_YEAR;0)

VARDATA = STRING(VAR_YEAR_START;4) + ZONED(VAR_MONTH_START;2)
VARDATAF = STRING(VAR_YEAR_END;4) + ZONED(VAR_MONTH_END;2)

OPEN CLAIMS_DATA

EXTRACT FIELDS OCCURR_DATE REPORT_DATE REF_DATE INDEM_WO_FINAN_EXP FINAN_EXP CLAIM_TYPE MOV_TYPE LINE REINS_FLAG RECOVER_FLAG ADM_JUD_FLAG MOV_VALUE MONETARY_VALUE CLAIM_NUMBER TO CLAIMS_TEST

CLOSE

DO SCRIPT TESTS while VAL(VARDATA;0) <= VAL(VARDATAF;0)

COM ##### EXAMPLE OF A TEST #####

OPEN CLAIMS_TEST

DEL GROSS_OBSERVED_VALUE OK
DEFINE GROSS_OBSERVED_VALUE COMPUTED 

INDEM_WO_FINAN_EXP IF (VAL(OCURR_DATE;0) <= %VARDATA% AND VAL(REPORT_DATE;0) > %VARDATA%) AND (VAL(MOV_TYPE;0)=1 OR VAL(MOV_TYPE;0)=2 OR VAL(MOV_TYPE;0)=5  OR VAL(MOV_TYPE;0)=6) AND VAL(REINS_FLAG;0) = 0 AND VAL(RECOVER_FLAG;0) = 0
0,00

DEL REINSURED_OBSERVED_VALUE OK
DEFINE FIELD REINSURED_OBSERVED_VALUE COMPUTED 

INDEM_WO_FINAN_EXP IF (VAL(OCURR_DATE;0) <= %VARDATA% AND VAL(REPORT_DATE;0) > %VARDATA%) AND (VAL(MOV_TYPE;0)=1 OR VAL(MOV_TYPE;0)=2 OR VAL(MOV_TYPE;0)=5  OR VAL(MOV_TYPE;0)=6) AND VAL(REINS_FLAG;0) = 1 AND VAL(RECOVER_FLAG;0) = 0
0,00

DEL NET_OBSERVED_VALUE OK
DEFINE FIELD NET_OBSERVED_VALUE COMPUTED 

INDEM_WO_FINAN_EXP IF (VAL(OCURR_DATE;0) <= %VARDATA% AND VAL(REPORT_DATE;0) > %VARDATA%) AND (VAL(MOV_TYPE;0)=1 OR VAL(MOV_TYPE;0)=2 OR VAL(MOV_TYPE;0)=5  OR VAL(MOV_TYPE;0)=6) AND VAL(RECOVER_FLAG;0) = 0
0,00

SUMMARIZE ON "%VARDATA%" AS "BASE_DATE" LINE SUBTOTAL GROSS_OBSERVED_VALUE REINSURED_OBSERVED_VALUE NET_OBSERVED_VALUE TO OBSERVED_CLAIMS PRESORT

 

Thank you!!

Labels