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

Dax Measure para calcular la facturación de las transacciones activas

Tengo ofertas que tienen diferentes tipos de etapas:
Escenario en vivo

Etapa de cancelación

Etapa perdida

Escenario de incorporación.

Mis datos tienen una fecha para el inicio de cada una de estas etapas. No todos los tratos tienen una fecha de cancelación, algunos van directamente a la pérdida.
Facturamos a nuestros clientes solo cuando están en la etapa Live. Estoy tratando de escribir una medida que muestra las ofertas en vivo a lo largo del tiempo, y el dinero que estamos facturando por eso. Datos de ejemplo:

Go-Live Date Lost time ID Cancellation Request Start Date (Hide) Onboarding Start Date Monthly Price
2020-02-06 0:00:00 2020-03-03 0:00:00 17818  2020-02-04 0:00:00 $100.00
2020-02-03 0:00:00 2020-02-10 0:00:00 17468 2020-02-11 0:00:00 2020-01-31 0:00:00 $100.00
2020-02-11 0:00:00 2020-02-03 0:00:00 17469 2020-02-11 0:00:00 2020-01-31 0:00:00 $100.00
2020-01-07 0:00:00 2020-03-26 0:00:00 17150  2020-01-07 0:00:00 $400.00
2020-01-06 0:00:00 2020-03-31 0:00:00 17215 2020-03-16 0:00:00 2020-01-02 0:00:00 $849.00
2020-01-08 0:00:00 2020-03-31 0:00:00 16807 2020-02-18 0:00:00 2020-01-02 0:00:00 $150.00



Así, por ejemplo, para la identificación de la identificación 16807, quiero que la medida muestre 150$ de enero de 2020 a marzo de 2020 (450$ en total). He estado tratando de implementar esta medida discutida por @Greg_Deckler en https://community.powerbi.com/t5/Quick-Measures-Gallery/Periodic-Billing/m-p/409365, pero no puedo conseguir que funcione para mis datos.

Total Amount = 
VAR tmpCalendar = ADDCOLUMNS('Calendar',"Month",MONTH([Date]),"Year",YEAR([Date]),"MonthYear",VALUE(YEAR([Date]) & FORMAT(MONTH([Date]),"0#")))
VAR tmpBilling = ADDCOLUMNS('Billing',"MonthYearBegin",VALUE(YEAR([BeginDate]) & FORMAT(MONTH([BeginDate]),"0#")),
                                      "MonthYearEnd",VALUE(YEAR([UntilDate]) & FORMAT(MONTH([UntilDate]),"0#")))
VAR tmpTable = 
SELECTCOLUMNS(
    FILTER(
        GENERATE(
            tmpBilling,
            SUMMARIZE(tmpCalendar,[Year],[Month],[MonthYear])
        ),
        [MonthYear] >= [MonthYearBegin] &&
        [MonthYear] <= [MonthYearEnd]
    ),
    "Customer",[Customer],
    "Year",[Year],
    "Month",[Month],
    "Amount",[Amount]
)
RETURN SUMX(tmpTable,[Amount])




2 ACCEPTED SOLUTIONS
Greg_Deckler
Super User IV
Super User IV

@Laila92 - Desde que escribí eso, tal vez pueda ayudar. Vea la línea de firma adjunta debajo. ¡Avísame si necesitas más ayuda!


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




View solution in original post

hola @Laila92

Si es así, ajuste la fórmula como se indica a continuación:

Total Amount 333 = 
VAR tmpCalendar = ADDCOLUMNS('Calendar',"Month",MONTH([Date]),"Year",YEAR([Date]),"MonthYear",VALUE(YEAR([Date]) & FORMAT(MONTH([Date]),"0#")))
VAR tmpBilling = ADDCOLUMNS('Billing',"MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0#")),
                                      "MonthYearEnd",IF(ISBLANK([Lost time]),VALUE(YEAR(TODAY()) & FORMAT(MONTH(TODAY()),"0#")),VALUE(YEAR([Lost time]) & FORMAT(MONTH([Lost time]),"0#"))))
VAR tmpTable = 
SELECTCOLUMNS(
    FILTER(
        GENERATE(
            tmpBilling,
            SUMMARIZE(tmpCalendar,[Year],[Month],[MonthYear])
        ),
        [MonthYear] >= [MonthYearBegin] &&
        [MonthYear] <= [MonthYearEnd]
    ),
    "Customer",[ID],
    "Year",[Year],
    "Month",[Month],
    "Amount",[Monthly Price]
)
RETURN SUMX(tmpTable,[Amount])

VAR tmpBilling á ADDCOLUMNS('Billing',"MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0-")),
"MonthYearEnd",IF(ISBLANK([Tiempo perdido]), VALOR (Año (HOY()) & FORMAT(MONTH(TODAY()),"0-")),VALUE(YEAR([Tiempo perdido]) & FORMAT(MONTH([Tiempo perdido]),"0-"))))

saludos

Lin

Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

8 REPLIES 8
Greg_Deckler
Super User IV
Super User IV

@Laila92 - Desde que escribí eso, tal vez pueda ayudar. Vea la línea de firma adjunta debajo. ¡Avísame si necesitas más ayuda!


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




View solution in original post

¡Gracias Greg! Estoy recibiendo el error "No se puede convertir el valor "" de tipo Texto a tipo Número." Supongo que esto podría deberse a que tengo valores en blanco en mis datos, pero no estoy seguro de dónde en la medida añadir var<>blank().

hola @Laila92

Sí, es que hay algún valor en blanco en la columna [Fecha de vida de salida] o en la columna [Tiempo perdido].

Así que sólo tiene que añadir un filtro como se muestra a continuación:

Importe total ?
VAR tmpCalendar á ADDCOLUMNS('Calendar',"Month",MONTH([Date]),"Year",YEAR([Date]),"MonthYear",VALUE(YEAR([Date]) & FORMAT(MONTH([Date]),"0-")))
VAR tmpBilling á ADDCOLUMNS(FILTER('Billing',Billing[Go-Live Date]<>BLANK()&&Billing[Time Lost]<>BLANK()),"MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0-")),
"MonthYearEnd",VALUE(YEAR([Tiempo perdido]) & FORMAT(MONTH([Tiempo perdido]),"0-")))
DONDE tmpTable ?
SELECTCOLUMNS(
FILTRO (
GENERAR(
tmpBilling,
RESUMIR(tmpCalendar,[Año],[Mes],[MesAño])
),
[Año de mes] > [MonthYearBegin] &&
[MonthYear] <o [MonthYearEnd]
),
"Cliente",[ID],
"Año",[Año],
"Mes",[Mes],
"Importe",[Precio mensual]
)
RETURN SUMX(tmpTable,[Amount])
saludos
Lin
Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Hice el cambio y se solucionó el error, pero no veo ninguna salida de datos, cuando puse la medida en una tabla no veo ningún número. ¿Alguna idea de por qué?

hola @Laila92

Funciona bien de mi lado, por favor pruébelo, si todavía tiene el problema, por favor comparta su archivo pbix de muestra para nosotros tener una prueba.

saludos

Lin

Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Encontré el problema (estaba usando una medida para el valor de la cantidad que tenía un filtro incorrecto en él). La medida funciona ahora, sin embargo, para los clientes que no tienen una fecha perdida (que todavía están pagando actualmente), no obtengo ningún valor.
Debería construir en una condición if en la definición de tmpBilling donde si el tiempo perdido en blanco devuelve todays date.. ¿Tiene sentido?

Se vería algo como esto:

No estoy seguro de cómo implementar.

VAR tmpBilling =  
                ADDCOLUMNS( 
                    'Deals',
                        "MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0#")),
                        IF([Lost Time] = BLANK(), "MonthYearEnd" = TODAY(),"MonthYearEnd",VALUE(YEAR([Lost time]) & FORMAT(MONTH([Lost time]),"0#"))
                         )
                        )

hola @Laila92

Si es así, ajuste la fórmula como se indica a continuación:

Total Amount 333 = 
VAR tmpCalendar = ADDCOLUMNS('Calendar',"Month",MONTH([Date]),"Year",YEAR([Date]),"MonthYear",VALUE(YEAR([Date]) & FORMAT(MONTH([Date]),"0#")))
VAR tmpBilling = ADDCOLUMNS('Billing',"MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0#")),
                                      "MonthYearEnd",IF(ISBLANK([Lost time]),VALUE(YEAR(TODAY()) & FORMAT(MONTH(TODAY()),"0#")),VALUE(YEAR([Lost time]) & FORMAT(MONTH([Lost time]),"0#"))))
VAR tmpTable = 
SELECTCOLUMNS(
    FILTER(
        GENERATE(
            tmpBilling,
            SUMMARIZE(tmpCalendar,[Year],[Month],[MonthYear])
        ),
        [MonthYear] >= [MonthYearBegin] &&
        [MonthYear] <= [MonthYearEnd]
    ),
    "Customer",[ID],
    "Year",[Year],
    "Month",[Month],
    "Amount",[Monthly Price]
)
RETURN SUMX(tmpTable,[Amount])

VAR tmpBilling á ADDCOLUMNS('Billing',"MonthYearBegin",VALUE(YEAR([Go-Live Date]) & FORMAT(MONTH([Go-Live Date]),"0-")),
"MonthYearEnd",IF(ISBLANK([Tiempo perdido]), VALOR (Año (HOY()) & FORMAT(MONTH(TODAY()),"0-")),VALUE(YEAR([Tiempo perdido]) & FORMAT(MONTH([Tiempo perdido]),"0-"))))

saludos

Lin

Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

La medida muestra un comportamiento inesperado para determinados identificadores. Por ejemplo, en la imagen de abajo. El precio mensual es de $899, pero el

medida muestra $44,051. Intenté reemplazar SUMX en la medida con otros, como COUNTX, pero estos tampoco devolvieron los resultados deseados. @v-lili6-msft

Capture.PNG

Helpful resources

Announcements
MBAS on Demand

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

July 2021 Update 768x460.png

Check it out!

Click here to read more about the July 2021 Updates

Power Query PA Forum 768x460.png

Check it out!

Did you know that you can visit the Power Query Forum in Power BI and now Power Apps

Urdu Hindi D365 Bootcamp 768x460.png

Urdu Hindi D365 Bootcamp

Dont miss our very own April Dunnam’s The Developer Guide to the Galaxy! Find out what the Power Platform has to offer for the traditional developer.

Top Solution Authors