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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Unir tablas en varias columnas de fecha

Hola

Tengo mesa1 y mesa2 y espero conseguir la mesa3 como resultado.
https://www.dropbox.com/sh/wn450alvxn6kja5/AACsmmOXBXs94pXtbDxoyFs_a?dl=0

Información sobre cómo se supone que funciona este cálculo:
A) Las tablas se unen en la columna id.
B) La columna datePosted de table2 es menor o igual que cada columna de fecha de la tabla1 que tiene el prefijo Inicio.
C) La columna datePosted de table2 es (mayor o igual) o null de cada columna de fecha de la tabla1 que tiene el prefijo Thru.

Gracias por su tiempo.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@jeronimo2334 aquí está la expresión DAX, agregar como una nueva columna. No creé la relación entre las tablas para evitar "muchos a muchos", pero eso también se puede usar:

Name = 
VAR __id = table2[id]
VAR __post = table2[datePosted]
VAR __relatedTable = CALCULATETABLE ( table1, TREATAS ( { __id } ,  table1[id] ) )
VAR __names = 
CALCULATETABLE ( 
    VALUES ( table1[givenName] ), 
    TREATAS ( { __id }, table1[id] ),  
    table1[crStart] <= __post , 
    ( table1[crThru] == BLANK() || table1[crThru] >= __post  ),
    table1[cLStart] <= __post , 
    ( table1[cLThru] == BLANK() || table1[cLThru] >= __post  ),
    table1[opiStart] <= __post , 
    ( table1[opiThru] == BLANK() || table1[opiThru] >= __post  ),
    table1[piStart] <= __post , 
    ( table1[piThru] == BLANK() || table1[piThru] >= __post  ),
    table1[uiStart] <= __post , 
    ( table1[uiThru] == BLANK() || table1[uiThru] >= __post  ) 
)

RETURN
CONCATENATEX (
    __names,
    [givenName], "," 
)

Consulta mi última entrada de blog Comparando cliente seleccionado con otros clientes N principales | PeryTUS me gustaría ❤ Kudos si mi solución ayudara. 👉 Si usted puede pasar tiempo publicando la pregunta, también puede hacer esfuerzos para dar Felicitaciones a quien ayudó a resolver su problema. ¡Es una muestra de aprecio!

Visítenos en https://perytus.com, su tienda integral para proyectos/formación/consultoría relacionados con Power BI.

View solution in original post

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

@jeronimo2334 Creo que iba a usarlo, pero decidí no hacerlo, buena pregunta, puedes quitar esa línea.

Syndicate_Admin
Administrator
Administrator

@jeronimo2334 aquí está la expresión DAX, agregar como una nueva columna. No creé la relación entre las tablas para evitar "muchos a muchos", pero eso también se puede usar:

Name = 
VAR __id = table2[id]
VAR __post = table2[datePosted]
VAR __relatedTable = CALCULATETABLE ( table1, TREATAS ( { __id } ,  table1[id] ) )
VAR __names = 
CALCULATETABLE ( 
    VALUES ( table1[givenName] ), 
    TREATAS ( { __id }, table1[id] ),  
    table1[crStart] <= __post , 
    ( table1[crThru] == BLANK() || table1[crThru] >= __post  ),
    table1[cLStart] <= __post , 
    ( table1[cLThru] == BLANK() || table1[cLThru] >= __post  ),
    table1[opiStart] <= __post , 
    ( table1[opiThru] == BLANK() || table1[opiThru] >= __post  ),
    table1[piStart] <= __post , 
    ( table1[piThru] == BLANK() || table1[piThru] >= __post  ),
    table1[uiStart] <= __post , 
    ( table1[uiThru] == BLANK() || table1[uiThru] >= __post  ) 
)

RETURN
CONCATENATEX (
    __names,
    [givenName], "," 
)

Consulta mi última entrada de blog Comparando cliente seleccionado con otros clientes N principales | PeryTUS me gustaría ❤ Kudos si mi solución ayudara. 👉 Si usted puede pasar tiempo publicando la pregunta, también puede hacer esfuerzos para dar Felicitaciones a quien ayudó a resolver su problema. ¡Es una muestra de aprecio!

Visítenos en https://perytus.com, su tienda integral para proyectos/formación/consultoría relacionados con Power BI.

Muchas gracias @parry2k, eso hizo el truco.

No es urgente, pero cuando tienes algún tiempo, puedes explicar la lógica detrás de tu solución.
No entiendo dónde se usa __relatedTable.

Syndicate_Admin
Administrator
Administrator

@jeronimo2334 la lógica que proporcionó no tiene sentido para mí en función de la salida que mostró en table3. Tomado un ejemplo de ID = 1, fecha registrada es en el año 2015, 2018 y 2019 y el crStart para este id tiene sólo fecha en el año 2013, significa que esta condición fallará (table2.datePosted <= table1.crStart ) y significa que no obtendrá ningún nombre para Id = 1, aunque, en su salida, ha mostrado el nombre de Id = 1, (Sherry y Maurine), algo no parece estar bien, ya sea lógica o datos que proporcionó está mal, o me falta algo.

parry2k_0-1616462787663.png

Gracias por mirar esto. Tenía la lógica equivocada.
A) Las tablas se unen en la columna id.
B) Todas las fechas de inicio de la tabla1 deben ser <= table2.datePosted.
C) Todas las fechas thru de la tabla1 deben ser null o >= table2.datePosted.

Así es como se ve la consulta en MySQL:
( table1.crStart <= table2.datePosted AND (table1.crThru IS NULL OR table1.crThru >= table2.datePosted)) Y
( table1.clStart <= table2.datePosted AND (table1.clThru IS NULL OR table1.clThru >= table2.datePosted)) Y
( table1.opiStart <= table2.datePosted AND (table1.opiThru IS NULL OR table1.opiThru >= table2.datePosted)) Y
( table1.piStart <= table2.datePosted AND (table1.piThru IS NULL OR table1.piThru >= table2.datePosted)) Y
( table1.uiStart <= table2.datePosted AND (table1.uiThru IS NULL OR table1.uiThru >= table2.datePosted))

Syndicate_Admin
Administrator
Administrator

Golpe

Syndicate_Admin
Administrator
Administrator

Golpe

Syndicate_Admin
Administrator
Administrator

Golpe

Hola, @jeronimo2334

La información que ha proporcionado no me está aclarando el problema. He comprobado la mesa3. Todavía estoy confundido con el resultado que quieres.

¿Puede explicarlo con una demostración más detallada?

Saludos
Equipo de apoyo a la comunidad _ Eason

Claro, así que para llegar a ese resultado (tabla 3) primero nos unimos a la tabla1 y a la tabla 2 en id.

A continuación, con el fin de averiguar qué givenName de la tabla1 se debe utilizar en la tabla3 hacemos una comparación de fecha de la datePosted de table2 con las fechas de la tabla1.

Ellos de la manera en que funciona la comparación es (tomado de MySQL):
(table2.datePosted <= table1.crStart AND (table1.crThru IS NULL OR table2.datePosted >= table1.crThru )) Y
(table2.datePosted <= table1.clStart AND (table1.clThru IS NULL OR table2.datePosted >= table1.clThru)) Y
(table2.datePosted <= table1.opiStart AND (table1.opiThru IS NULL OR table2.datePosted >= table1.opiThru)) Y
(table2.datePosted <= table1.piStart AND (table1.piThru IS NULL OR table2.datePosted >= table1.piThru )) Y
(table2.datePosted <= table1.uiStart AND (table1.uiThru IS NULL O table2.datePosted >= table1.uiThru ))

Intenté usar LOOKUPVALUE pero eso no te permite usar expresiones para llegar al resultado deseado.
Además, la razón por la que algunas celdas tienen dos nombres en la tabla3 es porque había registros mutliple que coincidían con los criterios, por lo que los nombres se concatinaron.

Syndicate_Admin
Administrator
Administrator

Golpe

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

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

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.