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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

El filtro Dax requería verificar el cambio de código por ID único durante un período continuo de 7 días

Hola tengo 16 millones de eventos que necesito analizar, para identificar cuando se ha producido un cambio de código durante un período de 7 días consecutivos.

Los eventos no siempre serán diarios. A continuación se muestra un ejemplo, que muestra eventos para ID 1

por lo que del 15/4/2023 al 21/4/2023 tiene un código de A1

luego del 22/04/2023 - 26/04/2023 - 5 días se cambia a B2 , ya que esto no son 7 días consecutivos, no se marca como un cambio

luego, del 04/05/2023 al 10/05/2023, se muestra como B2 durante 7 días, por lo que la fecha máxima se marca como un cambio

CódigoIDENTIFICACIÓNFecha
A1115/04/2023
A1116/04/2023
A1119/04/2023
A1120/04/2023
A1121/04/2023
B2122/04/2023
B2123/04/2023
B2124/04/2023
B2125/04/2023
B2126/04/2023
A1127/04/2023
A1129/04/2023
A1130/04/2023
B2101/05/2023
A1102/05/2023
A1103/05/2023
B2104/05/2023
B2105/05/2023
B2106/05/2023
B2110/05/2023

27 REPLIES 27
Syndicate_Admin
Administrator
Administrator

Gracias, ahora he logrado agregar la agrupación local a través del editor de consultas, por lo que su método ahora está funcionando, lo último que necesito intentar hacer es obtener solo los últimos datos basados en el ID

así que si miramos cada ID me gustaría que se mostrara lo siguiente

21A -- AAB -- 1 -- 4/21/2023 - 4/28/2023 -- 7

21B -- BBB -- 5 -- 4/26/2023 - 4/28/2023 -- 2

21C -- CCA -- 9 -- 4/21/2023 - 4/28/2023 -- 7

Syndicate_Admin
Administrator
Administrator

todavía luchando con esto, traté de obtener un conteo usando este código

Recuento =
DÓNDE vCurrentDate = 'Tabla'[Fecha de salida]
DÓNDE vCurrentID = 'Tabla'[ID]
DÓNDE vCurrentCode = 'Tabla'[Combo]
DÓNDE vPrevTbl =
FILTRO ( 'Table', 'Table'[Fecha de salida]<= vCurrentDate && 'Table'[ID] = vCurrentID && 'Table'[Combo] = vCurrentCode)
DÓNDE vPrevDate =
MAXX (
FILTRO (
vPrevTbl,
DÓNDE vCD = 'Tabla'[Fecha de salida]
DÓNDE r =
MAXX ( FILTRO ( vPrevTbl, 'Tabla' [Fecha de salida] < vCD ), 'Tabla' [Fecha de salida] )
DEVOLUCIÓN
.vcd- 1 <> r
),
'Tabla'[Fecha de salida]
)
DEVOLUCIÓN
vCurrentDate - vPrevDate + 1
Syndicate_Admin
Administrator
Administrator

Gracias, sí, acabo de comprobar y no funciona, realmente había jhope esto no sería tan difícil como lo está demostrando, gracias por tomarse el tiempo para ayudarme con esto, es muy apreciado

Syndicate_Admin
Administrator
Administrator

Esto no funcionará si las secuencias terminan y comienzan en la misma fecha. Como entiendo el escenario, necesita procesar esto en el nivel datetime, no en el nivel de fecha.

Syndicate_Admin
Administrator
Administrator

Este código parece estar funcionando para obtener la fecha de finalización , por lo que si puedo obtener la fecha de inicio , entonces puedo diferenciar la fecha de ambas medidas

anterior =
DÓNDE prevdate =
CALCULAR (
..MAX ( 'Tabla' [Marca de tiempo] ),
FILTRO ( TODO ( 'tabla' ), 'tabla'[marca de tiempo] = ..MAX ( 'Tabla' [Marca de tiempo] ) - 1 )
)
DÓNDE currdate =
CALCULAR (
..MAX ( 'Tabla' [Marca de tiempo] ),
FILTRO ( TODO ( 'Tabla' ), 'Tabla'[Marca de tiempo] = prevdate )
)
DÓNDE res =
SI ( ..MAX ( 'Tabla' [Marca de tiempo] ) <> fecha anterior, ..MAX ( 'Tabla' [Marca de tiempo] ) )
DEVOLUCIÓN
nada
Syndicate_Admin
Administrator
Administrator

Puedo confirmar que la marca de tiempo es única para cada identificación

Syndicate_Admin
Administrator
Administrator

No puedo ayudarte si no puedes describir completamente el escenario.

¿Puede garantizar que la marca de tiempo Datetime sea única en todas las entradas de un ID? Si no, necesitará algún tipo de otra clave primaria (que será bastante difícil de implementar con una actualización incremental)

Syndicate_Admin
Administrator
Administrator

Revisé su código y veo que también agrupó los datos en power query , no puedo hacer esto ya que traigo datos a través de una actualización incremental, ¿es posible replicar lo que tiene como índice agregando una fórmula de columna, probé esta fórmula, pero tiene un error

en =
RANKX(
FILTRO(Tabla,Tabla[ID] = ANTERIOR(Tabla[ID]) && Tabla[Código] = ANTERIOR(Tabla[Código])),
'Tabla'[ID],,ASC
)
Syndicate_Admin
Administrator
Administrator

Proporcione datos de muestra desinfectados que cubran completamente su problema.

Syndicate_Admin
Administrator
Administrator

Gracias por echar un vistazo a esto, agregué el índice, pero no funciona para mí, tal vez debido a que hay 36,000 identificaciones, ¿hay otra forma de obtener las fechas de inicio y finalización, por favor?

Syndicate_Admin
Administrator
Administrator

He aquí un enfoque diferente con la agrupación local.

lbendlin_1-1682467496138.png

Ver adjunto

Syndicate_Admin
Administrator
Administrator

Power BI se agregará automáticamente. Deberá agregar un número de secuencia en Power Query para evitar que eso suceda. De lo contrario, el resultado se vería así:

lbendlin_0-1682463659076.png

Syndicate_Admin
Administrator
Administrator

IDENTIFICACIÓNFecha de salidaETCCódigo
21A14/04/202322:01AAA
21A15/04/202318:05AAA
21A16/04/202320:57AAA
21A17/04/202315:15AAA
21A17/04/202319:34AAA
21A17/04/202322:01AAA
21A18/04/202318:05AAA
21A18/04/202320:57AAA
21A19/04/202306:30AAA
21A19/04/202309:27AAA
21A19/04/202318:35AAA
21A19/04/202321:13AAA
21A20/04/202307:22AAA
21A20/04/202310:01AAA
21A20/04/202312:43AAA
21A20/04/202315:53AAA
21A20/04/202322:20AAA
21A21/04/202308:33AAA
21A21/04/202314:17AAA
21A21/04/202316:28AAA
21A21/04/202320:12AAB
21A21/04/202323:06AAB
21A22/04/202316:34AAB
21A22/04/202318:08AAB
21A22/04/202320:01AAB
21A23/04/202311:20AAB
21A23/04/202314:40AAB
21A23/04/202318:10AAB
21A23/04/202321:05AAB
21A24/04/202318:39AAB
21A25/04/202319:39AAB
21A26/04/202320:39AAB
21A27/04/202321:39AAB
21A28/04/202322:39AAB
21B14/04/202322:01BBA
21B15/04/202318:05BBA
21B16/04/202320:57BBA
21B17/04/202315:15BBA
21B17/04/202319:34BBA
21B17/04/202322:01BBA
21B18/04/202318:05BBA
21B18/04/202320:57BBB
21B19/04/202306:30BBB
21B19/04/202309:27BBB
21B19/04/202318:35BBB
21B19/04/202321:13BBB
21B20/04/202307:22BBB
21B20/04/202310:01BBB
21B20/04/202312:43BBB
21B20/04/202315:53BBB
21B20/04/202322:20BBA
21B21/04/202308:33BBA
21B21/04/202314:17BBA
21B21/04/202316:28BBA
21B21/04/202320:12BBA
21B21/04/202323:06BBA
21B22/04/202316:34BBA
21B22/04/202318:08BBA
21B22/04/202320:01BBA
21B23/04/202311:20BBA
21B23/04/202314:40BBA
21B23/04/202318:10BBA
21B23/04/202321:05BBA
21B24/04/202318:39BBA
21B25/04/202319:39BBA
21B26/04/202320:39BBB
21B27/04/202321:39BBB
21B28/04/202322:39BBB
21C14/04/202322:01CCC
21C15/04/202318:05CCC
21C16/04/202320:57CCC
21C17/04/202315:15CCC
21C17/04/202319:34CCC
21C17/04/202322:01CCC
21C18/04/202318:05CCC
21C18/04/202320:57CCC
21C19/04/202306:30CCC
21C19/04/202309:27CCA
21C19/04/202318:35CCA
21C19/04/202321:13CCA
21C20/04/202307:22CCA
21C20/04/202310:01CCA
21C20/04/202312:43CCA
21C20/04/202315:53CCA
21C20/04/202322:20CCA
21C21/04/202308:33CCD
21C21/04/202314:17CCD
21C21/04/202316:28CCD
21C21/04/202320:12CCD
21C21/04/202323:06CCA
21C22/04/202316:34CCA
21C22/04/202318:08CCA
21C22/04/202320:01CCA
21C23/04/202311:20CCA
21C23/04/202314:40CCA
21C23/04/202318:10CCA
21C23/04/202321:05CCA
21C24/04/202318:39CCA
21C25/04/202319:39CCA
21C26/04/202320:39CCA
21C27/04/202321:39CCA
21C28/04/202322:39CCA

IDENTIFICACIÓNCódigoFecha de inicioFecha finalDiferencia de fecha
21AAAA14/04/202321/04/20237
21AAAB21/04/202328/04/20237
21BBBA14/04/202318/04/20234
21BBBB18/04/202320/04/20232
21BBBA20/04/202325/04/20235
21BBBB26/04/202328/04/20232
21CCCC14/04/202319/04/20235
21CCCA19/04/202320/04/20231
21CCCD21/04/202321/04/20230
21CCCA21/04/202328/04/20237
Syndicate_Admin
Administrator
Administrator

Esos no son buenos datos de muestra. Proporcione datos de muestra que cubran todos los escenarios (superposiciones, períodos más cortos, etc.) de acuerdo con su proceso de la vida real.

Syndicate_Admin
Administrator
Administrator

Aquí están los datos sin procesar

IDENTIFICACIÓNFecha de salidaETCReg No.Código
21A14/04/202322:019AASL
21A15/04/202318:059AASL
21A16/04/202320:579AASL
21A17/04/202315:159AASL
21A17/04/202319:349AASL
21A17/04/202322:019AASL
21A18/04/202318:059AASL
21A18/04/202320:579AASL
21A19/04/202306:309AASL
21A19/04/202309:279AASL
21A19/04/202318:359AASL
21A19/04/202321:139AASL
21A20/04/202307:229AASL
21A20/04/202310:019AASL
21A20/04/202312:439AASL
21A20/04/202315:539AASL
21A20/04/202322:209AASL
21A21/04/202308:339AASL
21A21/04/202314:179AASL
21A21/04/202316:289AASL
21A21/04/202320:129ATVF (en inglés)
21A21/04/202323:069ATVF (en inglés)
21A22/04/202316:349ATVF (en inglés)
21A22/04/202318:089ATVF (en inglés)
21A22/04/202320:019ATVF (en inglés)
21A23/04/202311:209ATVF (en inglés)
21A23/04/202314:409ATVF (en inglés)
21A23/04/202318:109ATVF (en inglés)
21A23/04/202321:059ATVF (en inglés)
21A24/04/202318:399ATVF (en inglés)
21A25/04/202319:399ATVF (en inglés)
21A26/04/202320:399ATVF (en inglés)
21A27/04/202321:399ATVF (en inglés)
21A28/04/202322:399ATVF (en inglés)

y el resultado esperado es

IDENTIFICACIÓNCódigoFecha de inicioFecha finalDiferencia de fecha
21AASL14/04/202321/04/20237
21ATVF (en inglés)21/04/202328/04/20237
Syndicate_Admin
Administrator
Administrator

Para eso necesitaría usar las funciones de ventanas. Proporcione datos de muestra que cubran su problema o pregunta por completo, en un formato utilizable (no como una captura de pantalla).
https://community.powerbi.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-...
Muestre el resultado esperado en función de los datos de muestra que proporcionó.

https://community.powerbi.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

Syndicate_Admin
Administrator
Administrator

¿Es posible mostrar la fecha de inicio con una medida, la fecha de finalización con una medida, y también la diferencia de fecha en otra medida, de esa manera puedo obtener recuentos consecuentes totales basados en la diferencia de fecha?

Syndicate_Admin
Administrator
Administrator

Consecutive2 = 
var d = max(Table2[Date])
var c = max(Table2[Code])
var i = max(Table2[ID])
var o = calculate(max(Table2[Date]),ALLSELECTED(Table2),Table2[Date]<><>c,Table2[ID]=i)
var n = CALCULATE(min(Table2[Date]),ALLSELECTED(Table2),Table2[Date]>o,Table2[Code]=c,Table2[ID]=i)
return int(d-n+1)<>

¿Qué debe suceder cuando se produce un cambio el mismo día?

Gustar

A1 1 03/05/2023 01:20
B2 1 03/05/2023 02:20
Syndicate_Admin
Administrator
Administrator

No estoy seguro, la columna adicional es la columna de tiempo, por lo que se ve así

CódigoIDENTIFICACIÓNFechaHora de salidaRecuento de días
A1115/04/202313:201
A1115/04/202317:151
A1116/04/202313:202
A1119/04/202313:205
A1119/04/202317:155
A1120/04/202313:206
A1121/04/202314:207
B2122/04/202315:201
B2123/04/202316:202
B2124/04/202313:203
B2124/04/202317:203
B2125/04/202318:204
B2126/04/202319:205
A1127/04/202320:201
A1129/04/202321:202
A1130/04/202322:203
B2101/05/202323:201
A1102/05/202300:201
A1103/05/202301:202
B2104/05/202302:201
B2105/05/202303:202
B2106/05/202304:203
B2110/05/202305:207
B2110/05/202306:207
B2110/05/202307:207
B2110/05/202308:207
Syndicate_Admin
Administrator
Administrator

¿Cómo planea calcular la diferencia de día con los valores datetime? Eso se complicará rápidamente.

En cuanto a la bandera, puedes hacerlo tú mismo. Siempre que la medida devuelve 1, y para la fila anterior devuelve 7 o más, eso es un indicador de cambio.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

November Carousel

Fabric Community Update - November 2024

Find out what's new and trending in the Fabric Community.

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

Top Solution Authors
Top Kudoed Authors