cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Register for our Discovery Summit 2024 conference, Oct. 21-24, where you’ll learn, connect, and be inspired.
Choose Language Hide Translation Bar
Yass
Level III

Plotting a Distribution Tracking Chart Over a Defined Date Range

 

Hi everyone,

I hope you're all doing well ! I have a question and would really appreciate your help.

I've been working on a function to create a NOK tracking chart that shows the NOK percentages over a specific date range. Here's a quick rundown of what i want my function to do :
- I get the start and end dates for the current month.
- Next i creat new table to store the NOK percentages for each date and It goes through each day from the start of the month to today.
- Then it inserts the date and the corresponding NOK percentages into the new table.
- Finally, it creates a line graph showing the NOK percentages over the date range.

I've got the function mostly working, but I'm running into a bit of trouble.

TOP5:get_dates = Function({},
    today_date = Format(Today(), "yyyy-mm-dd");
    start_of_month = Format(Date Increment(Today(), "Month", 0, "Start"), "yyyy-mm-dd");
    evallist({start_of_month, today_date});
);

TOP5:calculate_nok_percentages = Function({dt},

    {start_of_month, today_date} = TOP5:get_dates();

    dt_top5 = dt << Summary(
        Group(:Date, :Nom de fichier, :Ref Produit, :ProductName, :Baie, :ICT_FCT, :Result, :Reason Error, :CodeError),
        Freq("Aucun(e)"),
        Weight("Aucun(e)"),
        invisible
    );

    nameFilesNok = Associative Array(Column(dt_top5, "Nom de fichier") << Get Values) << Get Keys;

    total_nb_total_ict = 0;
    total_nb_total_fct = 0;
    total_nb_nok_ict = 0;
    total_nb_nok_fct = 0;

    For(k = 1, k <= N Items(nameFilesNok), k++,
        FileRows = dt_top5 << get rows where(
            :File Name == nameFilesNok[k] & Num(Char(:Date)) >= Num(start_of_month) & Num(Char(:Date)) <= Num(today_date) & Contains(:File Name, "GOLDEN") == 0
        );

        nb_total_ict = 0;
        nb_total_fct = 0;
        nb_nok_ict = 0;
        nb_nok_fct = 0;

        total_rows = N Items(FileRows);

        For(j = 1, j <= total_rows, j++,
            If(dt_top5:ICT_FCT[FileRows[j]] == "ICT",
                nb_total_ict = nb_total_ict + dt_top5:Nb. de lignes[FileRows[j]];
                If(dt_top5:Result[FileRows[j]] == "NOK",
                    nb_nok_ict = nb_nok_ict + dt_top5:Nb. de lignes[FileRows[j]]
                );
            , dt_top5:ICT_FCT[FileRows[j]] == "FCT",
                nb_total_fct = nb_total_fct + dt_top5:Nb. de lignes[FileRows[j]];
                If(dt_top5:Result[FileRows[j]] == "NOK",
                    nb_nok_fct = nb_nok_fct + dt_top5:Nb. de lignes[FileRows[j]]
                );
            )
        );

        total_nb_total_ict += nb_total_ict;
        total_nb_total_fct += nb_total_fct;
        total_nb_nok_ict += nb_nok_ict;
        total_nb_nok_fct += nb_nok_fct;
    );

    percent_nok_ict = (total_nb_nok_ict / total_nb_total_ict) * 100;
    percent_nok_fct = (total_nb_nok_fct / total_nb_total_fct) * 100;

    Eval List({percent_nok_ict, percent_nok_fct});
);

TOP5:create_nok_tracking_chart = Function({dt},

    {start_of_month, today_date} = TOP5:get_dates();

    dt_nok = New Table("NOK Percentages",
        Add Rows(0),
        New Column("Date", Character),
        New Column("Percent NOK ICT", Numeric),
        New Column("Percent NOK FCT", Numeric)
    );

    For(i = Num(start_of_month), i <= Num(today_date), i++,
        // Correct date formatting
        today_str = Format(Date(i), "yyyy-mm-dd");
        Eval List({start_of_month, today_date}) = Eval List({today_str, today_str});
        result = TOP5:calculate_nok_percentages(dt);

        Insert Into(dt_nok,
            today_str,
            result[1],
            result[2]
        );
    );

    Graph Builder(
        Size( 700, 500 ),
        Show Control Panel( 0 ),
        Variables( X( :Date ), Y( :Percent NOK ICT ), Y( :Percent NOK FCT ) ),
        Elements(
            Line(
                X,
                Y( 1 ),
                Legend( 6 ),
                Line Color( "Red" )
            ),
            Line(
                X,
                Y( 2 ),
                Legend( 8 ),
                Line Color( "Blue" )
            )
        ),
        Legend Position( "Top" )
    );
);


i did get this error message :

/*:
Unresolved name: Date JSL when accessing or evaluating "Date JSL". Date JSL( i ) /*###*/
Yass_0-1722949692680.png



Could anyone provide some guidance or tips on how to improve this ?

Thanks a lot!

2 REPLIES 2
Yass
Level III

Re: Plotting a Distribution Tracking Chart Over a Defined Date Range

The problem is in the create_nok_tracking_chart function

I made some changes to simplify the For loop, but unfortunately, it's not working:

current_date = Date(start_of_month);

    While(current_date <= Date(today_date),
        // Correct date formatting
        today_str = Format(current_date, "yyyy-MM-dd");
        
        result = TOP5:calculate_nok_percentages(dt);
        
        Insert Into(dt_nok,
            today_str,
            result[1],
            result[2]
        );
        
        // Increment date by 1 day
        current_date = Date Increment(current_date, "Day", 1);
    ); 

 

jthi
Super User

Re: Plotting a Distribution Tracking Chart Over a Defined Date Range

What does Date() function do?

-Jarmo