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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Comparar usuarios/grupos/Group_Memberships de entornos de Active Directory

Tengo 2 entornos de Active Directory en los que estamos haciendo una actualización (desarrollo ("dev-ad.com") y extrayendo los datos de producción ("prod-ad.com")

He conectado y extraído cada entorno en su propio informe. El entorno actual que estamos actualizando es el desarrollo. Necesito poder asegurarme de que todos los usuarios, grupos y membresías de grupos estén lo más cerca posible de la producción. Cada entorno utiliza un dominio diferente, por lo que OU, DN y CN tendrán valores ligeramente diferentes debido a esto.

Soy un poco nuevo en PowerBI, autodidacta. Así que estoy tratando de averiguar el mejor método para crear un informe que compare Dev AD con Prod AD.

Datos:
dev_group
dev_group_memebers
dev_user
prod_group
prod_group_members
prod_user

Hay demasiadas columnas para especificar para cada grupo de datos. Esencialmente, lo he hecho;
- Todos los atributos de los usuarios
- Básico para grupos
- miembros del grupo que tengo grupo distinguishedName, member.displayName, member.employeeNumber, member.employeeType, member.userPrincipalName, group top.name.

Realmente me vendría bien mucha ayuda aquí. He estado con la cabeza contra la pared tratando de aprender todo lo que pueda para hacer todo esto, lo que parece un poco avanzado, pero esa es solo mi opinión.

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hola @SudoFi ,

Pruebe los siguientes pasos:

1. Preparación de los datos
Dada la complejidad y el volumen de los datos con los que está tratando, el primer paso es asegurarse de que sus datos estén bien preparados para la comparación. Esto implica estructurar sus datos de una manera que facilite la comparación a pesar de las diferencias en los nombres de dominio.

Normalizar atributos específicos del dominio: dado que la unidad organizativa, el DN y el CN tienen ligeras diferencias debido a los diferentes dominios, cree columnas calculadas en Power BI para normalizar estos atributos. Por ejemplo, puede crear una nueva columna que extraiga la última parte del DN que es común en ambos entornos.

Consolidar datos: asegúrese de que las tablas de datos (dev_group, dev_group_members, dev_user, prod_group, prod_group_members, prod_user) se cargan en Power BI. Es posible que tenga que transformar estas tablas para tener una estructura coherente para la comparación. Use el Editor de Power Query en Power BI para este propósito.

2. Creación de relaciones
Establece relaciones entre tus tablas. Dado que está tratando con usuarios y grupos en dos entornos, es probable que tenga que crear relaciones basadas en atributos normalizados que sean comunes entre el desarrollo y la producción.

3. Lógica de comparación
Para comparar los entornos:

Crear medidas para la comparación: use DAX para crear medidas que identifiquen discrepancias entre los dos entornos. Por ejemplo, puede crear una medida que cuente el número de usuarios de un grupo en el entorno de producción y lo compare con el recuento en el entorno de desarrollo.

Visualizar diferencias: use formato condicional y elementos visuales como tablas y gráficos de barras para resaltar las diferencias entre los dos entornos. Esto hará que sea más fácil identificar dónde se encuentran las discrepancias.

Saludos
Apoyo de la comunidad Team_Binbin Yu
Si esta publicación Ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Gracias por su respuesta. He realizado los pasos 1 y 2 hasta ahora y estoy atascado en el paso 3. Definitivamente no soy tan hábil con DAX y tengo que investigar cada comparación lógica con poca suerte. Si hay algún ayudante en el que pueda ayudar con esto, se lo agradecería mucho.


Hola @SudoFi ,

Con el fin de comprender mejor sus demandas y dar la solución adecuada, ¿podría proporcionar información más específica? como los datos de ejemplo desensibilizados y una captura de pantalla de los resultados deseados?

Gracias por sus esfuerzos y tiempo de antemano.

Saludos
Apoyo de la comunidad Team_Binbin Yu
Si esta publicación Ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Así que aquí hay una vista general del diseño de los datos.

SudoFi_0-1717452593264.png

En la parte superior tenemos mesas de grupo
En la parte inferior tenemos tablas de usuarioEl lado izquierdo es el entorno de desarrollo
El lado derecho es el entorno de producción

Aquí hay una lista de las tablas
Todas las tablas

dev_user
dev_group
dev_group_members
prod_user
prod_group
prod_group_members
dev_user-usuario
dev_user-organizationalPerson
dev_user persona
dev_user parte superior
dev_user-msExchCertificateInformation
dev_user-msExchBaseClass
dev_user-msExchMultiMediaUser
dev_user-msExchMailStorage
dev_user-msExchCustomAttributes
dev_user-msExchOmaUser
dev_user-shadowAccount
dev_user-posixAccount
dev_user-msDS-CloudExtensions
dev_user-securityPrincipal
dev_user-mailRecipient
dev_group-grupo
dev_group parte superior
dev_group-msExchIMRecipient
dev_group-msExchBaseClass
dev_group-msExchCustomAttributes
dev_group-msExchMailStorage
dev_group-posixGroup
dev_group-mailRecipient
dev_group-securityPrincipal
prod_user-usuario
prod_user-organizationalPerson
prod_user persona
prod_user parte superior
prod_user-msExCertificateInformation
prod_user-msExchBaseClass
prod_user-msExchMultiMediaUser
prod_user-msExchMailStorage
prod_user-msExchCustomAttributes
prod_user-msExchOmaUser
prod_user-shadowAccount
prod_user-posixAccount
prod_user-msDS-CloudExtensions
prod_user-securityPrincipal
prod_user-mailRecipient
prod_group-grupo
prod_group parte superior
prod_group-msExchIMRecipient
prod_group-msExchBaseClass
prod_group-msExchCustomAttributes
prod_group-msExchMailStorage
prod_group-posixGroup
prod_group-mailRecipient
prod_group-securityPrincipal


Todas las tablas de usuario contienen los nombres de usuario DisplayName y DistinguishedName de los usuarios
Cada tabla de grupo contiene el nombre de visualización del grupo y el nombre distinguido

También creé tablas de lista para poder limitar el trabajo a solo usuarios o solo grupos o un entorno específico.
Tablas dinámicas

Tablas de producción
Tablas de usuario de desarrollo
Tablas de grupos de desarrollo
Tablas de usuario de producción
Tablas de grupos de producción
Tablas de desarrollo
Todas las tablas
Tablas dinámicas


He creado relaciones a partir de cada
prod_group-*** y prod_user-*** a los correspondientes dev_group-*** y dev_user-***
Cada ***_group-*** está conectado a _group
Cada _user-*** está conectado a _user
_group miembros están conectados a _group y _user

Todas las relaciones, excepto las siguientes, están inactivas

SudoFi_4-1717454049367.png

Todas las relaciones están vinculadas a la columna distinguishedName


Pude crear una medida que me proporcionaría una comparación de los usuarios en dev y prod usando esto:

Comparison = 
VAR BothExist = 
    COUNTROWS(
        INTERSECT(
            VALUES('dev_user-user'[distinguishedName]),
            VALUES('prod_user-user'[distinguishedName])
        )
    )
VAR OnlyInProd = 
    COUNTROWS(
        EXCEPT(
            VALUES('prod_user-user'[distinguishedName]),
            VALUES('dev_user-user'[distinguishedName])
        )
    )
VAR OnlyInDev = 
    COUNTROWS(
        EXCEPT(
            VALUES('dev_user-user'[distinguishedName]),
            VALUES('prod_user-user'[distinguishedName])
        )
    )
RETURN
    CONCATENATEX (
        {
            "Both Exist: " & FORMAT(BothExist, "#,##0"),
            "Only in Prod: " & FORMAT(OnlyInProd, "#,##0"),
            "Only in Dev: " & FORMAT(OnlyInDev, "#,##0")
        },
        [Value],
        UNICHAR (10)
    )


Pensé que podría usar la consulta DAX para obtener más información sobre todos los nombres de columna

EVALUATE
SUMMARIZE(COLUMNSTATISTICS(),[Table Name],[Column Name])

Sin embargo, es una consulta demasiado grande y supera los 1024.
Traté de dividirlo en sus grupos de datos de perspectiva

EVALUATE
VAR DevUsers = 
    SUMMARIZE(
        FILTER(
            COLUMNSTATISTICS(),
            LEFT([Table Name], 9) = "dev_user-"
        ),
        [Table Name],
        [Column Name]
    )
VAR ProdUsers = 
    SUMMARIZE(
        FILTER(
            COLUMNSTATISTICS(),
            LEFT([Table Name], 10) = "prod_user-"
        ),
        [Table Name],
        [Column Name]
    )
VAR DevGroups = 
    SUMMARIZE(
        FILTER(
            COLUMNSTATISTICS(),
            LEFT([Table Name], 10) = "dev_group-"
        ),
        [Table Name],
        [Column Name]
    )
VAR ProdGroups = 
    SUMMARIZE(
        FILTER(
            COLUMNSTATISTICS(),
            LEFT([Table Name], 11) = "prod_group-"
        ),
        [Table Name],
        [Column Name]
    )
RETURN
UNION(DevUsers, ProdUsers, DevGroups, ProdGroups)

Pero aún así superó los 1024mb. Incluso traté de romperlos bloqueando 5 mesas a la vez, y aún así se excedió.

Así que ahora me queda tratar de encontrar una manera de comparar 2 tablas a la vez, sin embargo, todavía no estoy seguro de cómo lograr esto de manera eficiente y no tener que escribir múltiples consultas y medidas por par de tablas.

Una vez más, el objetivo final aquí es poder determinar los datos que faltan en el entorno de desarrollo que está en producción.

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel1

Power BI Monthly Update - May 2024

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

Top Solution Authors
Top Kudoed Authors