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
Akhil_1411
Helper IV
Helper IV

Optimización de Dax

Hola

Está tardando 5 minutos en filtrar visualmente con otros. Me gustaría saber cómo puedo optimizar este código dax para funcionar mejor o cualquier otra alternativa.

Tiempo tomado:-

time.png

El objeto visual utiliza 3 medidas diferentes:

Dax_1: (UTILIZADO en Visual) -

3 Months Rolling Average =
VAR A =
CALCULATE (
[Measure Selection Rolling 3 Months Avg],
FILTER (
VALUES ( 'UCD Data'[Sold_To_Ultimate_DUNS_Desc] ),
[Dynamic Segment DP DDD] <> BLANK ()
)
)
VAR B =
CALCULATE (
[Measure Selection Rolling 3 Months Avg],
FILTER (
VALUES ( 'UCD Data'[Sold_To_Ultimate_DUNS_Desc] ),
[Dynamic Segment % UCD] <> BLANK ()
)
)
VAR c =
IF (
ISFILTERED ( 'DP DDD Dynamic Segmentation'[Buckets] ),
A,
IF (
ISFILTERED ( 'Dynamic Segement %UCD'[Bucket] ),
B,
[Measure Selection Rolling 3 Months Avg]
)
)
RETURN
c


Dax2: -

Moving Average UCD last 3 Months =
/*Rolling three months Average*/
Var A = CALCULATE(SUM('UCD Data'[Unearned Disc]), 
DATESINPERIOD (
'Target Date1'[Date],
LASTDATE ( 'Target Date1'[Date]),
-3,
MONTH
)
)
var B = CALCULATE(SUM('UCD Data'[Total_disc]),
DATESINPERIOD (
'Target Date1'[Date],
LASTDATE ( 'Target Date1'[Date]),
-3,
MONTH
)
)
var c = (A/B)*100
return
c

DAX_3 :

Dynamic Segment % UCD =
IF(
ISFILTERED('Dynamic Segement %UCD'[Bucket]),
CALCULATE(
[unearned disc greater than 0],
FILTER(
VALUES('UCD Data'[Sold_To_Ultimate_DUNS_Desc]),
COUNTROWS(
FILTER(
'Dynamic Segement %UCD',
[_% UCD]>='Dynamic Segement %UCD'[Min]
&& [_% UCD]<'Dynamic Segement %UCD'[Max]
)
)>0
)
),
[_% UCD]
)

Gracias

Akhil.

12 REPLIES 12
Anonymous
Not applicable

No es posible optimizar esto porque no sólo las 3 medidas que ha mostrado están involucradas en los cálculos; se construyen sobre otras medidas que no se muestran. Además, no se muestran datos ni un modelo en el que se pueda llevar a cabo la optimización. Así que, en una palabra, es como si le pidieras a alguien que te dijera lo que le pasa a tu auto sin darles el auto, pero sólo una descripción de ello. Me temo que no va a pasar.
v-alq-msft
Community Support
Community Support

Hola, @Akhil_1411

Le sugiero que consulte el documento sobre las prácticas recomendadas de Dax para mejorar Power BI. Aquí hay algunas instrucciones sobre Dax.

1. Borre la caché de DAX antes de optimizar DAX

2. Formatee su código

3. No cambie los valores DE BLANCO a ceros u otras cadenas

4. Utilice las funciones DISTINCT() y VALUES() de forma coherente

5. Utilice ISBLANK() en lugar de la comprobación de la casilla de verificación de la casilla de verificación (Blank()

6. Utilice el valor 0 en lugar de comprobar si hay ISBLANK() 0

7. Utilice SELECTEDVALUE() en lugar de HASONEVALUE()

8. Utilice SELECTEDVALUE() en lugar de VALUES()

9. Utilice variables en lugar de repetir medidas dentro de la rama IF

10. Utilice (a-b)/b junto con variables en lugar de a/b — 1 o a/b*100–100

11. Deje de usar IFERROR() e ISERROR()

12. Utilice DIVIDE() en lugar de /

13. No utilice variables escalares en SUMMARIZE()

14. Utilice KEEPFILTERS() en lugar de FILTER(T)

15. Utilice FILTER(all(ColumnName)) en lugar de FILTER(values()) o FILTER(T)

16. Evite utilizar la función AddColumns() dentro de expresiones de medida

17. Utilice los tipos de datos correctos en función de los valores de columna

18. Utilice COUNTROWS en lugar de COUNT

19. Utilice SEARCH() con el último parámetro

20. TODOS frente a ALLExcept

Saludos

Allan

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

Greg_Deckler
Super User
Super User

@Akhil_1411 - Vea mis artículos aquí sobre el ajuste de rendimiento DAX:

https://community.powerbi.com/t5/Community-Blog/Performance-Tuning-DAX-Part-1/ba-p/976275

https://community.powerbi.com/t5/Community-Blog/Performance-Tuning-DAX-Part-2/ba-p/976813

Además, ayudaría mucho a tener datos de muestra, etc. Por favor, consulte este post sobre cómo obtener su pregunta respondida rápidamente: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

Las partes más importantes son:
1. Datos de muestra como texto, utilice la herramienta de tabla en la barra de edición
2. Salida esperada de los datos de muestra
3. Explicación en palabras de cómo obtener de 1. a 2.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
tex628
Community Champion
Community Champion

No hay idea de si esto funciona, pero darle una oportunidad! 🙂

3 Months Rolling Average =

VAR Table = 
SUMMARIZE( 
VALUES ( 'UCD Data'[Sold_To_Ultimate_DUNS_Desc] ),
"Filter 1" , [Dynamic Segment DP DDD] ,
"Filter 2" , [Dynamic Segment % UCD] ,
"Rolling Avg" , [Measure Selection Rolling 3 Months Avg]
)

VAR A =
SUMX(FILTER( Table , [Filter 1] <> BLANK() , [Rolling Avg])

VAR B =
SUMX(FILTER( Table , [Filter 2] <> BLANK() , [Rolling Avg])

VAR c =
IF (
ISFILTERED ( 'DP DDD Dynamic Segmentation'[Buckets] ),
A,
IF (
ISFILTERED ( 'Dynamic Segement %UCD'[Bucket] ),
B,
[Measure Selection Rolling 3 Months Avg]
)
)
RETURN
c


Br
J


Connect on LinkedIn

@tex628 ,

He probado tu lógica. No está sucediendo. Después de aplicar el filtrado cruzado no está sucediendo. 😐

Gracias

Akhil.

¿Cuáles son los tiempos de carga individuales de estas tres medidas?

[Segmento dinámico DP DDD]
[Segmento dinámico % UCD]
[Selección de medida Rolling 3 Meses Promedio]


Connect on LinkedIn

@tex628 ,

Captura de pantalla a continuación para el tiempo de carga individual.

DAX 01 and 02DAX 01 y 02Dax 03Dax 03

Hmm, para mí esto es un poco demasiado difícil de resolver sin ser capaz de escribir mi propio código. ¿Asumo que los datos son confidenciales?

/ J


Connect on LinkedIn
amitchandak
Super User
Super User

@Akhil_1411, para el primero. Prueba primero como

Promedio de 3 meses de balanceo ?
SI (
ISFILTERED ( 'DP DDD Dynamic Segmentation'[Buckets] ),
CALCULAR (
[Selección de medida Rolling 3 Meses Promedio],
FILTRO (
VALORES ( 'Datos UCD'[Sold_To_Ultimate_DUNS_Desc] ),
[Segmento dinámico DP DDD] <> BLANK ()
)
),
SI (
ISFILTERED ( 'Dynamic Segement %UCD'[Bucket] ),
CALCULAR (
[Selección de medida Rolling 3 Meses Promedio],
FILTRO (
VALORES ( 'Datos UCD'[Sold_To_Ultimate_DUNS_Desc] ),
[Segmento dinámico % UCD] <> BLANK ()
)
),
[Selección de medida Rolling 3 Meses Promedio]
)
)

@Akhil_1411 , qué es el uso de VALUES ( 'Datos UCD'[Sold_To_Ultimate_DUNS_Desc] )

@amitchandak , valores que toman la columna de clientes distintos y calulando el %UCD y otras métricas.

Esto estoy pasando debido a la otra filtración cruzada visual

Otro objeto visual tiene clientes distintos con % UCD. Captura de pantalla a continuación

@amitchandak ,

Después de modificar también está tomando la cantidad similar de tiempo.

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.