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.
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:
Id | Fecha de envío | Estado | Comprobar |
1001 | 27/03/2020 14:59:00 | Retirado | Null |
1001 | 27/03/2020 14:59:00 | Retirado | Null |
1001 | 31/03/2020 12:50:00 | A la espera de verlo | Null |
1001 | 07/04/2020 14:01:00 | Acuerdo | Null |
1001 | 07/04/2020 14:01:00 | Acuerdo | 1 |
1002 | 15/06/2020 12:30:00 | Visto | Null |
1002 | 03/07/2020 13:42:00 | Acuerdo | 1 |
1003 | 30/03/2020 08:50:00 | Retirado | Null |
1003 | 30/03/2020 17:19:00 | A la espera de verlo | Null |
1003 | 31/03/2020 10:52:00 | Visto | Null |
1003 | 07/04/2020 14:12:00 | Acuerdo | Null |
1003 | 07/04/2020 14:12:00 | Acuerdo | 1 |
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.
Solved! Go to Solution.
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.
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"
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.
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.
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"
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:
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.
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
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.