11 septiembre, 2026

UTILIZAR UNA COLECCIÓN PARA GENERAR CALENDARIO SEGÚN RANGO DE AÑOS Y FILTRAR POR MES

Hola a todos,

Hoy volvemos a Power Apps y vamos a trabar en el uso de las colecciones para crear calendarios que nos pueden ser de mucha utilizad en nuestras aplicaciones.

Power Apps no tiene la funcionalidad de un calendario que nos pueda mostrar datos en las fechas, para suplir esto tenemos dos alternativas normalmente, una es embeber un Power BI en nuestro proyecto y otra es generar una colección que simule un calendario y mostrarla en una galería.

Hoy vamos a hablar de esta segunda alternativa. Imaginad que tenéis la siguiente Power Apps:

Y lo que queremos conseguir es que cuando indiquemos un rango de años se genere de forma automática una colección con todos días de ese tramo. Si dejamos los años en blanco no se generará la colección, si ponemos un año de inicio mayor que el año final se mostrará una advertencia.

Y además, que podamos filtrar el mes en nuestra galería y si dejamos el mes en blanco que se muestren todos los meses del rango:

En este ejemplo, hemos generado todo el rango de días entre 2025 y 2027 y además hemos filtrado por febrero. Así que en nuestra galería veremos febrero filtrado por todos los años.

Para hacer esto, vamos a incluir en la propiedad OnChange en los cuadros de lista del año de Inicio y año final:

If(
    IsBlank(ddAñoIni.SelectedText.Value) || IsBlank(ddAñoFin.SelectedText.Value); 
    Clear(colCalendario);;
;
If(
        Value(ddAñoIni.SelectedText.Value) > Value(ddAñoFin.SelectedText.Value);
        Clear(colCalendario);;
        Notify("El año de inicio no puede ser mayor que el año de fin."; NotificationType.Error);;
    ;
// Selección años
Set(varAñoInicio; ddAñoIni.SelectedText.Value);;
Set(varAñoFin; ddAñoFin.SelectedText.Value);;

// Fecha de inicio y fin del año actual
Set(varFechaInicio; DateValue("01/01/" & Text(varAñoInicio)));;
Set(varFechaFin; DateValue("31/12/" & Text(varAñoFin)));;
// Total de días del año
Set(
    varTotalDias;
    DateDiff(varFechaInicio; varFechaFin; TimeUnit.Days) + 1
);;

// Creamos colección con el tramo de años indicado
ClearCollect(
    colCalendario;
    AddColumns(
        ForAll(
            Sequence(varTotalDias);
            DateAdd(varFechaInicio; Value - 1; TimeUnit.Days)
        );
        Año; Year(Value);
        Mes; Month(Value);
        Día; Day(Value);
        DíaSemana; Weekday(Value; StartOfWeek.Monday);
        NombreDia; Text(Value; "dddd");
        NombreMes; Text(Value; "mmmm")
    )
));;
)

Es decir que cada vez que seleccionemos un elementos en los cuadros de lista, se generará la colección colCalendario. Y esta colección la vamos a usar como fuente de datos en nuestra galería. Pero debemos indicar una sería de elementos para que se comporte como necesitamos. Este es el código en la propiedad Ítems de nuestra galería:

Filter(colCalendario;IsBlank(ddMes.SelectedText.Value) Or ddMes.SelectedText.Value=NombreMes)

Los nombres que he usado para las listas desplegables:

  • Año inicio: ddAñoIni
  • Año final: ddAñoFin
  • Mes: ddMes

    Para generar los contenidos de los meses, podéis incluir esto en la propiedad Items:
["";"2025";"2026";"2027";"2028"]

Y en los meses:

["";"enero";
 "febrero";
 "marzo";
 "abril";
 "mayo";
 "junio";
 "julio";
 "agosto";
 "septiembre";
 "octubre";
 "noviembre";
 "diciembre"]

Y esto es todo, ahora solo queda que utilicéis la colección para, por ejemplo contar eventos en un día y relacionarlo con una lista o un campo de Dataverse.

Espero que sea de utilidad!!

Comparte este post

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies