Forum Discussion

Zilliox's avatar
Zilliox
Icon for Helper IV rankHelper IV
5 years ago
Solved

Optimizar panel

Hola
He creado varias medidas, pero no es realmente optimizar. Cuando lo publico, tarda mucho en tener los números en el objeto visual Pago.

He hecho un análisis de rendimiento y este es el resultado. Puede ver que la consulta DAX tarda demasiado tiempo

Zilliox_0-1606664440332.png

Mi archivo PBIX está aquí.

¿Puede alguien ayudarme a optimizar la medida "YTD Commission Payout", Por favor?

Gracias

  • En realidad, intenté una cosa más para optimizar una de las medidas dependientes. Usando este en su lugar lo consigue por debajo de 400 ms.

    Pago de la Comisión YTD -1Meses ?
    VAR vMonths ?
    CALCULATETABLE (
    VALUES ( Fechas[Mes del año] ),
    FILTRO (
    ALL ( Fechas ),
    Fecha[Fecha]
    < MIN ( Fechas[Fecha] )
    )
    )
    VAR vSummary ?
    ADDCOLUMNS (
    vMonths,
    "cYTDComm", [Comisión YTD]
    )
    VAR vMaxMonth ?
    MAXX (
    FILTRO (
    vSummary,
    [cYTDComm] > 0
    ),
    Fechas[Mes del año]
    )
    devolución
    SUMX (
    FILTRO (
    vSummary,
    Fechas[Año Mes] - vMaxMonth
    ),
    [cYTDComm]
    )

    saludos

    palmadita

9 Replies

  • mahoneypat's avatar
    mahoneypat
    Icon for Microsoft Employee rankMicrosoft Employee

    Hay varias cosas mal con esa medida y las que depende. Hay iteradores anidados, medidas dentro de iteradores algunos usando IF( ) que todos suman un rendimiento deficiente. ¿Puede explicar lo que se supone que debe hacer esa medida, por lo que se puede proponer una nueva medida a partir de cero, creo?

    saludos

    palmadita

    • Zilliox's avatar
      Zilliox
      Icon for Helper IV rankHelper IV

      Es muy amable de tu parte.

      El resultado es el pago de comisiones.

      Se basa en el logro YTD. Cada persona tiene una diferente (Consulta OTE) (esta es la comisión anual).

      Si el logro YTD es inferior al 80% tiene que ser 0. Si es superior al 100% que se mantiene en 100%. El monto tiene que estar en la moneda de la persona.

      La imagen de abajo es el resultado que estoy buscando, pero luego con una mejor medida

      Zilliox_1-1606679462243.png

      Gracias de nuevo

  • mahoneypat's avatar
    mahoneypat
    Icon for Microsoft Employee rankMicrosoft Employee

    ¿Puede proporcionar una explicación más detallada de lo que necesita en ese cálculo? Qué agregación en qué columnas y qué condiciones. Tal vez caminar a través de un valor en la matriz.

    saludos

    palmadita

  • Hi,

    I have tried to create a new messure and I think I am on the good way, but I am stuck for the moment

    This is teh achievement. In september the YTD achievement is lower than 80%. So the sales shouldn't receive any commission that month, but in October his YTD ach is 86%. The sales recuperate as well september.

     


    My Measure

    test =
    CALCULATE(
    SUMX(
    VALUES(Dates[Year Month]),
    VAR _YTDOTE = TOTALYTD(SUM(OTE[Amount]),Dates[Date],"31/03/2021")*1
    VAR _YTDOTE_YTDACH = CALCULATE(TOTALYTD(SUM(OTE[Amount]),Dates[Date],"31/03/2021")*1)*[YTD Ach.]
    VAR _YTDAmount = CALCULATE(TOTALYTD(SUM(Actual_CommissionsData_KPICOM[Amount in currency with Current Xrate]),Dates[Date],"31/03/2021") + TOTALYTD(SUM('Manual Transaction'[Amount €]),Dates[Date],"31/03/2021"))
    VAR _YTDTarget = TOTALYTD(SUM(Targets[Target]),Dates[Date],"31/03/2021")
    VAR _YTDOTE_LM = CALCULATE(TOTALYTD(SUM(OTE[Amount]),Dates[Date],"31/03/2021"),PREVIOUSMONTH(Dates[Date]))
    VAR _YTDAch = DIVIDE(_YTDAmount,_YTDTarget)
    VAR _YTDOTE_YTDACH_LM = CALCULATE(TOTALYTD(SUM(OTE[Amount]),Dates[Date],"31/03/2021")*[YTD Ach.],PREVIOUSMONTH(Dates[Date]))
    RETURN
    IF(
    _YTDAch<0.8,BLANK(),
    IF(
    _YTDAch >= 1,
    CALCULATE(_YTDOTE -_YTDOTE_YTDACH_LM),
    CALCULATE(_YTDOTE_YTDACH -_YTDOTE_YTDACH_LM))
    )))


    Result

    202004 1415.78
    202005 1415.78
    202006 1415.78
    202007 629.13
    202008 1033.83
    202009
    202010 2035.81

    In October I should have 2632.51. As the sales has reached YTD 86.20% he recuperate september too. The max reachable is 100%

     

    I do not know how I can add this in the measure. Can someone help me please?

     

    Thanks

     

     

  • mahoneypat's avatar
    mahoneypat
    Icon for Microsoft Employee rankMicrosoft Employee

    Perdón por el retraso. Estoy ocupado con el trabajo. Su medida es una mejor dirección; sin embargo, terminé optimizando su medida original.

    Resulta que es su medida [YTD Commission Payout -1M] la que estaba causando todos sus problemas. Una corrección simple dejó de lado el tiempo de actualización de ese objeto visual de >26 seg a <2 seg (en mi equipo). Probablemente todavía podría optimizarse aún más, pero creo que estarás contento con este progreso.

    Esta es la nueva medida

    Pago de la Comisión YTD -1Meses ?
    CALCULAR (
    LASTNONBLANKVALUE (
    Fechas[Mes del Año],
    CALCULAR (
    [Comisión YTD],
    PREVIOUSMONTH ( Fechas[Fecha] )
    )
    ),
    FILTRO (
    ALL ( Fechas ),
    Fecha[Fecha]
    <-MAX MAX ( Fechas[Fecha] )
    )
    )

    Probablemente no escribiría esta medida de esta manera, pero todo lo que hice fue cambiar de Dates[Date] a Dates[Year Month]. Para que en el camino a averiguar eso, había escrito su medida original de manera diferente. Y con la medida anterior, los dos combinados son un poco más rápidos.

    Pago de la Comisión YTD (YTD Commission Payout)
    VAR vSummary ?
    ADDCOLUMNS (
    VALUES ( Fechas[Mes del año] ),
    "cYTDComm", [Comisión YTD],
    "cYTDCommPay-1M", [Pago de comisión YTD -1Month],
    "cManCommPay",
    CALCULAR (
    SUM ( 'Pago manual de la comisión'[Importe] )
    )
    )
    devolución
    SUMX (
    vSummary,
    SI (
    ISBLANK ( [cYTDComm] ),
    BLANK (),
    [cYTDComm] - [cYTDCommPay-1M] + [cManCommPay]
    )
    )

    Todavía es más de 1,5 s para actualizar ese objeto visual, pero no tuve más tiempo para gastar en él.

    saludos

    palmadita

  • mahoneypat's avatar
    mahoneypat
    Icon for Microsoft Employee rankMicrosoft Employee

    En realidad, intenté una cosa más para optimizar una de las medidas dependientes. Usando este en su lugar lo consigue por debajo de 400 ms.

    Pago de la Comisión YTD -1Meses ?
    VAR vMonths ?
    CALCULATETABLE (
    VALUES ( Fechas[Mes del año] ),
    FILTRO (
    ALL ( Fechas ),
    Fecha[Fecha]
    < MIN ( Fechas[Fecha] )
    )
    )
    VAR vSummary ?
    ADDCOLUMNS (
    vMonths,
    "cYTDComm", [Comisión YTD]
    )
    VAR vMaxMonth ?
    MAXX (
    FILTRO (
    vSummary,
    [cYTDComm] > 0
    ),
    Fechas[Mes del año]
    )
    devolución
    SUMX (
    FILTRO (
    vSummary,
    Fechas[Año Mes] - vMaxMonth
    ),
    [cYTDComm]
    )

    saludos

    palmadita

    • Zilliox's avatar
      Zilliox
      Icon for Helper IV rankHelper IV

      Está funcionando.

      Muchas gracias por su ayuda