cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Helper I
Helper I

CALCULATETABLE para iterar ingresos y gastos a lo largo de los períodos mensuales mediante fechas de inicio y finalización.

Hola

Estoy tratando de CALCULATETABLE (muestra a continuación) para iterar a través de la FIRSTDATE (START_DATE) y LASTDATE (END_DATE) y línea recta REVENUE y LABOR durante cada período mensual para que pueda vincular los datos del proyecto propuestos a los datos reales mensuales a una tabla de dimensiones de fecha.

DATOS PROPUESTOS DEL PROYECTO

PROJ_ID START_DATE END_DATE LABOR DE INGRESOS

11111 8/15/2020 8/14/2021 1,000,000 750,000

11111 8/15/2021 8/14/2022 1,000,000 750,000

11112 8/15/2020 8/14/2021 1,000,000 750,000

11113 8/15/2020 8/14/2021 1,000,000 750,000

Te lo agradezco en avanzado.

1 ACCEPTED SOLUTION

Hola @walkerb32

Construyo una tabla como la tuya y agredo una columna calculada.

Rev & Labor = 
VAR baseTable =
    DISTINCT ( ( 'Post Award Tracking v2'[Project Code] ) )
RETURN
    GENERATE (
        baseTable,
        VAR PoP_Start =
            MIN ( 'Post Award Tracking v2'[POP Start] )
        VAR PoP_End =
            MAX ( 'Post Award Tracking v2'[POP End] )
        VAR MonthDiff =
            DATEDIFF ( PoP_Start, PoP_End, MONTH )
        VAR Avg_Rev =
            DIVIDE (
                CALCULATE ( SUM ( 'Post Award Tracking v2'[Revenue_TEST] ) ),
                MonthDiff
            )
        VAR Revenue =
            CALCULATE ( SUM ( 'Post Award Tracking v2'[Revenue_TEST] ) )
        VAR Avg_LABOR =
            DIVIDE ( CALCULATE ( SUM ( 'Post Award Tracking v2'[Labor_TEST] ) ), MonthDiff )
        VAR Labor =
            CALCULATE ( SUM ( 'Post Award Tracking v2'[Labor_TEST] ) )
        RETURN
            GENERATE (
                GENERATESERIES ( PoP_Start, PoP_End, 1 ),
                VAR inc = [Value]
                VAR _Month =
                    MONTH ( [Value] )
                RETURN
                    ROW (
                        "PoP Start", PoP_Start,
                        "PoP End", PoP_End,
                        "Months", MonthDiff,
                        "Avg Rev", Avg_Rev,
                        "Revenue", Revenue,
                        "Avg Labor", Avg_LABOR,
                        "Labor", Labor,
                        "Month", _Month
                    )
            )
    )

Min each month date = 
IF (
    AND (
        MONTH ( 'Rev & Labor'[Value] ) = MONTH ( 'Rev & Labor'[PoP Start] ),
        YEAR ( 'Rev & Labor'[Value] ) = YEAR ( 'Rev & Labor'[PoP Start] )
    ),
    'Rev & Labor'[PoP Start],
    CALCULATE (
        MIN ( 'Rev & Labor'[Value] ),
        FILTER (
            'Rev & Labor',
            'Rev & Labor'[Month] = EARLIER ( 'Rev & Labor'[Month] )
                && YEAR ( 'Rev & Labor'[Value] ) = EARLIER ( 'Rev & Labor'[Value].[Year] )
        )
    ) + 20
)

Cree un objeto visual de tabla para mostrar el resultado:

1.png
Puede descargar el archivo pbix desde este enlace: CALCULATETABLE para iterar ingresos y gastos a lo largo de los períodos mensuales mediante fechas d...

Saludos

Rico Zhou

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

12 REPLIES 12
Community Support
Community Support

Hola @walkerb32

¿Podría decirme si su problema ha sido resuelto? Si es así, acédi es la solución. Más gente se beneficiará de ello. O todavía está confundido al respecto, por favor proporcione más detalles sobre su tabla y su problema o compártame con su archivo pbix de su Onedrive for Business.

Saludos

Rico Zhou

@RicoZhou Gracias y está MUY cerca.

Un último elemento: en el ejemplo que proporcionó (que es impresionante, BTW) cada proyecto recorre en iteración las fechas de inicio y finalización de MIN y MAX Period of Performance (POP) Sart y POP End Dates en lugar de las fechas de inicio y finalización individuales de los proyectos. ¿Hay alguna manera de calcular la tabla según la fecha de inicio y finalización de cada proyecto?

Por ejemplo, el proyecto 25011 solo debe tener 6 partidas individuales:

Código de proyecto POP Iniciar POP Fin Número de líneas a Ingresos Promedios y Trabajo
11139 10/1/2014 9/30/2015 11
15147 7/21/2014 7/21/2015 12
15160 2/28/2015 2/15/2016 12
19031 2/16/2015 2/15/2016 12
19032 3/9/2015 3/8/2016 12
24005 7/1/2015 6/30/2016 11
25011 5/1/2015 11/30/2015 6
36007 5/1/2015 9/30/2016 16

¡Agradezco toda la ayuda!

Brad

Helper I
Helper I

@Ashish_Mathur @RicoZhou @AntrikshSharma

Utilizando el proyecto 11113 como ejemplo, los resultados serían:

PROJECT_ID LABOR DE INGRESOS DE PERIODO
11113 9/18/2018 83,333 62,500
11113 10/18/2018 83,333 62,500
11113 11/17/2018 83,333 62,500
11113 12/17/2018 83,333 62,500
11113 1/16/2019 83,333 62,500
11113 2/15/2019 83,333 62,500
11113 3/17/2019 83,333 62,500
11113 4/16/2019 83,333 62,500
11113 5/16/2019 83,333 62,500
11113 6/15/2019 83,333 62,500
11113 7/15/2019 83,333 62,500
11113 8/14/2019 83,333 62,500

¡Espero que esto ayude!

Hola @walkerb32

Construyo una mesa como la tuya para hacerme una prueba.

1.png

Cree un período para la tabla 11111.

Period for 11111 = 
GENERATE (
    GENERATESERIES ( 1, 23 ),
    VAR inc = [Value]
    RETURN
        ROW ( "ID", "11111", "Period", DATE ( 2020, 07 + inc, 18 ) + 31 )
)

2.png

Construir dos medidas:

REVENUE = 
VAR _Re =
    CALCULATE (
        SUM ( 'PROPOSED PROJECT DATA'[REVENUE] ),
        FILTER (
            'PROPOSED PROJECT DATA',
            'PROPOSED PROJECT DATA'[START_DATE] <= MAX ( 'Period for 11111'[Period] )
                && 'PROPOSED PROJECT DATA'[END_DATE] >= MAX ( 'Period for 11111'[Period] )
                && 'PROPOSED PROJECT DATA'[PROJ_ID] = MAX ( 'Period for 11111'[ID] )
        )
    )
RETURN
    DIVIDE ( _Re, 12 )
LABOR = 
VAR _LA =
    CALCULATE (
        SUM ( 'PROPOSED PROJECT DATA'[LABOR] ),
        FILTER (
            'PROPOSED PROJECT DATA',
            'PROPOSED PROJECT DATA'[START_DATE] <= MAX ( 'Period for 11111'[Period] )
                && 'PROPOSED PROJECT DATA'[END_DATE] >= MAX ( 'Period for 11111'[Period] )
                && 'PROPOSED PROJECT DATA'[PROJ_ID] = MAX ( 'Period for 11111'[ID] )
        )
    )
RETURN
    DIVIDE ( _LA, 12 )

Resultado:

3.png

Puede descargar el archivo pbix desde este enlace: CALCULATETABLE para iterar ingresos y gastos a lo largo de los períodos mensuales utilizando la fec...

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

@RicoZhou ¡Estoy cerca! El siguiente código se salta un mes. Debería iterar durante un período de 60 meses, pero estoy recibiendo 31. ¡Los ingresos medios sobre la tabla equivalen a los ingresos totales! Has sido una gran ayuda/inspiración. Toda su ayuda ha sido muy apreciada.

CERRAR ?

Var baseTable (Var baseTable) ( VAR baseTable)

DISTINCT( ( 'Seguimiento posterior a la adjudicación v2'[Código de proyecto] ) )

devolución

GENERAR (

baseTable,

VAR PoP_Start á [PoP_Start] //MIN

VAR PoP_End á [PoP_End] //MAX

Meses de VAR ?

DATEDIFF ( PoP_Start, PoP_End, MES ) -- número de meses de cálculo para el proyecto

SER Months_Offset ?

DATEDIFF (PoP_Start, PoP_End, MES ) - no funcionó

VAR Avg_Rev ?

DIVIDE ( CALCULATE ( SUM ( 'Seguimiento posterior a la adjudicación v2'[Ingresos] ) ), Meses )

Ingresos del VAR ( VAR Revenue)

CALCULAR ( SUM ( 'Seguimiento posterior a la adjudicación v2'[Ingresos] ) )

devolución

GENERAR (

GENERATESERIES ( PoP_Start, PoP_End,Months ), -- esta es la parte con la que estoy teniendo problemas, saltándose un mes

VAR inc á [Valor]

devolución

ROW (

"Proj_ID", baseTable,

"PoP Start", PoP_Start,

"PoP End", PoP_End,

"Meses", Meses,

"Avg Rev", Avg_Rev,

"Ingresos", Ingresos

)

)

)

Resultado:

(no se puede averiguar cómo agregar imágenes :()

Archivo PBI

Hola @walkerb32

Construyo una tabla como la tuya y agredo una columna calculada.

Rev & Labor = 
VAR baseTable =
    DISTINCT ( ( 'Post Award Tracking v2'[Project Code] ) )
RETURN
    GENERATE (
        baseTable,
        VAR PoP_Start =
            MIN ( 'Post Award Tracking v2'[POP Start] )
        VAR PoP_End =
            MAX ( 'Post Award Tracking v2'[POP End] )
        VAR MonthDiff =
            DATEDIFF ( PoP_Start, PoP_End, MONTH )
        VAR Avg_Rev =
            DIVIDE (
                CALCULATE ( SUM ( 'Post Award Tracking v2'[Revenue_TEST] ) ),
                MonthDiff
            )
        VAR Revenue =
            CALCULATE ( SUM ( 'Post Award Tracking v2'[Revenue_TEST] ) )
        VAR Avg_LABOR =
            DIVIDE ( CALCULATE ( SUM ( 'Post Award Tracking v2'[Labor_TEST] ) ), MonthDiff )
        VAR Labor =
            CALCULATE ( SUM ( 'Post Award Tracking v2'[Labor_TEST] ) )
        RETURN
            GENERATE (
                GENERATESERIES ( PoP_Start, PoP_End, 1 ),
                VAR inc = [Value]
                VAR _Month =
                    MONTH ( [Value] )
                RETURN
                    ROW (
                        "PoP Start", PoP_Start,
                        "PoP End", PoP_End,
                        "Months", MonthDiff,
                        "Avg Rev", Avg_Rev,
                        "Revenue", Revenue,
                        "Avg Labor", Avg_LABOR,
                        "Labor", Labor,
                        "Month", _Month
                    )
            )
    )

Min each month date = 
IF (
    AND (
        MONTH ( 'Rev & Labor'[Value] ) = MONTH ( 'Rev & Labor'[PoP Start] ),
        YEAR ( 'Rev & Labor'[Value] ) = YEAR ( 'Rev & Labor'[PoP Start] )
    ),
    'Rev & Labor'[PoP Start],
    CALCULATE (
        MIN ( 'Rev & Labor'[Value] ),
        FILTER (
            'Rev & Labor',
            'Rev & Labor'[Month] = EARLIER ( 'Rev & Labor'[Month] )
                && YEAR ( 'Rev & Labor'[Value] ) = EARLIER ( 'Rev & Labor'[Value].[Year] )
        )
    ) + 20
)

Cree un objeto visual de tabla para mostrar el resultado:

1.png
Puede descargar el archivo pbix desde este enlace: CALCULATETABLE para iterar ingresos y gastos a lo largo de los períodos mensuales mediante fechas d...

Saludos

Rico Zhou

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

Hola @RicoZhou!

Un último elemento: en el ejemplo que proporcionó (que es impresionante, BTW) cada proyecto recorre en iteración las fechas de inicio y finalización de MIN y MAX Period of Performance (POP) Sart y POP End Dates en lugar de las fechas de inicio y finalización individuales de los proyectos. ¿Hay alguna manera de calcular la tabla según la fecha de inicio y finalización de cada proyecto?

Por ejemplo, el proyecto 25011 solo debe tener 6 partidas individuales:

Código de proyecto POP Iniciar POP Fin Número de líneas a Ingresos Promedios y Trabajo
11139 10/1/2014 9/30/2015 11
15147 7/21/2014 7/21/2015 12
15160 2/28/2015 2/15/2016 12
19031 2/16/2015 2/15/2016 12
19032 3/9/2015 3/8/2016 12
24005 7/1/2015 6/30/2016 11
25011 5/1/2015 11/30/2015 6
36007 5/1/2015 9/30/2016 16

¡Aprecio toda la ayuda!

Brad

@RicoZhou

¡Muchas gracias! Está cerca... ¿Hay alguna manera de hacerlo dinámicamente? Sé que es un poco descuidado, pero el intento de código está abajo. ¿Puedo utilizar GENERATESERIES en función de las columnas inicial y final? Además, en lugar de medidas, me gustaría calcular una tabla para que otros la usen.

Muestra

Nombre del proyecto de código de proyecto POP Iniciar Revenue_TEST Labor_TEST

15147 SATCOM San 7/21/2014 7/20/2015 $1,000,000 $750,000

11139 WAPA Departamento de 10/1/2014 9/30/2015 $1,000,000 $750,000

19031 NAVAIR 7.0 2/16/2015 2/15/2016 $1,000,000 $750,000

15160 Kwaj Seguridad y 2/28/2015 2/15/2016 $1,000,000 $750,000

19032 Análisis Logístico 3/9/2015 3/8/2016 $1,000,000 $750,000

25011 Oak Ridge - DOE 5/1/2015 11/30/2015 $1,000,000 $750,000

36007 NASA Lab Services 5/1/2015 9/30/2016 $1,000,000 $750,000

24005 Fusion Center IDS 7/1/2015 6/30/2016 $1,000,000 $750,000

PRUEBA DE LA PRUEBA DE LA PRUEBA DE

Var baseTable (Var baseTable) ( VAR baseTable)

CALCULATETABLE ( SUMMARIZECOLUMNS ( 'Seguimiento de premios posteriores v2'[Código de proyecto] ) )

devolución

GENERAR (

baseTable,

Meses de VAR ?

DATEDIFF ( [Medida de inicio POP], [Medida final POP], DIA )

VAR Start_Date - [Medida de inicio POP]

VAR End_Date - [Medida final POP]

VAR AvgRev ?

DIVIDE ( [Revenue_Measure], Meses, 0 )

Ingresos de VAR : [Revenue_Measure] //VAR GenSeries - GENERATESERIES([POP Start Measure],[POP End Measure],Months)

devolución

ROW (

"Inicio", Start_Date,

"Fin", End_Date,

"Meses", Meses,

"Avg Rev", AvgRev,

"Ingresos", Ingresos

)

)

¡Muchas gracias por su ayuda!

Hola

No puedo entender tu resultado. ¿Cómo ha llegado a la fecha en la columna Período y los números de las últimas 2 columnas?


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
Super User III
Super User III

Hola

Muestre el resultado esperado con una explicación.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
Community Support
Community Support

Hola @walkerb32

¿Podría darme más detalles sobre su lógica de cálculo? Puede mostrarme el resultado que desea que la tabla que pueda necesitar usar y las relaciones que construye. O puedes compartirme tu archivo pbix por tu Onedrive for Business.

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Super User II
Super User II

No está claro lo que está tratando de hacer, tratar de pasar más tiempo para explicar su requisito con más detalles.

Thank you,
Antriksh Sharma

Helpful resources

Announcements
secondImage

Congratulations!

We are excited to announce the Power BI Super Users!

Wave Release 2

Check out the updates in Power BI.

Overview of Power BI 2020 release wave 2!

Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.