Search code examples
powerappspowerapps-formulapowerapps-selected-itemspowerapps-datatable

How can I sortbycolumns with a conditional 'if' before the sort?


I want to sort a list gallery ordening by date with the formula:

SortByColumns(
    AddColumns(
        Tabela4;
        "CalcDate";
        Max(
            DateValue(Data)+Qtde_dias_para_contato;
            DateValue(Data_cotação)+Qtde_dias_para_contato;
            DateValue(data_contato_1)+Qtde_dias_para_contato;
            DateValue(data_contato_2)+Qtde_dias_para_contato;
            DateValue(data_contato_3)+Qtde_dias_para_contato;
            DateValue(data_contato_4)+Qtde_dias_para_contato;
            DateValue(data_contato_5)+Qtde_dias_para_contato;
            DateValue(data_contato_6)+Qtde_dias_para_contato;
            DateValue(data_contato_7)+Qtde_dias_para_contato;
            DateValue(data_contato_8)+Qtde_dias_para_contato;
            DateValue(data_contato_9)+Qtde_dias_para_contato;
            DateValue(data_contato_10)+Qtde_dias_para_contato;
            DateValue(data_contato_11)+Qtde_dias_para_contato;
            DateValue(data_contato_12)+Qtde_dias_para_contato));
    "CalcDate";
    Ascending)

That code works but I need that this happens only when a column table has a determined value.

I tried this code:

SortByColumns(
    AddColumns(
        Tabela4;
        "CalcDate";
        If(
            Tabela4.finalizado = "";
            Max(
                DateValue(Data)+Qtde_dias_para_contato;
                DateValue(Data_cotação)+Qtde_dias_para_contato;
                DateValue(data_contato_1)+Qtde_dias_para_contato;
                DateValue(data_contato_2)+Qtde_dias_para_contato;
                DateValue(data_contato_3)+Qtde_dias_para_contato;
                DateValue(data_contato_4)+Qtde_dias_para_contato;
                DateValue(data_contato_5)+Qtde_dias_para_contato;
                DateValue(data_contato_6)+Qtde_dias_para_contato;
                DateValue(data_contato_7)+Qtde_dias_para_contato;
                DateValue(data_contato_8)+Qtde_dias_para_contato;
                DateValue(data_contato_9)+Qtde_dias_para_contato;
                DateValue(data_contato_10)+Qtde_dias_para_contato;
                DateValue(data_contato_11)+Qtde_dias_para_contato;
                DateValue(data_contato_12)+Qtde_dias_para_contato)));
    "CalcDate";
    Ascending)

But it isn´t working. How can I write this code?


Solution

  • If I understand it correctly, you want to sort by the calculated date if Tabela4.finalizado is empty. What would you want to happen if it is not empty? If the expected outcome is for the result not to be sorted, you can have the If expression outside of the SortByColumns:

    If(
        Tabela4.finalizado = "";
        SortByColumns(
            AddColumns(
                Tabela4;
                "CalcDate";
                Max(
                    DateValue(Data)+Qtde_dias_para_contato;
                    DateValue(Data_cotação)+Qtde_dias_para_contato;
                    DateValue(data_contato_1)+Qtde_dias_para_contato;
                    DateValue(data_contato_2)+Qtde_dias_para_contato;
                    DateValue(data_contato_3)+Qtde_dias_para_contato;
                    DateValue(data_contato_4)+Qtde_dias_para_contato;
                    DateValue(data_contato_5)+Qtde_dias_para_contato;
                    DateValue(data_contato_6)+Qtde_dias_para_contato;
                    DateValue(data_contato_7)+Qtde_dias_para_contato;
                    DateValue(data_contato_8)+Qtde_dias_para_contato;
                    DateValue(data_contato_9)+Qtde_dias_para_contato;
                    DateValue(data_contato_10)+Qtde_dias_para_contato;
                    DateValue(data_contato_11)+Qtde_dias_para_contato;
                    DateValue(data_contato_12)+Qtde_dias_para_contato));
            "CalcDate";
            Ascending);
        Tabela4)
    

    Notice that there's something strange with the If condition. Tabela4 is a table (i.e., contains multiple records / rows), so Tabela4.finalizado is not a string, it's a table of string values, so the expression above will not work.

    If you want to sort by the calculated date for rows that have finalizado = "", and not show the other rows, then you can filter the table prior to sorting it:

    SortByColumns(
        AddColumns(
            Filter(Tabela4; finalizado = "");
            "CalcDate";
            Max(
                DateValue(Data)+Qtde_dias_para_contato;
                DateValue(Data_cotação)+Qtde_dias_para_contato;
                DateValue(data_contato_1)+Qtde_dias_para_contato;
                DateValue(data_contato_2)+Qtde_dias_para_contato;
                DateValue(data_contato_3)+Qtde_dias_para_contato;
                DateValue(data_contato_4)+Qtde_dias_para_contato;
                DateValue(data_contato_5)+Qtde_dias_para_contato;
                DateValue(data_contato_6)+Qtde_dias_para_contato;
                DateValue(data_contato_7)+Qtde_dias_para_contato;
                DateValue(data_contato_8)+Qtde_dias_para_contato;
                DateValue(data_contato_9)+Qtde_dias_para_contato;
                DateValue(data_contato_10)+Qtde_dias_para_contato;
                DateValue(data_contato_11)+Qtde_dias_para_contato;
                DateValue(data_contato_12)+Qtde_dias_para_contato));
        "CalcDate";
        Ascending)
    

    If you need something else, please clarify your question and we will be able to help you.