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

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. Register Now

Reply
Syndicate_Admin
Administrator
Administrator

Hacer referencia a los parámetros de un campo en AllExcept

Hola amigos,

Necesito su ayuda para hacer referencia a una columna seleccionada en el parámetro Filed dinámicamente en Allexcept para formar una agrupación junto con otras columnas estáticas, todo desde una sola tabla.

Tengo tres segmentaciones "L1", "L2", "L3", todas ellas tienen las mismas 10 columnas (tres parámetros de campo) esos tres niveles se utilizan en una matriz visual

El usuario puede seleccionar una combinación de opciones de segmentación para ver los datos en diferentes niveles en la matriz.

El problema aquí es que necesito desarrollar una medida que use allExcept para crear una agrupación y luego elegir solo el mínimo de la columna "ID" y sumar los valores.

En Todos, excepto que necesito usar un par de columnas estáticas y las tres columnas seleccionadas en esas 3 segmentaciones de nivel. He trabajado mucho, pero no he sido capaz de averiguar cómo obtener esos valores dinámicamente y usarlos dentro de todo.

Probé la opción de usar el valor seleccionado, pero puede haber 100 combinaciones de selecciones de las 3 segmentaciones.

Por favor, hágame saber si se requieren más detalles

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Ah, ya veo 🙂

Si hay columnas calculadas que se usan en las segmentaciones de nivel, se ve obligado a anular la dinamización con una tabla calculada en lugar de Power Query.

No es imposible, pero es un poco tedioso escribir el código (podría generarlo de alguna manera), y las columnas específicas requeridas tendrían que estar codificadas.

Sin embargo, puede limitar los atributos a solo las 16 columnas.

Este es un ejemplo en el que se usa la tabla Customer de Contoso Light en dax.do.

https://dax.do/pYc6P1cRhPMjFc/

No veo otra forma de hacer algo como esto, ya que DAX no tiene forma de construir una referencia 😞 de columna dinámica

Syndicate_Admin
Administrator
Administrator

@OwenAuger Muchas gracias por su detallada explicación

El problema al que me enfrento aquí es que tengo una tabla enorme con alrededor de 100 columnas y 16 de ellas se utilizan en las cortadoras de nivel. Esas columnas son una combinación de columnas calculadas y agrupaciones. Despivotar una tabla tan grande con DAX parece prácticamente imposible.

¿Me falta algo aquí?, la ayuda es muy apreciada

Syndicate_Admin
Administrator
Administrator

@teja503

Si te he entendido bien, quieres escribir una expresión equivalente a:

CALCULATE (
    <Expression>,
    ALLEXCEPT (
        YourTable,
        YourTable[Fixed Column 1],
        YourTable[Fixed Column 2],
        <Field parameter L1 Column>,
        <Field parameter L2 Column>,
        <Field parameter L3 Column>
    )
)

Limitaciones de los parámetros de campo

Desafortunadamente, no es posible crear una referencia de columna dinámica basada en selecciones de parámetros de campo dentro de una expresión DAX.

Power BI (como herramienta cliente) cambia las referencias dentro de la consulta DAX del objeto visual en función de las selecciones de parámetros de campo, pero dentro de una expresión de medida no se pueden convertir esas selecciones en referencias de columna dinámicas.

En términos más generales, creo que es imposible escribir una expresión DAX en la que el linaje de las referencias de columna no esté determinado de antemano.

Método alternativo

Sin embargo, hay una manera de producir este comportamiento utilizando parámetros de campo combinados con una versión no dinámica de la tabla que contiene las columnas de parámetros de campo.

A continuación, se muestra un pequeño ejemplo con tres opciones en cada parámetro de campo (PBIX adjunto):

1. Supongamos que tenemos una tabla Product :

OwenAuger_0-1701342995940.png

2. A continuación, cree los parámetros de campo L1, L2 y L3, cada uno de los cuales contiene la marca, el color y el tamaño.

Aquí está L1, por ejemplo:

OwenAuger_1-1701343046003.png

3. Ahora agregue una tabla ' Product Unpivot', producida al anular la dinamización de todas las columnas excepto el ID de producto.

He aquí un extracto:

OwenAuger_2-1701343104034.png

4. Cree una relación bidireccional 1:many entre 'Product' [Product ID] y 'Product Unpivot' [Product ID].

5. Crear una medida base

Product Count = 
COUNTROWS ( 'Product' )

6. Supongamos que ahora queremos crear una medida con este pseudocódigo:

Product Count ALLEXCEPT Source, L1, L2 =
CALCULATE (
    [Product Count],
    ALLEXCEPT (
        YourTable,
        YourTable[Source],
        <Field parameter L1 Column>,
        <Field parameter L2 Column>
    )
)

Podemos escribirlo de la siguiente manera:

Product Count ALLEXCEPT Source, L1, L2 = 
VAR L1_Selection =
    SELECTCOLUMNS ( L1, L1[L1] )
VAR L2_Selection =
    SELECTCOLUMNS ( L2, L2[L2] )
VAR AttributeValue =
    SUMMARIZE (
        'Product Unpivot',
        'Product Unpivot'[Attribute],
        'Product Unpivot'[Value]
    )    
VAR L1_ProductID =
    CALCULATETABLE (
        VALUES ( Product[Product ID] ),
        AttributeValue,
        TREATAS (L1_Selection, 'Product Unpivot'[Attribute] ),
        REMOVEFILTERS ( 'Product' )
    )

VAR L2_ProductID =
    CALCULATETABLE (
        VALUES ( Product[Product ID] ),
        AttributeValue,
        TREATAS ( L2_Selection, 'Product Unpivot'[Attribute] ),
        REMOVEFILTERS ( 'Product' )
    )
VAR Result =
    CALCULATE (
        [Product Count],
        
        -- Below rows are equivalent to
        --   ALLEXCEPT ( 'Product', 'Product'[Source], <L1 column>, <L2 column> )
        ALLEXCEPT ( 'Product', 'Product'[Source] ), -- always include Product[Source]
        L1_ProductID,
        L2_ProductID
    )
RETURN
    Result
  • Esta medida toma los pares atributo-valor del contexto de filtro actual (AttributeValue).
  • A continuación, estos pares atributo-valor se aplican como filtros, con los nombres de atributo L1 y L2 aplicados también como filtros, para producir dos conjuntos de identificadores de producto (L1_ProductID y L2_ProductID).
  • Finalmente calculamos [Product Count] con L1_ProductID y L2_ProductID aplicados como filtros, junto con el modificador fijo ALLEXCEPT ( 'Product', 'Product' [Source] ). (Resultado)

Puede comprobar que con L1 = Marca y L2 = Color, la medida anterior devuelve los mismos valores que esta medida de comparación:

Product Count ALLEXCEPT Source, Brand, Colour = 
CALCULATE (
    [Product Count],
    ALLEXCEPT ( 'Product', 'Product'[Source], 'Product'[Brand], 'Product'[Colour] )
)

OwenAuger_3-1701344097397.png

¿Se puede adaptar algo así a tu modelo?

Es cierto que esto es bastante trabajo. Tal vez podamos hacer referencia dinámicamente a las selecciones de campo en las medidas en el futuro.

Saludos

Helpful resources

Announcements
Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

February 2024 Update Carousel

Power BI Monthly Update - February 2024

Check out the February 2024 Power BI update to learn about new features.

Fabric Career Hub

Microsoft Fabric Career Hub

Explore career paths and learn resources in Fabric.

Fabric Partner Community

Microsoft Fabric Partner Community

Engage with the Fabric engineering team, hear of product updates, business opportunities, and resources in the Fabric Partner Community.

Top Solution Authors
Top Kudoed Authors