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
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
Solved! Go to Solution.
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:
Aquí está el pbix.
Saludos
Caiyun Zheng
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:
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.
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:
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.
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.