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
Syndicate_Admin
Administrator
Administrator

Representar datos basados en la condición TRUE de IF

Hola a todos!

Esforzarse por encontrar una manera de representar datos basados en una sola condición utilizando el operador IF:]

Esta consulta funciona:

Tabla 3 =
CALCULABLE (
SELECTCOLUMNS (
TimeReport,
"Neukunden_Akquise_Systeme", TimeReport[Neukunden_Akquise_Systeme],
"Neukunden_Akquise_Produkte", TimeReport[Neukunden_Akquise_Produkte],
"Nombre de usuario", TimeReport[Nombre de usuario]
)
)

Cuando agrego IF, dice: Varias columnas no se pueden convertir en un valor escalar, ¿qué pasa?

Tabla 3 =
IF(CONTAINSSTRING(SELECTEDVALUE(TimeReport[TopManagers]), [WhoIsWatching]),
CALCULABLE (
SELECTCOLUMNS (
TimeReport,
"Neukunden_Akquise_Systeme", TimeReport[Neukunden_Akquise_Systeme],
"Neukunden_Akquise_Produkte", TimeReport[Neukunden_Akquise_Produkte],
"Nombre de usuario", TimeReport[Nombre de usuario]
)
),
EN BLANCO()
)

La idea es renderizar la tabla completa una vez que se satisfaga la condición principal, por favor ayude.

9 REPLIES 9
Syndicate_Admin
Administrator
Administrator

En lugar de BLANK(), intente usar la función DATATABLE() en DAX para devolver una tabla sin registros, pero que tenga los mismos nombres de campo y tipos de datos que la tabla devuelta por SELECTCOLUMNS().

Hi Sreenathv,

Desafortunadamente está dando el mismo mensaje de error, ¿algún otro pensamiento?

fmourtaza_0-1638874312485.png

¿Es una tabla temporal que estás creando dentro de una medida? De lo contrario, las tablas calculadas se generan durante la carga/actualización de datos. Las condiciones "SELECTEDVALUE" y IF son útiles solo cuando el usuario interactúa con el informe y genera una medida utilizando una tabla temporal en él. Pero una vez que la tabla se genera durante la actualización / carga de datos, lo que sea que el usuario seleccione en una segmentación de datos u otro objeto visual, eso no va a cambiar la tabla ya calculada. ¿Cuál es el escenario?

@sreenathv Gracias por la rápida respuesta.

Tengo la siguiente tabla:

FunciónDepartamentoCiudadIngresosAltos Directivos
TDVentasPoner1Mjohn@abc.com; sarah@abc.com; myriam@abc.com
PARAHRBombay (Bombay2Mraj@abc.com; shirish@abc.com; john@abc.com
HORAProcuraciónDelhi3Msarah@abc.com; john@abc.com

Mi requisito es verificar si el usuario que ha iniciado sesión en CurrentUser es uno de los TopManagers, si es así, muestre los datos.

Estoy logrando esta comprobación con este simple operador IF (línea 2) contra el [WhoIsWatching] que es la función USERPRINCIPALNAME(), una vez que la comprobación es verdadera, muestre los datos de lo contrario nada.

¿Es una tabla temporal que estás creando dentro de una medida? => Estoy creando una nueva tabla desde el menú Modelado > Nueva tabla.

@fmourtaza

La tabla calculada se crea incluso antes de que el usuario inicie sesión y consuma el informe. Así que no creo que este enfoque de crear una tabla con datos basados en la función USERPRINCIPALNAME() funcione.

Sin embargo, puede usar USERPRINCIPALNAME() como parte de sus medidas, algo así como

if (USERPRINCIPALNAME() in VALUES(TopManagers),Return figures, blank()) 

Necesito explorar este uso.

@sreenathv Acabo de comprobarlo y se ve prometedor

Sin embargo, me estoy quedando atascado en la 😐 "Cifras de devolución": ¿cómo devolver los datos?

Lo intenté de la misma manera pero sin suerte... por favor ayuda!

fmourtaza_0-1638893200696.png

No sé si lo expliqué correctamente, pero parece que has entendido mal mi pseudocódigo. Consulte, en DAX, cada vez que crea una columna calculada o una tabla calculada, utiliza el almacenamiento persistente y se crea en el momento de la carga de datos/actualización del informe. En realidad, ocupa su almacenamiento asignado en la nube. Esto sucede antes de que un usuario consuma el informe. Por lo tanto, no es posible crear realmente una tabla condicionalmente basada en el usuario.

Mientras que las medidas no se almacenan, en el sentido de que no ocupan su almacenamiento persistente, en cambio, se calculan en el tiempo de ejecución, cada vez. Las medidas utilizan la CPU. Puede tener tablas temporales y escalares definidos dentro de las medidas y almacenarlos en variables para cálculos adicionales dentro del alcance de la medida.

Es muy importante entender esta diferencia. En su caso, lo que sugerí fue algo como esto.

Supongamos que tiene una medida llamada SalesAmount.

SalesAmount = SUMX(Sales,Amount)

Si desea que solo los TopManagers vean este SalesAmount,cree una medida como esta y úselo en sus imágenes.

Sales Amount (User) =
IF (USERPRINCIPALNAME() in VALUES(TimeReport[TopManagers]),
[Sales Amount],
BLANK()
)

Si utiliza esta medida en los elementos visuales, el informe mostrará SalesAmount solo si el nombre de usuario está en la lista TopManagers. De lo contrario, se mostrará en blanco.

Este tipo de enfoque es necesario porque la lista de TopManager es de naturaleza dinámica. De lo contrario, podría haber utilizado Row-Level-Security para aplicar restricciones.

En esta respuesta, he escrito algunas cosas que técnicamente no son muy precisas (necesitarán un post más largo), pero espero que tengas una intuición sobre lo que es posible y lo que no es posible, y cuándo.

Esta es realmente una gran explicación, ya que soy nuevo en PowerBI y Dax, aprendí algo nuevo hoy, gracias a @sreenathv

Implementé lo anterior y funciona bien, una pregunta sería ¿cómo devolver múltiples medidas?

Por ejemplo, tengo 2 medidas - [Neukunden - Akquise Systeme] y [Neukunden - Akquise Produkte] - que contienen la suma de sus respectivos valores.

fmourtaza_0-1638945624824.png

Ahora, me gustaría mostrar esas 2 medidas en un Visual?

Esto funciona, por supuesto:


Nuevos clientes (usuarios) =
IF (USERPRINCIPALNAME() en VALUES(TimeReport[TopManagers]),
[Nuevos clientes - Productos de adquisición],
EN BLANCO())

Traté de mantener la medida en una matriz, pero no se ve bien

IF (USERPRINCIPALNAME() en VALUES(TimeReport[TopManagers]),
{[Nuevos clientes - Productos de adquisición],[Nuevos clientes - Sistemas de adquisición]},
EN BLANCO())

@Anonymous ,

Desafortunadamente, es imposible ocultar la medida de esta manera.

En primer lugar, desea mostrar diferentes datos dependiendo del usuario final.

La seguridad de nivel de fila (RLS) con Power BI se puede usar para restringir el acceso a los datos de usuarios determinados. Así que RLS es la mejor opción. Es mejor leer todo el texto para implementar RLS. userprincipalname() y username() siempre se utilizan con RLS.

En segundo lugar, username() y userprincipalname() no son compatibles con la columna de cálculo y la nueva tabla.

vchenwuzmsft_0-1639120427816.png

vchenwuzmsft_1-1639120452923.png

En tercer lugar, username() y userprincipalname() se pueden usar en medida pero medida no soporte devolver una tabla. Pero la medida puede usar la tabla durante el proceso de cálculo. Por ejemplo

Measure =
VAR _table3_from_your_code =
    SELECTCOLUMNS(
        TimeReport,
        "Neukunden_Akquise_Systeme", TimeReport[Neukunden_Akquise_Systeme],
        "Neukunden_Akquise_Produkte", TimeReport[Neukunden_Akquise_Produkte],
        "User Name", TimeReport[User Name]
    )
RETURN
    COUNTROWS( _table3_from_your_code )

Este número devuelto y la cadena son compatibles.

Cuarto, para detallar las diferencias entre columnas y medidas

https://insightsoftware.com/blog/calculated-columns-vs-measures/

Saludos

Equipo de apoyo a la comunidad _ chenwu zhu

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

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.