Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
¡Hola!
Tengo un conjunto de datos y estoy tratando de obtener el último "Departamento" dependiendo de una fecha que selecciono en una segmentación de fecha. A continuación se muestra un ejemplo del conjunto de datos. La medida devolvería el valor del Departamento con la fecha de vigencia máxima que es justo antes de la fecha seleccionada de la segmentación de datos. No puedo usar solo la función MAX porque devolverá el valor máximo sin importar la fecha que seleccione. Por favor, vea a continuación lo que estoy buscando. Gracias de antemano por su ayuda! 🙂
Dataset
Id | Fecha de entrada en vigor | Departamento |
A1 | 12/1/2020 | Hr |
A1 | 11/1/2020 | Hr |
A1 | 12/2/2019 | eso |
A1 | 11/2/2019 | eso |
B1 | 10/1/2020 | Finanzas |
B1 | 10/1/2020 | eso |
B1 | 10/2/2019 | eso |
B1 | 10/2/2019 | eso |
C1 | 8/1/2020 | Hr |
C1 | 8/1/2020 | Finanzas |
C1 | 8/2/2019 | eso |
C1 | 8/2/2019 | eso |
D1 | 9/1/2020 | eso |
D1 | 9/1/2020 | eso |
D1 | 9/2/2019 | Finanzas |
D1 | 9/2/2019 | Hr |
Resultados esperados si la fecha seleted es 12/1/20
Id | Fecha de entrada en vigor | Departamento |
A1 | 12/1/2020 | Hr |
B1 | 10/1/2020 | Finanzas |
C1 | 8/1/2020 | Hr |
D1 | 9/1/2020 | eso |
Resultados esperados si la fecha seleted es 12/1/19
Id | Fecha de entrada en vigor | Departamento |
A1 | 12/1/2019 | eso |
B1 | 10/2/2019 | eso |
C1 | 8/2/2019 | eso |
D1 | 9/2/2019 | Finanzas |
Solved! Go to Solution.
No @JayZee,
En función de su descripción, primero debe agregar una columna de índice para cada ID en la consulta de potencia, la consulta es así:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjRU0lEyMjAy0DfUNzQCsj2ClGJ10MQNMcQNLfWNIOo9QzDFDRHiTsjmGADZbpl5iXnJqdglUTVBDCNC3BnJHAuEW9GFka12RjLKAsMkdGEXJJMsiRUGG2KJZi+6HMipsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, #"Effective Date" = _t, Department = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Effective Date", type date}, {"Department", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each _, type table [ID=nullable text, Effective Date=nullable date, Department=nullable text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([Count],"Index",1)),
#"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Effective Date", "Department", "Index"}, {"Custom.Effective Date", "Custom.Department", "Custom.Index"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Count"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom.Effective Date", "Effective Date"}, {"Custom.Department", "Department"}, {"Custom.Index", "Index"}}),
#"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"Effective Date", type date}, {"Department", type text}, {"Index", Int64.Type}})
in
#"Changed Type1"
Ciérrelo y aplíquelo en la consulta de potencia, cree una medida como esta, colóquela en el filtro visual y establezca su valor como 1:
Visual control =
VAR _Name =
CALCULATE (
MAX ( 'Table'[Department] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID]
IN DISTINCT ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
&& 'Table'[Index]
= CALCULATE (
MIN ( 'Table'[Index] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID] = EARLIER ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
)
)
)
)
VAR _Date =
CALCULATE (
MAX ( 'Table'[Effective Date] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID]
IN DISTINCT ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
&& 'Table'[Index]
= CALCULATE (
MIN ( 'Table'[Index] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID] = EARLIER ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
)
)
)
)
RETURN
IF (
_Name = SELECTEDVALUE ( 'Table'[Department] )
&& _Date = SELECTEDVALUE ( 'Table'[Effective Date] ),
1,
0
)
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 @JayZee,
En función de su descripción, primero debe agregar una columna de índice para cada ID en la consulta de potencia, la consulta es así:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjRU0lEyMjAy0DfUNzQCsj2ClGJ10MQNMcQNLfWNIOo9QzDFDRHiTsjmGADZbpl5iXnJqdglUTVBDCNC3BnJHAuEW9GFka12RjLKAsMkdGEXJJMsiRUGG2KJZi+6HMipsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, #"Effective Date" = _t, Department = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Effective Date", type date}, {"Department", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each _, type table [ID=nullable text, Effective Date=nullable date, Department=nullable text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([Count],"Index",1)),
#"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Effective Date", "Department", "Index"}, {"Custom.Effective Date", "Custom.Department", "Custom.Index"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Count"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom.Effective Date", "Effective Date"}, {"Custom.Department", "Department"}, {"Custom.Index", "Index"}}),
#"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"Effective Date", type date}, {"Department", type text}, {"Index", Int64.Type}})
in
#"Changed Type1"
Ciérrelo y aplíquelo en la consulta de potencia, cree una medida como esta, colóquela en el filtro visual y establezca su valor como 1:
Visual control =
VAR _Name =
CALCULATE (
MAX ( 'Table'[Department] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID]
IN DISTINCT ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
&& 'Table'[Index]
= CALCULATE (
MIN ( 'Table'[Index] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID] = EARLIER ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
)
)
)
)
VAR _Date =
CALCULATE (
MAX ( 'Table'[Effective Date] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID]
IN DISTINCT ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
&& 'Table'[Index]
= CALCULATE (
MIN ( 'Table'[Index] ),
FILTER (
ALL ( 'Table' ),
'Table'[ID] = EARLIER ( 'Table'[ID] )
&& YEAR ( SELECTEDVALUE ( 'Date'[Effective Date] ) )
= YEAR ( SELECTEDVALUE ( 'Table'[Effective Date] ) )
&& 'Table'[Effective Date] <= SELECTEDVALUE ( 'Date'[Effective Date] )
)
)
)
)
RETURN
IF (
_Name = SELECTEDVALUE ( 'Table'[Department] )
&& _Date = SELECTEDVALUE ( 'Table'[Effective Date] ),
1,
0
)
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.
Appart de ID A1 cada otro ID tiene fechas de vigencia duplicadas que va a hacer que sea imposible hacer lo que desea ya que 2 departamentos son efectivos en la misma fecha, pero suponiendo que esto es sólo un error tipográfico en sus datos de muestra que podría hacer algo como la siguiente.
@JayZee , Crear una nueva fecha de finalización de columna
Fecha de finalización: maxx(filter(table, [id] ?earlier([ID]) && [Department] ?earlier([Department]) && [Effective Date] <earlier([Effective Date])),[Effective Date])-1
A continuación, pruebe una medida como esta con la tabla de fechas independiente
medida :
var _max á maxx(allselected('Date'),'Date'[Date])
devolución
calculate(countrows(table), filter(table, table[Effective Date] <-_max y table[Effective Date] >- _max))
o seguir un approch como mi blog de RRHH
https://www.youtube.com/watch?v=e6Y-l_JtCq4