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
Syndicate_Admin
Administrator
Administrator

Creación de una tabla de difusión de fechas para actividades y recursos

Hola

He estado tratando de resolver esto por mucho tiempo y necesito ayuda.

Tengo una base de datos que contiene datos de actividad con varios recursos asignados por actividad, Cada fila contiene ID de actividad, Nombre de recurso, Inicio, Finalizar, Horas de presupuesto.

Estoy intentando trazar el recurso a lo largo del tiempo y quiero crear una tabla de calendario que contiene el valor por actividad/recurso de cada período durante la duración de las actividades.

Los datos de origen tienen este aspecto:

ID de actividad

Recursos

Empezar

Terminar

Presupuesto

ACT001

Jane

01-Enero-21

28-Feb-21

100

ACT001

Dave

01-Enero-21

31-Mar-21

100

ACT002

Jane

01-Mar-21

31-Abr-21

20

ACT003

Bob

01-Feb-21

31-Abr-21

75

Comencé con una fórmula DAX que crea un spread de fecha mínimo/máximo que muestra el inicio de cada mes.

SPREAD_DATES - FILTRO (
CALENDAR(MIN('RESOURCE'[start]),MAX('RESOURCE'[finish])),
EOMONTH ( [Fecha],-1 )+1 - [Fecha]

Pero lo que necesito es una tabla que tenga períodos repetidos donde las actividades/recursos se superpongan.

Así que la tabla debe tener este aspecto:

Fecha de inicio del período

ID de actividad

Recursos

Presupuesto

01-Enero-21

ACT001

Jane

50

01-Enero-21

ACT001

Dave

33

01-Feb-21

ACT001

Jane

50

01-Feb-21

ACT001

Dave

33

01-Feb-21

ACT003

Bob

25

01-Mar-21

ACT001

Dave

33

01-Mar-21

ACT002

Jane

10

01-Mar-21

ACT003

Bob

25

01-Abr-21

ACT002

Jane

10

01-Abr-21

ACT003

Bob

25

Cualquier ayuda o sugerencia apreciada.

Gracias de antemano.

mate

2 ACCEPTED SOLUTIONS

Hola, @spuff55

Lo siento por la respuesta tardía. Puede crear una tabla Calculada y una columna Calculada para obtener el resultado que desee.

1 Tabla calculada

Table =

VAR cal =

    SELECTCOLUMNS (

        FILTER (

            CALENDAR ( MIN ( RESOURCE[Start] ), MAX ( RESOURCE[Finish] ) ),

            DAY ( [Date] ) = 1

        ),

        "Period", [Date]

    )

VAR cross_t =

    FILTER (

        CROSSJOIN ( RESOURCE, cal ),

        [Period] >= RESOURCE[Start]

            && [Period] <= RESOURCE[Finish]

    )

VAR sel_t =

    SELECTCOLUMNS (

        cross_t,

        "Period Start Date", [Period],

        "ActivityID", [Activity ID],

        "Resource", [Recource],

        "Budget_overall", [Budget]

    )

RETURN

    sel_t





2 Calculated column

Budget =

VAR num =

    CALCULATE (

        COUNT ( 'Table'[Budget_overall] ),

        ALLEXCEPT ( 'Table', 'Table'[ActivityID], 'Table'[Resource] )

    )

RETURN

    'Table'[Budget_overall] / num

El resultado tiene este aspecto:

v-cazheng-msft_0-1614065886993.png

Aquí está el pbix.

Saludos

Caiyun Zheng

View solution in original post

¡Eso funciona muy bien, gracias!

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Hola, @spuff55

Puede crear una tabla Calculada para obtener el resultado que desee.

New_table =

VAR start1 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Start] ),

        RESOURCE[Activity ID] = "ACT001",

        RESOURCE[Recource] = "Dave"

    )

VAR finish1 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Finish] ),

        RESOURCE[Activity ID] = "ACT001",

        RESOURCE[Recource] = "Dave"

    )

VAR mon_inter1 =

    MONTH ( finish1 ) - MONTH ( start1 ) + 1

VAR t1 =

    SELECTCOLUMNS (

        FILTER ( CALENDAR ( start1, finish1 ), DAY ( [Date] ) = 1 ),

        "Period Start Date", [Date]

    )

VAR tt1 =

    ADDCOLUMNS (

        t1,

        "ActivityID", "ACT001",

        "Resource", "Dave",

        "Budget",

            FORMAT (

                DIVIDE (

                    CALCULATE (

                        SELECTEDVALUE ( RESOURCE[Budget] ),

                        RESOURCE[Activity ID] = "ACT001",

                        RESOURCE[Recource] = "Dave"

                    ),

                    mon_inter1

                ),

                "#"

            )

    )

VAR start2 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Start] ),

        RESOURCE[Activity ID] = "ACT001",

        RESOURCE[Recource] = "Jane"

    )

VAR finish2 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Finish] ),

        RESOURCE[Activity ID] = "ACT001",

        RESOURCE[Recource] = "Jane"

    )

VAR mon_inter2 =

    MONTH ( finish2 ) - MONTH ( start2 ) + 1

VAR t2 =

    SELECTCOLUMNS (

        FILTER ( CALENDAR ( start2, finish2 ), DAY ( [Date] ) = 1 ),

        "Period Start Date", [Date]

    )

VAR tt2 =

    ADDCOLUMNS (

        t2,

        "ActivityID", "ACT001",

        "Resource", "Jane",

        "Budget",

            FORMAT (

                DIVIDE (

                    CALCULATE (

                        SELECTEDVALUE ( RESOURCE[Budget] ),

                        RESOURCE[Activity ID] = "ACT001",

                        RESOURCE[Recource] = "Jane"

                    ),

                    mon_inter2

                ),

                "#"

            )

    )

VAR start3 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Start] ),

        RESOURCE[Activity ID] = "ACT002",

        RESOURCE[Recource] = "Jane"

    )

VAR finish3 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Finish] ),

        RESOURCE[Activity ID] = "ACT002",

        RESOURCE[Recource] = "Jane"

    )

VAR mon_inter3 =

    MONTH ( finish3 ) - MONTH ( start3 ) + 1

VAR t3 =

    SELECTCOLUMNS (

        FILTER ( CALENDAR ( start3, finish3 ), DAY ( [Date]) = 1 ),

        "Period Start Date", [Date]

    )

VAR tt3 =

    ADDCOLUMNS (

        t3,

        "ActivityID", "ACT002",

        "Resource", "Jane",

        "Budget",

            FORMAT (

                DIVIDE (

                    CALCULATE (

                        SELECTEDVALUE ( RESOURCE[Budget] ),

                        RESOURCE[Activity ID] = "ACT002",

                        RESOURCE[Recource] = "Jane"

                    ),

                    mon_inter3

                ),

                "#"

            )

    )

VAR start4 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Start] ),

        RESOURCE[Activity ID] = "ACT003",

        RESOURCE[Recource] = "Bob"

    )

VAR finish4 =

    CALCULATE (

        SELECTEDVALUE ( RESOURCE[Finish] ),

        RESOURCE[Activity ID] = "ACT003",

        RESOURCE[Recource] = "Bob"

    )

VAR mon_inter4 =

    MONTH ( finish4 ) - MONTH ( start4 ) + 1

VAR t4 =

    SELECTCOLUMNS (

        FILTER ( CALENDAR ( start4, finish4 ), DAY ( [Date] ) = 1 ),

        "Period Start Date", [Date]

    )

VAR tt4 =

    ADDCOLUMNS (

        t4,

        "ActivityID", "ACT003",

        "Resource", "Bob",

        "Budget",

            FORMAT (

                DIVIDE (

                    CALCULATE (

                        SELECTEDVALUE ( RESOURCE[Budget] ),

                        RESOURCE[Activity ID] = "ACT003",

                        RESOURCE[Recource] = "Bob"

                    ),

                    mon_inter4

                ),

                "#"

            )

    )

RETURN

    UNION ( tt1, tt2, tt3, tt4 )

El resultado tiene este aspecto:

v-cazheng-msft_0-1613637955286.png

Aquí está el archivo pbix.

Saludos

Caiyun Zheng

¿Esa es la respuesta que estás buscando? Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola Caiyun

Eso es realmente genial, pero aunque proporciona el resultado final, no mencioné que la tabla original está siendo impulsada por una herramienta de administración de proyectos y siempre está cambiando a medida que se agregan nuevas tareas y asignación de recursos.

¿Habría una manera de hacer lo mismo sin enumerar explícitamente los nombres dentro del DAX para que las nuevas adiciones a la lista se contabilizan en la segunda tabla.

por ejemplo, agregué a "Danny" a la primera mesa y su tarea no se calcula en la segunda.

spuff55_0-1613678084354.png

Gracias por tomarse el tiempo para responder, y por su solución de nivel Jedi.

mate

Hola, @spuff55

Lo siento por la respuesta tardía. Puede crear una tabla Calculada y una columna Calculada para obtener el resultado que desee.

1 Tabla calculada

Table =

VAR cal =

    SELECTCOLUMNS (

        FILTER (

            CALENDAR ( MIN ( RESOURCE[Start] ), MAX ( RESOURCE[Finish] ) ),

            DAY ( [Date] ) = 1

        ),

        "Period", [Date]

    )

VAR cross_t =

    FILTER (

        CROSSJOIN ( RESOURCE, cal ),

        [Period] >= RESOURCE[Start]

            && [Period] <= RESOURCE[Finish]

    )

VAR sel_t =

    SELECTCOLUMNS (

        cross_t,

        "Period Start Date", [Period],

        "ActivityID", [Activity ID],

        "Resource", [Recource],

        "Budget_overall", [Budget]

    )

RETURN

    sel_t





2 Calculated column

Budget =

VAR num =

    CALCULATE (

        COUNT ( 'Table'[Budget_overall] ),

        ALLEXCEPT ( 'Table', 'Table'[ActivityID], 'Table'[Resource] )

    )

RETURN

    'Table'[Budget_overall] / num

El resultado tiene este aspecto:

v-cazheng-msft_0-1614065886993.png

Aquí está el pbix.

Saludos

Caiyun Zheng

¡Eso funciona muy bien, gracias!

HAY @amitchandak

Gracias por los ejemplos, es un gran post, pero no estoy seguro de si resuelve el problema exactamente.

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.