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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
ManuApo
Helper II
Helper II

Tener problemas con la sintaxis de creación de una columna

Hola Comunidad,

Soy nuevo aquí y básicamente en Power Bi. En primer lugar, traté de encontrar la solución a este problema en la comunidad y Youtube, pero honestamente no pude encontrarlo y es por eso que estoy aquí ahora.

Tengo problemas con la sintaxis para crear una columna. Quiero obtener como salida los valores ''1'' o ''null'' para ayudarme más tarde a filtrar el conjunto de datos en algunas visualizaciones. El conjunto de datos es una grabación de acciones, donde un identificador puede tener diferentes acciones durante el tiempo y también hay un estado diferente.

Para que sea más fácil de entender, supongamos que mi conjunto de datos tiene 3 columnas: ID, Fecha de envío y Estado. Lo que quiero hacer es crear una nueva columna donde la agrupación por ID, comprueba la última fecha de envío y devuelve para esa fila un ''1'' , para las acciones que ocurren anteriormente con el mismo identificador, devuelve ''null'. Aquí está la parte compleja, puede suceder que hay filas duplicadas (que no quiero eliminar) y básicamente sólo quiero devolver un ''1'' a sólo una de ellas, y ''null'' al otro.

Estoy seguro de que esto se puede hacer escribiendo la sintaxis correcta. La razón por la que quiero hacerlo con una columna es automatizar el proceso.

Este es un ejemplo del conjunto de datos y el resultado ideal a la derecha con una columna llamada Comprobar:

IdFecha de envíoEstadoComprobar
100127/03/2020 14:59:00RetiradoNull
100127/03/2020 14:59:00RetiradoNull
100131/03/2020 12:50:00A la espera de verloNull
100107/04/2020 14:01:00AcuerdoNull
100107/04/2020 14:01:00Acuerdo1
100215/06/2020 12:30:00VistoNull
100203/07/2020 13:42:00Acuerdo1
100330/03/2020 08:50:00RetiradoNull
100330/03/2020 17:19:00A la espera de verloNull
100331/03/2020 10:52:00VistoNull
100307/04/2020 14:12:00AcuerdoNull
100307/04/2020 14:12:00Acuerdo1

Si no está claro lo que quiero hacer, estaré muy feliz de aclararlo. Muchas gracias de antemano a cualquiera que se tome su tiempo para leer esto.

Manu.

1 ACCEPTED SOLUTION
v-yingjl
Community Support
Community Support

No @ManuApo ,

En función de su descripción, primero debe crear una columna de índice en el editor de consultas de energía, consulte mi archivo de ejemplo en la siguiente.

index.png

Si desea lograrlo por DAX, se podría conservar la columna [Index] y la columna calculada es la siguiente:

CHECK =
IF (
    [Index]
        = CALCULATE (
            MAX ( 'Table'[Index] ),
            FILTER ( ALL ( 'Table' ), 'Table'[ID] = EARLIER ( 'Table'[ID] ) )
        ),
    1
)

Si solo desea la columna CHECK conla columna de índice, puede hacerlo por consulta de energía:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("nZDPDoIwDIdfZdmZZP2zOenNl9AD4UDCgrtwICR7fUHRiEwSPTVpvvbXr1WlEQB1oQkIDBvyCq24UgCm5iWO13ZoUq/r4n+SUSGJgwd5Sk0cY9+pcwxpqpsBa+6bARe+G0Jof6PoSR0Mujmcl/A5M4N5wwpZLOWW8ZsJqONLZKO8BtELlvvKvP4RiKPcmfzhjPtnfqHqGw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, #"Sent Date" = _t, Status = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Sent Date", type datetime}, {"Status", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each _, type table [ID=nullable number, Sent Date=nullable datetime, Status=nullable text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([Count],"Index",1)),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each List.Max([Custom][Index])),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom1", "Custom", {"Sent Date", "Status", "Index"}, {"Custom.Sent Date", "Custom.Status", "Custom.Index"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Count"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom.Sent Date", "Sent Date"}, {"Custom.Status", "Status"}, {"Custom.Index", "Index"}, {"Custom.1", "Max"}}),
    #"Added Custom2" = Table.AddColumn(#"Renamed Columns", "CHECK", each if 
[Index] = [Max] then 1 else null),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom2",{"Index", "Max"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns1",{{"CHECK", Int64.Type}})
in
    #"Changed Type1"

c1.pngc2.png

Adjunto un archivo de muestra en el siguiente, espera ayudarle.

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

6 REPLIES 6
v-yingjl
Community Support
Community Support

No @ManuApo ,

En función de su descripción, primero debe crear una columna de índice en el editor de consultas de energía, consulte mi archivo de ejemplo en la siguiente.

index.png

Si desea lograrlo por DAX, se podría conservar la columna [Index] y la columna calculada es la siguiente:

CHECK =
IF (
    [Index]
        = CALCULATE (
            MAX ( 'Table'[Index] ),
            FILTER ( ALL ( 'Table' ), 'Table'[ID] = EARLIER ( 'Table'[ID] ) )
        ),
    1
)

Si solo desea la columna CHECK conla columna de índice, puede hacerlo por consulta de energía:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("nZDPDoIwDIdfZdmZZP2zOenNl9AD4UDCgrtwICR7fUHRiEwSPTVpvvbXr1WlEQB1oQkIDBvyCq24UgCm5iWO13ZoUq/r4n+SUSGJgwd5Sk0cY9+pcwxpqpsBa+6bARe+G0Jof6PoSR0Mujmcl/A5M4N5wwpZLOWW8ZsJqONLZKO8BtELlvvKvP4RiKPcmfzhjPtnfqHqGw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, #"Sent Date" = _t, Status = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Sent Date", type datetime}, {"Status", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each _, type table [ID=nullable number, Sent Date=nullable datetime, Status=nullable text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([Count],"Index",1)),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each List.Max([Custom][Index])),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom1", "Custom", {"Sent Date", "Status", "Index"}, {"Custom.Sent Date", "Custom.Status", "Custom.Index"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Count"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom.Sent Date", "Sent Date"}, {"Custom.Status", "Status"}, {"Custom.Index", "Index"}, {"Custom.1", "Max"}}),
    #"Added Custom2" = Table.AddColumn(#"Renamed Columns", "CHECK", each if 
[Index] = [Max] then 1 else null),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom2",{"Index", "Max"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns1",{{"CHECK", Int64.Type}})
in
    #"Changed Type1"

c1.pngc2.png

Adjunto un archivo de muestra en el siguiente, espera ayudarle.

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola @v-yingjl ,

Gracias por tu respuesta. No me parece muy claro. Intenté ver el archivo de ejemplo, pero no sé cómo crear la columna de índice.

Así que usted mencionó que puedo hacerlo sin una columna de índice, pero no veo la solución en ese caso.

Si la única manera de hacerlo es creando una columna de índice, ¿cómo puedo crear una columna de índice basada en la columna ID. ¿Qué sucede si mi conjunto de datos no está ordenado por la columna ID? ¿Funcionará la columna de índice, basada en la columna ID?

Gracias por tu ayuda una vez más.

No @ManuApo ,

En mi archivo de ejemplo, ambas de las dos soluciones alternativas de mi columna de índice de uso de ejemplo, una de ellas que usa el método de consulta de energía simplemente no la muestra en la vista de datos.

Para crear una columna de índice, puede comprobar estos dos pasos en la consulta de energía:

pq.png

Si el conjunto de datos no ordenado por la columna ID, no afectará a becasuse el grupo por entidad se basa en cada campo de la columna. Puede referir este documento: Agrupación o resumen de filas

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

ebeery
Solution Sage
Solution Sage

Hola @ManuApo ,

Creo que algo como esto como la fórmula para su columna calculada podría funcionar.

CalculatedCHECK =
VAR UID = 'Table1'[ID]
VAR LastSentDate =
    CALCULATE (
        MAX ( 'Table1'[Sent Date] ),
        FILTER ( 'Table1', 'Table1'[ID] = UID )
    )
RETURN
    IF ( 'Table1'[Sent Date] = LastSentDate, 1 )

@ManuApo sentimos, me acabo de dar cuenta de que pasé por alto su requisito de mostrar sólo el registro en una de las filas, a pesar de que las filas no son únicas.

Esto hace que el problema sea un poco más difícil... ¿Es necesario conservar realmente esas filas duplicadas en el conjunto de datos?

Hola @ebeery gracias por su respuesta rápida.

Desafortunadamente no puedo eliminar los duplicados, en el conjunto de datos original hay una columna que los hace diferentes, por lo que son relevantes. También en el futuro los datos van a ser refrescantes constantemente, no quiero estar modelando los datos constantemente (eliminando duplicados) que creo que con una columna calculada no sucederá.

La solución que usted dio, está muy cerca de la solución que estoy buscando (Esta es mi salida en la tabla de abajo). ¿Qué pasa si creamos una segunda columna CHECK2? Donde comprueba por ID si hay más de 1 ''1'' y devuelve los valores NULL a los demás

ID Fecha de envío Estado CHECK CHECK2
1001 27/03/2020 14:59:00 Retirada nula
1001 27/03/2020 14:59:00 Retirada nula
1001 31/03/2020 12:50:00 A la espera de nulo
1001 07/04/2020 14:01:00 Acordado 1 nulo
1001 07/04/2020 14:01:00 Acordado 1 1
1002 15/06/2020 12:30:00 Null visto
1002 03/07/2020 13:42:00 Acordado 1 1
1003 30/03/2020 08:50:00 Retirada nula
1003 30/03/2020 17:19:00 A la espera de nulo
1003 31/03/2020 10:52:00 Null visto
1003 07/04/2020 14:12:00 Acordado 1 nulo
1003 07/04/2020 14:12:00 Acordado 1 1


Gracias de nuevo @ebeery

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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