Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more.
Get startedGrow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.
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.
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.
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
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.
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Ask questions in Eventhouse and KQL, Eventstream, and Reflex.