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
ctaylor
Helper III
Helper III

Evaluación de columnas condicionales en datos agrupados para mantener una lista distinta

Hola

Con PowerBI estoy intentando usar Active Directory como fuente de información de usuario para nuestras cuentas de teléfono móvil porque los datos en el entorno móvil se han des sincronizado y están causando problemas de facturación.

No tienes que decirme que es una idea tonta, ya he tratado de explicar así que aquí estoy con un problema.

Hay una gran desconexión en los datos y con el fin de no colocar filas entre los dos conjuntos de datos voy a tener instancias donde varios usuarios (asociados pasados y presentes) pueden tener el mismo número de teléfono o ningún número en absoluto. La unión de datos será volcar todos los números del proveedor móvil, porque eso es lo que se está facturando y adjuntar la información de AD del asociado que coincida.

Por lo tanto, necesito construir una búsqueda 1:1 sin un buen escalar para usar. He decidido que la mejor manera sería crear la lista distinta de números móviles, unir el displayName y userAccountStatus de AD, luego agrupar en el número de teléfono móvil y también agregar un recuento para esta publicación. Resultados en:

2020-08-27 14_13_06-MobileAnalysis - Power Query Editor.png

Dentro de esos registros agrupados hay un valor UserAccountControl de 512 o 514.

512 - Activo y 514 - Deshabilitado

Ver para referencia: https://www.windowstechno.com/useraccountcontrol-attribute-flag-values/

Por lo tanto, esto me lleva al final de mi conocimiento de PowerQuery. Lo que quiero al final es una mesa con 1 número de móvil para 1 persona (o nadie). Si el número de usuarios con ese número es 1 entonces no me importa si es un 512 o un 514 usuario, quiero que el registro se expanda. Si el recuento es > 1 entonces quiero el registro 512 solamente. Si hay varios 512 registros, entonces llegamos al punto donde mi jefe y yo a tomamos cabezas porque no puedo pensar en otro valor escalar que usaría para determinar el registro a elegir! Pero, supongo que preferiría el error manejar eso y devolver "Múltiple" o algo sólo para mantener la lista distinta de números móviles.

Aquí hay un archivo pbix rápido que azotó con sólo el intento de agrupar los datos.

https://wallick-my.sharepoint.com/:u:/p/ctaylor/EYK2cvHHo4ZKuVEd3S0IWLUBbNJaN287ifSiVsZhzRclRA?e=15u...

9 REPLIES 9
ctaylor
Helper III
Helper III

Bump porque todavía estoy atascado tratando de averiguar cómo hacer las evaluaciones internas.

ctaylor
Helper III
Helper III

Golpear y agregar nuevo código a medida que me estoy acercando, pero he vuelto a correr en el borde de mi conocimiento.

Estoy produciendo una tabla de números inalámbricos distintos y luego seleccionando el EMPLOYEEID adecuado para devolver y luego relacionándolo de nuevo con los datos de AD para producir un nombre y otra información.

Aquí es donde estoy:

{"Wireless Number"}, 
{
{"Items", each _, type table [Wireless Number=nullable text, GetBaseUserInfo.displayName=nullable text, GetBaseUserInfo.Custom.extensionAttribute15=nullable text, GetBaseUserInfo.UserStatus.user.userAccountControl=nullable number]}, 
{"Count of Users", each Table.RowCount(_), Int64.Type}
,{"EmpID", 
    each 
        if Table.RowCount(_) = 1 
            then List.Max([GetBaseUserInfo.employeeID])
        else if Table.RowCount(_) > 1 then
            each if [GetBaseUserInfo.UserStatus.user.userAccountControl] = 512
                then List.Max([GetBaseUserInfo.employeeID])
                else List.Max([GetBaseUserInfo.employeeID])
        else 0, Int64.Type
    }
}

Siento que mi problema está cada vez más cerca de resolver, pero el paso en el que estoy tratando de buscar en los datos agrupados para encontrar un valor parece producir una salida que dice "Función". Obviamente estoy haciendo algo mal, así que tal vez alguien pueda ayudarme a corregirme.

ctaylor_0-1599585130950.png

La lógica que quiero es que si el recuento de filas es 1 y luego dame el empID.

Si el recuento de filas es > 1, entonces dame el empID del usuario donde el estado es 512

Si el recuento de filas es > 1 y hay varios 512 usuarios (este caso existe actualmente debido a un error del usuario) entonces dame el usuario con el empID más alto

El otro entonces es si el recuento de filas es > 1 y no hay 512 usuarios entonces dame el usuario 514 con el empID más alto

Por favor, ayúdelo con cualquier información o consejo sobre cómo realizar correctamente este conjunto de declaraciones if anidadas en este idioma que no comprendo completamente.

Gracias

Ha anidado cada instrucción. Eso puede confundir el motor de consultas y el consejo general es usar llamadas explícitas en lugar del azúcar de sintaxis.

Por favor... He declarado que estoy tratando de hacer que algo funcione en un lenguaje que puedo usar en forma de GUI, pero una vez que salgamos de ese reino y pasemos al editor avanzado estoy perdido. Decirme que hice algo mal sin proporcionar alguna sintaxis para corregirlo parece como trolling en este punto.

¿Qué debo hacer para poder evaluar los elementos internos de las filas agrupadas?

Una vez más, aquí está mi pseudocódigo:

La lógica que quiero es que si el recuento de filas es 1 y luego dame el empID.

Si el recuento de filas es > 1, entonces dame el empID del usuario donde el estado es 512

Si el recuento de filas es > 1 y hay varios 512 usuarios (este caso existe actualmente debido a un error del usuario) entonces dame el usuario con el empID más alto

El otro entonces es si el recuento de filas es > 1 y no hay 512 usuarios entonces dame el usuario 514 con el empID más alto

Actualmente las evaluaciones internas no están sucediendo, por lo tanto, por qué probé otra cada declaración porque simplemente no sé lo que tengo que hacer para evaluar los elementos internos para elegir el resultado que estoy buscando. ¡Eso es con lo que necesito ayuda!

lbendlin
Super User
Super User

Buen problema 🙂 ¿Tiene algún tipo de "fecha de última actualización" que podría romper los 512 lazos?

Además, en lugar de fusionar las mesas de esa manera creo que usted querrá hacer una unión externa completa primero, por si acaso. Tal vez ya está haciendo eso - ¿puede mostrar el código Table.Combine?

@lbendlin Gracias por su interés en mi problema aquí!

He pensado en usar un último tipo de fecha modificada/inicio de sesión/etc, pero de las que pensé, no podía pensar en una que no introduciría un error que pudiera cambiar la salida del informe en función de cuándo se vio. En nuestros datos reales en vivo hay dos asociados activos con el mismo número de teléfono móvil en AD. Esto es obviamente un error que necesitamos corregir, pero ¿qué podría suceder con el informe si no fuera así? Si el usuario A es el que tiene el valor MAXed un día, pero ocurre algo que desplaza el valor para el usuario B para que sea el que se extrae de los dos y luego se basa en cuando se mira el informe se podría ver un nombre diferente asociado. Por lo tanto, prefiero controlar el error para alertar a alguien de que ver "Múltiple" significa que hay datos que deben corregirse. Pero creo que mientras que esa lógica se aplica al usuario activo, ¿qué pasa si tengo 2 usuarios en una línea que están inactivos? En realidad, me gustaría usar el campo Last Modified para mostrar el usuario activo más reciente.

Sé que la lógica que necesito para aplicar mi problema es que simplemente no sé cómo hacerlo en esta aplicación, y eso es lo que estoy buscando ayuda con.

Este es el código para la creación de esta tabla actualmente.

let
    Source = VZW_Wireless_Summary,
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Wireless Number"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Sorted Rows" = Table.Sort(#"Removed Duplicates",{{"Wireless Number", Order.Ascending}}),
    #"Merged Queries" = Table.NestedJoin(#"Sorted Rows", {"Wireless Number"}, GetBaseUserInfo, {"Formatted Mobile"}, "GetBaseUserInfo", JoinKind.LeftOuter),
    #"Expanded GetBaseUserInfo" = Table.ExpandTableColumn(#"Merged Queries", "GetBaseUserInfo", {"displayName", "Custom.extensionAttribute15", "UserStatus.user.userAccountControl"}, {"GetBaseUserInfo.displayName", "GetBaseUserInfo.Custom.extensionAttribute15", "GetBaseUserInfo.UserStatus.user.userAccountControl"}),
    #"Replaced Value" = Table.ReplaceValue(#"Expanded GetBaseUserInfo",null,"Missing",Replacer.ReplaceValue,{"GetBaseUserInfo.displayName"}),
    #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",null,"Missing",Replacer.ReplaceValue,{"GetBaseUserInfo.Custom.extensionAttribute15"}),
    #"Replaced Value2" = Table.ReplaceValue(#"Replaced Value1","","Blank",Replacer.ReplaceValue,{"GetBaseUserInfo.Custom.extensionAttribute15"})
in
    #"Replaced Value2"

La razón por la que estoy haciendo una izquierda exterior es porque este informe es sobre la facturación y solo me importan esos números. AD contiene números móviles que no son de la empresa, así que agregar todos esos registros no parece que sea beneficioso a menos que me esté perdiendo algo que podría explicar más?

Lo que usted describe tiene sentido. Tal vez tener una matriz como resultado con cuatro cubos. Activo/Inactivo y Individual/Múltiple para los ejes x e y. Como un gráfico del cuadrante mágico 🙂

@lbendlin

Estoy confundido por tu respuesta.

Por un lado, ese concepto podría ser útil para el proyecto secundario para arreglar las brechas en los datos de AD que sé que existen, pero no estoy buscando una respuesta visual. Estoy buscando ayuda de código para poder analizar los registros agrupados para crear una tabla de datos 1:1.

Gracias

He descubierto a través de los años que las soluciones visuales son a menudo mucho más fáciles de lograr que las soluciones basadas en fórmulas. En otras palabras - no tengo idea de cómo su fórmula podría hacerse funcionar 🙂 estoy seguro de que los expertos aquí tendrán algo que pueda ayudarle.

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.

Top Solution Authors