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
Ricardo77
Helper II
Helper II

Identifique el contexto (filtro) de una columna de tabla para evitar cálculos innecesarios

Hola

Estoy trabajando en un informe en el que se seleccionan 2 Factual[IDMoment] en los filtros de informe, ejemplos 1000 y 1500.

A partir de estos IDs tengo que mostrar, por ejemplo, una etiqueta de dimensión1 en las filas y algunos valores procedentes del DW y, a continuación, necesito calcular un Delta entre los 2 ID del informe.

Así que uso una matriz:

x.png

(1 de todo: ¿Hay algo mejor visual para hacer esto? ¿O una forma de ocultar columnas en Power BI?)


Estoy tratando de controlar esto usando variables, para desarrollar un buen código de rendimiento y por supuesto evitar hacer cálculos innecesarios

La idea es evitar hacer el cálculo en delta2 de previous_idmoment "1000", y simplemente mostrar en blanco () o cero

RESULT  = 
VAR SELECTED_2_IDs = ALLSELECTED(FACTUAL[IDMOMENT])
VAR LATEST_IDMOMENT =   CALCULATE(MAX(FACTUAL[IDMOMENT]); FACTUAL[IDMOMENT] IN SELECTED_2_MOMENTS) 

VAR PREVIOUS_IDMOMENT = CALCULATE(MIN(FACTUAL[IDMOMENT]); FACTUAL[IDMOMENT] IN SELECTED_2_MOMENTS)

RETURN IF (LATEST_IDMOMENT <> PREVIOUS_IDMOMENT; 
            ...;
            BLANK();)
 

Hemos detectado un problema desconocido.

De todos modos, mi pregunta es cuál es la mejor manera de controlar los cálculos "dónde" deben hacerse y así, cómo identificar el contexto de una columna (o celda)

Gracias

saludos

4 REPLIES 4
MFelix
Super User
Super User

Hola @Ricardo77 ,

Cree que esto se puede hacer de la siguiente manera.

  • Cree una tabla desconectada con el código siguiente:
IDMOMENT = UNION(VALUES(FACTUAL[IDMOMENT]); {( "Delta")})

Esto crea una tabla con todos los IDMoments y una línea adicional con el valor Delta

  • Agregue la siguiente medida:
SUMOFVALUES =
VAR MAXIMUM =
    MAX ( FACTUAL[IDMOMENT] )
VAR minimum =
    MIN ( FACTUAL[IDMOMENT] )
RETURN
    SWITCH (
        SELECTEDVALUE ( IDMOMENT[IDMOMENT] );
        "Delta";
            CALCULATE (
                SUM ( FACTUAL[DW] );
                FILTER ( FACTUAL; FACTUAL[IDMOMENT] = MAXIMUM )
            )
                - CALCULATE (
                    SUM ( FACTUAL[DW] );
                    FILTER ( FACTUAL; FACTUAL[IDMOMENT] = minimum )
                );
        CALCULATE (
            SUM ( FACTUAL[DW] );
            FILTER ( FACTUAL; FACTUAL[IDMOMENT] = MAX ( IDMOMENT[IDMOMENT] ) )
        )
    )

  • Agregue una segmentación de datos con la columna FACTUAL[IDMOMENT]
  • Cree la matriz con la siguiente configuración:
    • Filas: Factual[dimension]
    • Columnas: IDMOMENT[IDMOMENT]
    • Valores: [SUMOFVALUES]

Como puede ver debajo de la columna Delta está al final de los datos y no hay necesidad de ocultarlos en las otras columnas, tenga en cuenta que esta solución tiene dos limitaciones:

  • IDMOMENT debe estar en texto (debido al delta)
  • El cálculo solo está en los valores MAX y MIN seleccionados, por lo que si selecciona más IDMOMENTS solo tendrán en cuenta los valores máximo y mínimo y no los valores intermedios.

Si desea superar esas medidas necesita ser cambiado un poco.

slicer_columns.gif

Compruebe la conexión del archivo PBIX.


Regards

Miguel Félix


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

Proud to be a Super User!

Check out my blog: Power BI em Português



Hola @MFelix , lo que una gran pieza de código DAX, Jesús 😂!

Lo probaré y diré algo después.

Por favor, permítanme sólo unos pocos comentarios & estallidos:

1- DAX no es fácil, esto no ayuda a los usuarios finales (es decir, los usuarios empresariales para BI de autoservicio ...)

2- DAX debe ser cuidadosamente desarrollado, o de lo contrario es muy lento, (por lo que la perspectiva "vamos a tratar de ver si esto funciona" muchas veces resulta en informes lentos ...)

Termino con una pregunta, relacionada con el segundo punto:

¿Hay de todos modos (considerando su código o en términos generales) para referir una columna (anterior) en una tabla o matriz, para optimizar los cálculos?

Podría ser como elegir el delta que calculó, y usarlo en un cálculo complejo como

( row_columnA * row_columnB / row_columnZ) + (row_columnD *delta)

sin tener que calcular delta de nuevo.

Gracias de nuevo, Saludos.

Hola @Ricardo77 ,

Totalmente de acuerdo con usted en los dos puntos que se refiere, comprobar este post desde el gran Alberto Ferrari donde defendemos que DAX es simple, pero no es fácil.

https://www.sqlbi.com/blog/alberto/2020/06/20/7-reasons-dax-is-not-easy/

Con respecto a su pregunta, esto es posible tener el uso del DELTA tiene una medida dentro de una medida o hacer una temp_table. Pero si pudiera dar más información sobre el contexto que necesita, porque el uso de medidas también depende del contexto.


Regards

Miguel Félix


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

Proud to be a Super User!

Check out my blog: Power BI em Português



Greg_Deckler
Super User
Super User

@Ricardo77: puede usar una jerarquía de matriz personalizada para "ocultar" columnas. https://community.powerbi.com/t5/Quick-Measures-Gallery/The-New-Hotness-Custom-Matrix-Hierarchy/m-p/...

No estoy seguro de que sea claro en los requisitos. ¿Puede publicar datos de ejemplo como texto?


@ 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...

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.