Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Syndicate_Admin
Administrator
Administrator

Encontrar patrones mensuales para varios ID diferentes.

Tengo una tabla con identificadores y fechas, que pueden verse como las siguientes:

IDENTIFICACIÓNFecha
12327-12-2022
12326-01-2023
12320-11-2022
45601-01-2021
12320-10-2022
45601-02-2020

Mi objetivo es agregar una columna calculada a esta tabla, que para cada "ID" nos permite saber si los valores de "Fecha" para este "ID" siguen un patrón mensual. Aquí elijo definir un patrón montlhy mirando la parte MM del formato "DD-MM-AAAA" de la "Fecha". Un patrón mensual significa que esta parte MM sigue un patrón como ...,10,11,12,1,2,... donde no se omite ningún mes.

Dado que el ID "123" sigue un patrón mensual (desde el mes 10 de 2022 hasta el mes 1 de 2023) quiero una columna que muestre "secuencia mensual" cada vez que el valor correspondiente de ID sea "123". Obviamente 456 no sigue un patrón mensual (debido a diferentes años) así que aquí quiero que resulte "secuencia no mensual".

Hasta ahora he encontrado que puedo usar las funciones MONTH() y YEAR() para extraer el mes y el año de la columna de fecha. Pero estoy atascado en cómo comparar varias fechas para una identificación específica. ¿Cómo me aseguro, por ejemplo, de que las fechas se comparen solo dentro de una determinada "ID"? ¿Y cómo puedo garantizar que la comparación se realiza en el orden correcto?

Si alguien puede ayudarme a resolver este problema o proporcionar algunas pistas, sería muy apreciado.

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

@Wouter_MK

Esto probablemente se haría mejor en Power Query, pero aquí hay una alternativa para una columna calculada en DAX. Es posible que tenga problemas de velocidad si las tablas son grandes

Véalo todo en funcionamiento en el archivo adjunto.

PatternFlag = 
VAR auxT_ = CALCULATETABLE(DISTINCT(Table1[Date]), ALLEXCEPT(Table1, Table1[ID]))
VAR monthsT_ = ADDCOLUMNS(auxT_, "@YearMonth", YEAR([Date])*100 + MONTH([Date]))
VAR uniqueMonths_ = SUMMARIZE(monthsT_, [@YearMonth])
VAR numMonthsInSequence_ = COUNTROWS(uniqueMonths_)
VAR earliest_ = EOMONTH( CALCULATE(MIN(Table1[Date]), ALLEXCEPT(Table1, Table1[ID])), 0)
VAR latest_ = EOMONTH( CALCULATE(MAX(Table1[Date]), ALLEXCEPT(Table1, Table1[ID])), 0)
VAR numMonthsRequired_ = DATEDIFF(earliest_, latest_, MONTH) + 1
RETURN
    IF (
        numMonthsInSequence_ = numMonthsRequired_,
        "Monthly seq",
        "No monthly seq"
    )

SU18_powerbi_badge

Por favor, acepte la solución cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo en privado para obtener apoyo con cualquier necesidad de BI a gran escala, tutoría, etc.

Muchas gracias, esto parece hacer lo que quiero y dentro de mi caso de uso todavía se ejecuta bastante rápido. ¿Le importaría ayudarme a entender exactamente cómo funcionan las soluciones?

Por lo que entiendo, auxT_ y monthsT_ crear una tabla con todas las fechas distintas por ID, con una columna adicional "@YearMonth" con el Año * 100 (¿por qué el * 100?) y el mes.

uniqueMonths_ y numMonthsInSequence_ determinan el número único de meses en una secuencia.

Con earliest_, latest_ y numMonthsRequired_ sabemos la cantidad de meses entre el mes más temprano y el último mes (para una identificación en particular) de modo que con el IF() final podemos verificar si el número de meses en la secuencia real es igual al número de meses requeridos.

¿Podría proporcionar comentarios/correcciones adicionales? Gracias de nuevo, la solución realmente me ayudó.

@Wouter_MK

Exactamente. Lo conseguiste perfectamente.

Año * 100 + Mes es solo una forma común de codificar Año-Mes en números.

El 100 podría ser cualquier cosa >= 12. El 100 solo hace que sea fácil ver el año y el mes de inmediato cuando se mira el número.

SU18_powerbi_badge

Por favor, acepte la solución cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo en privado para obtener apoyo con cualquier necesidad de BI a gran escala, tutoría, etc.

Syndicate_Admin
Administrator
Administrator

Esto es posible, pero ¿qué planeas hacer con la columna una vez que la tengas? Puede haber una manera más simple de obtener el mismo resultado. ¿Y por qué no usar una medida en lugar de una columna, para que sea dinámica cuando use segmentaciones de datos, etc.?

Palmadita

Gracias por su respuesta. Lo siento si esta respuesta es bastante vaga, pero no se me permite describir todo en lo que estoy trabajando en detalle.

Estoy planeando usar la columna dentro de alguna otra tabla. Estoy trabajando en un sistema con muchas tablas y teclas diferentes (usamos un modelo STAR). Necesito la tabla que tiene algunas columnas como en mi ejemplo anterior para realizar la tarea que describí. Luego puedo usar los resultados de esta columna recién calculada en alguna otra tabla (tengo diferentes claves para unirlas que no describí en mi publicación anterior) para usarla para resolver fácilmente algún otro problema.

Helpful resources

Announcements
Fabcon_Europe_Social_Bogo

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

Power BI Carousel June 2024

Power BI Monthly Update - June 2024

Check out the June 2024 Power BI update to learn about new features.

PBI_Carousel_NL_June

Fabric Community Update - June 2024

Get the latest Fabric updates from Build 2024, key Skills Challenge voucher deadlines, top blogs, forum posts, and product ideas.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

Top Solution Authors
Top Kudoed Authors