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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

La limitación de filas en la tabla de matriz no es un subtotal

Ok, entonces lo que realmente busco es la función "Mostrar totales generales para filas" que está en Excel pero la necesito en PowerBI.

En mi tabla matricial tengo 3 elementos en mi jerarquía: División -> Categoría -> Fabricante

Quiero limitar los fabricantes que se muestran porque solo los 5 primeros importan realmente.

Así que seguí esto aquí para tratar de que funcione: Resuelto: Ocultar filas en la tabla de matriz sin afectar a los sub... - Comunidad de Microsoft Fabr...

Al principio, lo probé con una opción RANK para devolver realmente los 5 mejores artículos con este DAX

Top 5 Total Sales = 

VAR ManufacturerRank = RANKX(ALL('Product'[Manufacturer]), [Total Dollar Sales], , DESC)
RETURN
    IF(
        ManufacturerRank <= 5
        , [Total Dollar Sales]
        , BLANK()
    )

En su mayor parte, esto funcionó, excepto que mis datos son aditivos desde el nivel de artículo, por lo que el rango me estaba dando algunos resultados extraños que mostraban mucho más de 5 fabricantes por categoría y mostraba algunos con montos bajos en dólares y excluyendo otros con montos altos en dólares.

Así que pivoté y creé un archivo de Excel de flujo de datos con una lista de fabricantes explícitos que quiero que se muestren por categoría.

Creé una relación entre esta nueva tabla y la tabla de productos existente basada en las columnas Categoría, luego creé esta nueva medida:

Total Dollar Sales (Filtered) = 
IF(
    SELECTEDVALUE('Product'[Manufacturer]) IN VALUES('Category Competing Manufacturers'[Manufacturer])
    , [Total Dollar Sales]
    , BLANK()
)

Todo lo relacionado con esta medida funciona exactamente como quiero, excepto que no hay un subtotal.

dg123456789_0-1714585789089.png

Básicamente, quiero que la primera columna tenga un subtotal como lo hace la segunda columna

1 ACCEPTED SOLUTION

Esta fue la respuesta más cercana para que lo resolviera.

La respuesta real es

VAR included_manufacturer = 
if(
    AND(
        SELECTEDVALUE('Product'[Manufacturer]) in VALUES('Category Competing Manufacturers'[Manufacturer]), 
        SELECTEDVALUE('Product'[Category]) IN VALUES('Category Competing Manufacturers'[Category]))
    , 1
    , BLANK()
    )

RETURN 
IF(
        sumx('Product',[included_manufacturer]) > 0
        , [Total Dollar Sales]
        , BLANK()
    )

Pero sí, el truco es que para que se acumule hasta los subtotales, necesitamos que sea una suma, o algún cálculo que permita que las líneas de subtotales sigan calculando sus totales.

Por lo tanto, esta fórmula final da a los fabricantes incluidos un valor de 1 y a todos los demás fabricantes un valor en blanco. Entonces, en cualquier lugar donde la suma de los fabricantes incluidos sea mayor que 0, podemos insertar las ventas totales en dólares, por lo que esto significa que la declaración lógica es VERDADERA tanto para los fabricantes incluidos como para los niveles de subtotal más altos que podrían tener sumas de 2 o más.

View solution in original post

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

@dg123456789 Ya veo, tal vez sea más fácil si coloca datos de muestra en un archivo de Excel, no necesita un modelo completo, solo tablas relevantes para esta pregunta en particular.

- Tabla de productos

- Tabla de fabricación de categorías

y supongo que habrá una tabla de hechos que calcula el monto en dólares y tiene una relación con la tabla del producto en la identificación del producto.

Y la relación entre estas tablas.

Tengo un archivo pbix de muestra que he creado, pero no puedo adjuntarlo aquí, y como estoy en una máquina de trabajo, la opción que tengo es un repositorio de github para alojar un archivo públicamente. Puedes verlo aquí: dghenkel/subtotal_test (github.com)

Syndicate_Admin
Administrator
Administrator

@dg123456789 debe establecer una relación entre estas dos tablas, que creo que será de 1 a 1, y luego usar esa lógica en el DAX para incluir solo al fabricante que está en la 2ª tabla.

Como he dicho, SELECTEDVALUE no te da el mismo valor en las filas que no son de fabricación, te da un valor en blanco. Son dos medidas diferentes.

@parry2k no es 1:1 porque algunos fabricantes producen productos en varias categorías. Tengo una relación entre las columnas de categorías como se indica en mi publicación original. Entonces, si estoy en la categoría de detergentes, la lista de fabricantes se limita solo a los de esa categoría.

Entonces, si SELECTEDVALUE() no es el camino, y también he probado MAX(), ¿cómo lo hago?

Syndicate_Admin
Administrator
Administrator

@dg123456789 pregunta rápida, ¿por qué está registrando IN VALUES, en otra tabla?

2º, la razón por la que no le da el total en el nivel superior porque está utilizando la condición selectedvalue que devuelve un espacio en blanco en un nivel que no es del fabricante.

Estoy tratando de limitar las filas de los Fabricantes que se muestran en la tabla Matriz. Estoy usando "EN VALORES" para seleccionar el grupo limitado, de lo contrario, hay 100 fabricantes, algunos de los cuales ganan muy poco dinero y no vale la pena obstruir mi informe.

Si comparas mis dos medidas, ambas están usando una declaración lógica y devolviendo un BLANK cuando es False, pero la primera medida da el subtotal y la segunda NO.

Estoy tratando de entender por qué funciona de una manera y no de la otra.

Syndicate_Admin
Administrator
Administrator

¿Puede proporcionar algunos datos de muestra?

Mi modelo es masivo y configurado con un esquema de estrella bastante complicado, me llevaría la mayor parte de uno o dos días armar un pbix de muestra.

Lo que realmente busco es por qué dos medidas, que aparentemente utilizan la misma funcionalidad de declaración if, no me están dando los mismos resultados.

Syndicate_Admin
Administrator
Administrator

@dg123456789 pruebe esto:

Total Dollar Sales (Filtered) = 
SUMX (
    FILTER ( 
        VALUES ( 'Product'[Manufacturer], 
        'Product'[Manufacturer] IN VALUES('Category Competing Manufacturers'[Manufacturer])
    )
    , [Total Dollar Sales]
)

Esta fue la respuesta más cercana para que lo resolviera.

La respuesta real es

VAR included_manufacturer = 
if(
    AND(
        SELECTEDVALUE('Product'[Manufacturer]) in VALUES('Category Competing Manufacturers'[Manufacturer]), 
        SELECTEDVALUE('Product'[Category]) IN VALUES('Category Competing Manufacturers'[Category]))
    , 1
    , BLANK()
    )

RETURN 
IF(
        sumx('Product',[included_manufacturer]) > 0
        , [Total Dollar Sales]
        , BLANK()
    )

Pero sí, el truco es que para que se acumule hasta los subtotales, necesitamos que sea una suma, o algún cálculo que permita que las líneas de subtotales sigan calculando sus totales.

Por lo tanto, esta fórmula final da a los fabricantes incluidos un valor de 1 y a todos los demás fabricantes un valor en blanco. Entonces, en cualquier lugar donde la suma de los fabricantes incluidos sea mayor que 0, podemos insertar las ventas totales en dólares, por lo que esto significa que la declaración lógica es VERDADERA tanto para los fabricantes incluidos como para los niveles de subtotal más altos que podrían tener sumas de 2 o más.

Te perdiste un paréntesis cercano, pero cuando hago esto, obtengo un error "El objeto visual ha excedido los recursos disponibles".

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.