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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Power BI DAX : CROSS JOIN entre dos tablas basadas en un filtro variable

Tengo dos tablas de entrada en mi modelo de Power BI.

1) UserPermission
2) Tabla de búsqueda

Las dos tablas anteriores no están relacionadas.

Userpermission:

jill.GIF

'Todos' corresponde a todos los segmentos de la tabla de búsqueda, es decir, X,Y,Z.

Tabla de búsqueda:

jg.GIF

UserPermission[SgmtID] es equivalente a LookupTable[SegmentID].

Necesito desarrollar una tabla de salida, mediante CROSS JOINing la columna UserName
en la tabla UserPermission y en la columna Ports de la tabla de búsqueda.

Tabla de salida deseada:

PBI OLSEN1.GIF

David necesita tener todos los puertos de todos los segmentos en la tabla de búsqueda (es decir, X,Y,Z).
John necesita tener todos los puertos del segmento X solamente.
Mike necesita tener todos los puertos del segmento Y solamente.

Jill solo necesita tener todos los puertos de los segmentos X y Z.

La diferencia entre David y Jill es que David puede acceder a todos los segmentos, mientras que Jill puede acceder a varios segmentos, pero no a todos los segmentos.

La tabla de salida es necesaria para la seguridad de nivel de fila (RLS).

Sé usar CROSS JOIN usando VALUES, también algunas variables y filtros. Pero no es capaz de desarrollar una consulta DAX completa, debido a la falta de experiencia.

¿Alguien puede ayudarme amablemente con esto?

Gracias.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Finalmente descubierto: Tuve que cambiar el nombre de columna UserPermissions[SegmentID] a UserPermissions[SgmtID]

Entonces:

Tabla de salidas - FILTRO (
COLUMNAS DE RESUMEN (
UserPermission[UserName],
UserPermission[SgmtID],
LookupTable[Puertos],
LookupTable[SegmentID]
),
[SgmtID] < 0 || [SegmentID] á [SgmtID]
)

View solution in original post

9 REPLIES 9
Syndicate_Admin
Administrator
Administrator

Finalmente descubierto: Tuve que cambiar el nombre de columna UserPermissions[SegmentID] a UserPermissions[SgmtID]

Entonces:

Tabla de salidas - FILTRO (
COLUMNAS DE RESUMEN (
UserPermission[UserName],
UserPermission[SgmtID],
LookupTable[Puertos],
LookupTable[SegmentID]
),
[SgmtID] < 0 || [SegmentID] á [SgmtID]
)

Syndicate_Admin
Administrator
Administrator

No @snph1777 ,

Estos son los pasos que puede seguir:

1. Cree una columna calculada.

Desired Output table =
var _david=
SELECTCOLUMNS('Table (2)',"UserName","david","Ports",[Ports])
var _john=
SELECTCOLUMNS(FILTER('Table (2)',
[Sement]=CALCULATE(MAX('Table'[Segment]),FILTER('Table',[UserName]="john"))&&
[SementID]=CALCULATE(MAX('Table'[SegmentID]),FILTER('Table',[UserName]="john")))
,"UserName","john","Ports",[Ports])
var _mike=
SELECTCOLUMNS(FILTER('Table (2)',
[Sement]=CALCULATE(MAX('Table'[Segment]),FILTER('Table',[UserName]="mike"))&&
[SementID]=CALCULATE(MAX('Table'[SegmentID]),FILTER('Table',[UserName]="mike")))
,"UserName","mike","Ports",[Ports])
VAR _1=
SELECTCOLUMNS(FILTER('Table','Table'[UserName]="jill"),"1",[Segment])
VAR _2=
SELECTCOLUMNS(FILTER('Table','Table'[UserName]="jill"),"2",[SegmentID])
var _jill=
SELECTCOLUMNS(FILTER('Table (2)',
[Sement] in _1&&
[SementID] in _2)
,"UserName","jill","Ports",[Ports])
return
UNION(_david,_john,_mike,_jill)

2. Resultado.

v-yangliu-msft_0-1611024530971.png

Puede descargar el archivo PBIX desde aquí.

Saludos

Liu Yang

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola Liu, muchas gracias por su ayuda; apreciarlo; He encontrado una solución simplificada, y he publicado aquí. agan muchas gracias

Syndicate_Admin
Administrator
Administrator

@snph1777 suena bien.

Hola @parry2k muchas gracias por su tiempo y ayuda; He encontrado una solución simplificada y he publicado aquí. Pero agradezco su ayuda.

Syndicate_Admin
Administrator
Administrator

@snph1777 agregar la siguiente medida y, a continuación, una tabla de esta medida

Include = 
IF ( 
    SELECTEDVALUE ( User[SegmentId] ) = -1, 
    COUNTROWS ( 
        CROSSJOIN ( Ports, User ) 
    ), 
    CALCULATE ( 
        COUNTROWS ( Ports ), 
        TREATAS ( 
            VALUES ( User[SegmentId] ), 
            Ports[SegmentId] 
        ) 
    ) 
)

Aquí hay una expresión para crear una tabla calculada

Table = SUMMARIZECOLUMNS('User'[User], 'User'[SegmentId], 'User'[Segment], 'Ports'[Ports], "Include", 'User'[Include])

y esta nueva tabla contendrá sus datos.

Consulta mi última entrada de blog Año-2020, Pandemia, Power BI y más allá para obtener un resumen de mis versiones favoritas de las características de Power BI en 2020

Me gustaría elogios si mi solución ayudara. 👉 Si puedes dedicar tiempo a publicar la pregunta, también puedes hacer esfuerzos para dar Felicitaciones a quien haya ayudado a resolver tu problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consulta relacionadas con Power BI.

Gracias. Volveremos después de probar tu solución.

Syndicate_Admin
Administrator
Administrator

@snph1777 más fácil sería crear una columna calculada por dax si está de acuerdo con ella.

Se necesita una salida de tabla. Esta tabla se usará para la seguridad de nivel de fila.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors