Columna personalizada condicional con algo de matemáticas

Un usuario Pregunto ✅

cpdanielmc21

Hola comunidad

Espero que puedas ayudarme en este.

Quiero crear una columna personalizada en el editor de consultas en función de algunas condiciones que incluyen la suma y la división de cantidades. Pude hacer esto con Excel, pero hasta ahora no puedo encontrar una manera en powerBI …

Permítanme explicar: si la suma de los montos de las categorías 1 y 2 es negativa (si comparten el mismo mes), entonces la categoría 1 debe ser cero y la suma de sus montos debe dividirse y agregarse a los raws de la categoría 2. Otras categorías (como 3) intacto.

Capture11.JPG

Pero, si la suma de las categorías 1 y 2 es positiva (si comparten el mes), entonces las categorías 1 y 2 deben mostrar cero y otras categorías intactas.

Capture12.JPG

Además, el número de crudos aquí es muy simple, pero mis datos pueden tener cientos de crudos, por lo que la división debe ser dinámica dependiendo del número de crudos para la categoría 2 y solo para el mes correspondiente.

¿Algunas ideas? ¿Crees que esto puede ser posible?

AiolosZhao

En respuesta a cpdanielmc21

Hola @ cpdanielmc21,

Gracias por explicarme, hice esto, espero que sea lo que quieres:

Measure 14 = 
VAR sumcategory = CALCULATE(SUM('Table (4)'[Amount]),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] in {1,2}))
VAR sumcategory1 = CALCULATE(SUM('Table (4)'[Amount]),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] in {1}))
VAR countrow2 = CALCULATE(COUNTROWS('Table (4)'),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] = 2))
RETURN IF(MAX('Table (4)'[Category]) = 3,SUM('Table (4)'[Amount]),
        IF(sumcategory < 0,
            IF(MAX('Table (4)'[Category]) = 1,0,sumcategory1 / countrow2 + SUM('Table (4)'[Amount])),
            0))

Columna personalizada condicional con algo de math.PNG

Aiolos Zhao

Hola @ cpdanielmc21,

Puede modificar el código de @AiolosZhao y crear una columna calculada directamente.

Column = 
VAR sumcategory = 
CALCULATE(
    SUM('Table (4)'[Amount]),
    FILTER(
       ALL( 'Table (4)'),
        'Table (4)'[Category] in {1,2} && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
VAR sumcategory1 = 
CALCULATE(
    SUM('Table (4)'[Amount]),
    FILTER(
        ALL('Table (4)'),
        'Table (4)'[Category] = 1 && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
VAR countrow2 = 
CALCULATE(
    COUNTROWS('Table (4)'),
    FILTER(
        ALL('Table (4)'),
        'Table (4)'[Category] = 2 && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
RETURN 
IF(
    [Category] = 3,
    'Table (4)'[Amount],
    IF(
        sumcategory > 0,
        0,
        SWITCH(
            [Category],
            1, 0,
            2, (sumcategory1/countrow2) + 'Table (4)'[Amount]
        )
    )
)

nnn5.PNGnnn6.PNG

Atentamente,
Lionel Chen

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Hola @ cpdanielmc21,

Puede modificar el código de @AiolosZhao y crear una columna calculada directamente.

Column = 
VAR sumcategory = 
CALCULATE(
    SUM('Table (4)'[Amount]),
    FILTER(
       ALL( 'Table (4)'),
        'Table (4)'[Category] in {1,2} && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
VAR sumcategory1 = 
CALCULATE(
    SUM('Table (4)'[Amount]),
    FILTER(
        ALL('Table (4)'),
        'Table (4)'[Category] = 1 && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
VAR countrow2 = 
CALCULATE(
    COUNTROWS('Table (4)'),
    FILTER(
        ALL('Table (4)'),
        'Table (4)'[Category] = 2 && 'Table (4)'[Month] = EARLIER('Table (4)'[Month] )
    )
)
RETURN 
IF(
    [Category] = 3,
    'Table (4)'[Amount],
    IF(
        sumcategory > 0,
        0,
        SWITCH(
            [Category],
            1, 0,
            2, (sumcategory1/countrow2) + 'Table (4)'[Amount]
        )
    )
)

nnn5.PNGnnn6.PNG

Atentamente,
Lionel Chen

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

cpdanielmc21

En respuesta a v-lionel-msft

Hola @ v-lionel-msft y @AiolosZhao

Ambas soluciones funcionan en diferentes escenarios, así que estoy usando ambas, ¡gracias!

Amitchandak

@ cpdanielmc21, pruebe nuevas columnas como

personalizado 1 = si ([category] en {1,2} && [Amount] <0)
personalizado 2 = si ([category] en {1,2} && [Amount] > 0)

AiolosZhao

Hola @ cpdanielmc21,

Creo que usar DAX para hacer la lógica no es difícil, pero no entiendo la lógica para dividir la cantidad.

En el escenario uno, la cantidad total = -21. Luego desea dividirlo en 2 filas (cantidad -80 y cantidad -1)

¿Por qué el número personalizado es -50 y 29?

¿Podría ayudarme a explicar cómo obtiene -50 y 29?

Gracias.

Aiolos Zhao

cpdanielmc21

En respuesta a AiolosZhao

@AiolosZhao

Hola seguro

el total para la categoría 1 es 60, por lo que estos 60 deben asignarse a la categoría 2.
Dado que la categoría 2 tiene 2 filas, la división será 30 y 30.

-80 más 30 = -50

-1 más 30 = 29

así que antes de este proceso, el total para cat 1 y 2 era -21, y después de que el proceso todavía es -21, simplemente se reorganiza.

AiolosZhao

En respuesta a cpdanielmc21

Hola @ cpdanielmc21,

Gracias por explicarme, hice esto, espero que sea lo que quieres:

Measure 14 = 
VAR sumcategory = CALCULATE(SUM('Table (4)'[Amount]),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] in {1,2}))
VAR sumcategory1 = CALCULATE(SUM('Table (4)'[Amount]),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] in {1}))
VAR countrow2 = CALCULATE(COUNTROWS('Table (4)'),FILTER(ALL('Table (4)'[Category],'Table (4)'[Amount]),'Table (4)'[Category] = 2))
RETURN IF(MAX('Table (4)'[Category]) = 3,SUM('Table (4)'[Amount]),
        IF(sumcategory < 0,
            IF(MAX('Table (4)'[Category]) = 1,0,sumcategory1 / countrow2 + SUM('Table (4)'[Amount])),
            0))

Columna personalizada condicional con algo de math.PNG

Aiolos Zhao

cpdanielmc21

En respuesta a AiolosZhao

@AiolosZhao ¡Gracias!

Una pregunta, ¿hay alguna manera de hacer esto directamente como una columna personalizada en el editor de datos / paso en el editor de consultas en lugar de medir?

Además, la medida funciona muy bien excepto cuando empiezo a filtrar:

Entonces, la cosa es que, más adelante, crearé un resumen con los valores totales por mes de las categorías, y esto es lo que obtengo (la categoría 1 es cero y la 3 es 100, eso está bien, pero la categoría total 2 debería ser -21)

Capture13.JPG

AiolosZhao

En respuesta a cpdanielmc21

@ cpdanielmc21,

Creo que es otra lógica en tu captura de pantalla.

¿Quiere mostrar la columna de cantidad por suma o no suma?

En su captura de pantalla, la cantidad es una suma, por lo que cada categoría solo tendrá una cantidad.

Pero en su publicación, divide la cantidad de la categoría 1 en 3 filas, eso es diferente. cual es lo que querias?

Aiolos Zhao

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *