Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Calcular ventas netas Amt LFL AY

Hola

Tengo el siguiente problema. Intento calcular las ventas netas Amt LFL AY utilizando la siguiente medida:

VAR vFilterContext =
FLOOR (
    LOG10 (
        SIGN(ISCROSSFILTERED ( 'Merchandise Structure') +
             ISCROSSFILTERED ( 'Articles') + 
             ISCROSSFILTERED ( 'Product Lists') +
             ISCROSSFILTERED ( 'Promo Classification' ) + 
             ISCROSSFILTERED ( 'Sales Classification' )) * 10 + 1
    ),
    1
)
VAR vResult =
SWITCH (
    vFilterContext,
        0, CALCULATE(SUM('POS Sales'[Sales Net Amt]),'POS Sales'[LFL Id] = 1),
        1, CALCULATE(SUM('Sales'[Sales Net Amt]),'Sales'[LFL Id] = 1)
)
RETURN
    vResult

Medir está bien y devolver lo que debería devolver.

El problema es cuando agrego algunos filtros para algunas tiendas de reacondicionamiento:

Esto es lo que obtengo cuando selecciono Después de reajustar usando el nombre del concepto del sitio:

AndreiK15_1-1632416717982.png

AndreiK15_0-1632416686316.png

y esto es lo que obtengo si selecciono Antes de reajustar usando el mismo nombre de concepto:

AndreiK15_2-1632416842819.png

Refit Week Desc se calcula como 0 para la fecha de reacondicionamiento y +1, 2 después del reacondicionamiento y -1,-2 y así sucesivamente ... antes de la fecha de reacondicionamiento.

Necesito tener un valor para Sales Net Amt LFL AY y Sales Net Amt LFL LY DoW cuando selecciono ambos, antes o después.

Esta es la medida que estoy usando para LFL LY DoW

VAR vFilterContext =
FLOOR (
    LOG10 (
        SIGN(ISCROSSFILTERED ( 'Merchandise Structure') +
             ISCROSSFILTERED ( 'Articles') + 
             ISCROSSFILTERED ( 'Product Lists') +
             ISCROSSFILTERED ( 'Promo Classification' ) + 
             ISCROSSFILTERED ( 'Sales Classification' )) * 10 + 1
    ),
    1
)
VAR vResult =
SWITCH (
    vFilterContext,
        0, CALCULATE(SUM('POS Sales'[Sales Net Amt]),'POS Sales'[LFL Id LY DoW] = 1,DATEADD('Calendar'[Calendar Date],-52*7,DAY)),
        1, CALCULATE(SUM('Sales'[Sales Net Amt]),'Sales'[LFL Id LY DoW] = 1,DATEADD('Calendar'[Calendar Date],-52*7,DAY))
)
RETURN
    vResult

Esto es lo que muestra la clave LFL ID con la selección After Refit:

AndreiK15_3-1632417094902.png

y con la selección Before Refit:

AndreiK15_4-1632417140815.png

Crear una nueva tabla no es una solución ya que el pbix está conectado a SSAS, por lo que probablemente hay algunos filtros que me perdí.

Si alguien puede proporcionarme una idea/ solución.... por favor ayuda...

L.E. Refit Week Desc está en la tabla Diccionarios del sitio y la relación es con la tabla Ventas (muchos a uno usando la clave del sitio de tiempo).

¡Gracias!

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola @AndreiK15,

Me gustaría sugerirle que use la función de fecha para calcular manualmente el rango de filtro para reemplazar las partes de inteligencia de tiempo. Para las funciones de inteligencia de tiempo, es posible que no puedan realizar una personalización compleja y controlar con precisión los efectos de interacción con otros filtros de tablas.

Measure =
VAR vFilterContext =
    FLOOR (
        LOG10 (
            SIGN (
                ISCROSSFILTERED ( 'Merchandise Structure' ) + ISCROSSFILTERED ( 'Articles' )
                    + ISCROSSFILTERED ( 'Product Lists' )
                    + ISCROSSFILTERED ( 'Promo Classification' )
                    + ISCROSSFILTERED ( 'Sales Classification' )
            ) * 10 + 1
        ),
        1
    )
VAR currDate =
    MAX ( 'Calendar'[Calendar Date] )
VAR vResult =
    SWITCH (
        vFilterContext,
        0,
            CALCULATE (
                SUM ( 'POS Sales'[Sales Net Amt] ),
                FILTER (
                    ALLSELECTED ( 'POS Sales' ),
                    'POS Sales'[LFL Id LY DoW] = 1
                        && 'POS Sales'[Date]
                            = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
                )
            ),
        1,
            CALCULATE (
                SUM ( 'Sales'[Sales Net Amt] ),
                FILTER (
                    ALLSELECTED ( 'Sales' ),
                    'Sales'[LFL Id LY DoW] = 1
                        && 'Sales'
                            = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
                )
            )
    )
RETURN
    vResult

Saludos
Xiaoxin Sheng

Hola

Gracias por su respuesta.

Recibo el siguiente error:

27/09/2021 10:13:55 Consulta (36, 28) Error de cálculo en la medida 'Artículos'[MyMeasure]: La expresión se refiere a múltiples columnas. No se pueden convertir varias columnas en un valor escalar.

Existen los filtros que utilizo para esto:

AndreiK15_1-1632728424898.png

Hola @AndreiK15,

Parece un error tipográfico en mi expresión (me perdí agregar el campo de fecha en la tabla 'venta' y power bi comparar una columna con una tabla), intente usar la siguiente fórmula si ayuda:

Measure =
VAR vFilterContext =
    FLOOR (
        LOG10 (
            SIGN (
                ISCROSSFILTERED ( 'Merchandise Structure' ) + ISCROSSFILTERED ( 'Articles' )
                    + ISCROSSFILTERED ( 'Product Lists' )
                    + ISCROSSFILTERED ( 'Promo Classification' )
                    + ISCROSSFILTERED ( 'Sales Classification' )
            ) * 10 + 1
        ),
        1
    )
VAR currDate =
    MAX ( 'Calendar'[Calendar Date] )
VAR vResult =
    SWITCH (
        vFilterContext,
        0,
            CALCULATE (
                SUM ( 'POS Sales'[Sales Net Amt] ),
                FILTER (
                    ALLSELECTED ( 'POS Sales' ),
                    'POS Sales'[LFL Id LY DoW] = 1
                        && 'POS Sales'[Date]
                            = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
                )
            ),
        1,
            CALCULATE (
                SUM ( 'Sales'[Sales Net Amt] ),
                FILTER (
                    ALLSELECTED ( 'Sales' ),
                    'Sales'[LFL Id LY DoW] = 1
                        && 'Sales'[Date]
                            = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
                )
            )
    )
RETURN
    vResult

Saludos

Xiaoxin Sheng

Hay @v-shex-msft,

Gracias por su repetición, pero no tengo una fecha o una fecha de calendario en la tabla de ventas ... hay uno para POS Sales, pero no hay ninguno para Sales. Su solución podría funcionar, pero como no tengo una columna Fecha, no puedo comprobar ni confirmar. ¿Hay alguna otra solución? Necesito probar un poco más....

Gracias una vez más por su ayuda.

Hola @AndreiK15,

¿Cómo interactuó el valor de la fecha con los registros de la tabla de ventas? Si ese es el caso, puede usar el filtro de valor de fecha en esa tabla para extraer la lista de claves que se vincula a la tabla de ventas, luego puede usar efectos de filtro habilitados para el operador 'in' en sus expresiones.

El operador IN en DAX - SQLBI

Si lo anterior no ayuda, ¿puede compartir información más detallada?

Cómo obtener respuestas a su pregunta rápidamente

Saludos

Xiaoxin Sheng

Hay @v-shex-msft ,

Aquí están las relaciones con los representantes del sitio y todas las relaciones de ventas.

AndreiK15_0-1633673793485.png

también VENTAS POS

AndreiK15_1-1633673829579.png

Sin embargo, agregaré hoy una fecha de calendario a las ventas y lo intentaré.

¡Gracias!

Hola @AndreiK15,

Después de verificar su instantánea, descubrí que su tabla de ventas parece estar vinculada con el calendario con valores de 'clave de tiempo'.
Para este escenario, puede filtrar primero en el calendario y extraer el valor correspondiente de los campos de valor de tiempo, y usarlo como filtro en la tabla de ventas.

VAR _list =
    CALCULATETABLE (
        VALUES ( Calendar[Timekey] ),
        FILTER (
            ALLSELECTED ( 'Calendar' ),
            'Calendar'[Date]
                = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
        )
    )
RETURN
    CALCULATE (
        SUM ( 'Sales'[Sales Net Amt] ),
        FILTER (
            ALLSELECTED ( 'Sales' ),
            'Sales'[LFL Id LY DoW] = 1
                && 'Sales'[Timekey] IN _list
        )
    )

Saludos

Xiaoxin Sheng

Hay @v-shex-msft

He agregado el código que has escrito, pero ahora obtengo todos los espacios en blanco:

New Measure = 
VAR vFilterContext =
    FLOOR (
        LOG10 (
            SIGN (
                ISCROSSFILTERED ( 'Merchandise Structure' ) + ISCROSSFILTERED ( 'Articles' )
                    + ISCROSSFILTERED ( 'Product Lists' )
                    + ISCROSSFILTERED ( 'Promo Classification' )
                    + ISCROSSFILTERED ( 'Sales Classification' )
            ) * 10 + 1
        ),
        1
    )
VAR currDate =
    MAX ( 'Calendar'[Calendar Date] )
VAR _list =
    CALCULATETABLE (
        VALUES ( Calendar[Time key] ),
        FILTER (
            ALLSELECTED ( 'Calendar' ),
            'Calendar'[Calendar Date]
                = DATE ( YEAR ( currDate ), MONTH ( currDate ), DAY ( currDate ) - 52 * 7 )
        )
    )
VAR vResult =
    SWITCH (
        vFilterContext,
        0,
            CALCULATE (
                SUM ( 'POS Sales'[Sales Net Amt] ),
                FILTER (
                    ALLSELECTED ( 'POS Sales' ),
                    'POS Sales'[LFL Id LY DoW] = 1
                        && 'POS Sales'[Time Key]
                           IN _list
                )
            ),
        1,
            CALCULATE (
        SUM ( 'Sales'[Sales Net Amt] ),
        FILTER (
            ALLSELECTED ( 'Sales' ),
            'Sales'[LFL Id LY DoW] = 1
                && 'Sales'[Time key] IN _list
        )
            )
    )
RETURN
    vResult

Esta semana se agregará una columna Fecha del calendario a la tabla Ventas y también lo intentaré.

De todos modos, ¿hay algo que hice mal?

¡Gracias!

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors