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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

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
July 2024 Power BI Update

Power BI Monthly Update - July 2024

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

PBI_Carousel_NL_June

Fabric Community Update - June 2024

Get the latest Fabric updates from Build 2024, key Skills Challenge voucher deadlines, top blogs, forum posts, and product ideas.

Top Solution Authors