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
JayZee
New Member

Ayuda con la medida

¡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

IdFecha de entrada en vigorDepartamento
A112/1/2020Hr
A111/1/2020Hr
A112/2/2019eso
A111/2/2019eso
B110/1/2020Finanzas
B110/1/2020eso
B110/2/2019eso
B110/2/2019eso
C18/1/2020Hr
C18/1/2020Finanzas
C18/2/2019eso
C18/2/2019eso
D19/1/2020eso
D19/1/2020eso
D19/2/2019Finanzas
D19/2/2019Hr

Resultados esperados si la fecha seleted es 12/1/20

IdFecha de entrada en vigorDepartamento
A112/1/2020Hr
B110/1/2020Finanzas
C18/1/2020Hr
D19/1/2020eso

Resultados esperados si la fecha seleted es 12/1/19

IdFecha de entrada en vigorDepartamento
A112/1/2019eso
B110/2/2019eso
C18/2/2019eso
D19/2/2019Finanzas
1 ACCEPTED SOLUTION
v-yingjl
Community Support
Community Support

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
    )

re.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

3 REPLIES 3
v-yingjl
Community Support
Community Support

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
    )

re.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.

d_gosbell
Super User
Super User

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.

El último departamento de la última si (HASONEVALUE('Table'[ID]),
var maxDate á max('Calendar'[Fecha] )
var maxEffective ? CALCULATE(max('Table'[Fecha de entrada en vigor]), 'Tabla'[Fecha de entrada en vigor] < maxDate)
var result á CALCULATE(VALUES('Table'[Departamento]), 'Table'[Fecha de entrada en vigor] á maxEffective )
resultado de la devolución)
Nota: Esto supone que tiene la segmentación de fecha conectada a una tabla de fechas (denominada 'Calendario' en la expresión de ejemplo) que no tiene relaciones con la tabla principal.
amitchandak
Super User
Super User

@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://community.powerbi.com/t5/Community-Blog/HR-Analytics-Active-Employee-Hire-and-Termination-tr...

https://www.youtube.com/watch?v=e6Y-l_JtCq4

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.