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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
andrea_chiappo
Helper III
Helper III

diferenciadita en tablas relacionadas con condiciones y estructura no uniforme

Lo que estoy tratando de hacer es bastante involucrado (para mí al menos), así que esto podría ser interesante para los solución más experimentados

Tengo (entre otros) las tres tablas siguientes:

DimGroups[groupID] <-> DimGroupsUsers[groupID, userID] <-> DimUsers[userID]

donde las flechas indican las relaciones (activas) y los valores entre corchetes las dimensiones relacionadas

(con un ligero mal uso del central, pero supongo que obtendrá el punto)

A continuación, las instantáneas de las dos primeras tablas filtradas para customerID-20

DimGroups

Capture_LI (3).jpg

y DimGroupsUsers

Capture2.PNG

Para todos los clientes hay al menos un grupo padre y varios grupos (20_1 y 20_2 en el ejemplo anterior)

Sé (de DimGroups)que un grupo es un grupo padre si no tiene groupID de padre (20_1, 20_2).

Desde DimGroupsUsers puedo calcular el número de usuarios dentro de cada grupo o contexto. Pero hay algunas advertencias

Todos los grupos siempre pertenecen al menos a un grupo padre,

Los usuarios pueden pertenecer a uno o varios grupos y al grupo padre correspondiente, o

Los usuarios pueden pertenecer a un grupo, pero no a un grupo paterno y viceversa

las instantáneas anteriores muestran un ejemplo de este último caso:

los usuarios 20_3, 20_5 y 20_8 no pertenecen a ningún grupo, sino sólo a grupos de padres,

los grupos 20_4, 20_6, 20_7, 20_10, 20_11, 20_13, 20_14 están vacíos y

fathergroup 20_1 contiene tres usuarios y fathergroup 20_2 contiene 7 usuarios (las 7 filas superiores de DimGroupsUsers)

Quiero calcular es el número de usuarios dentro de cada grupo y grupo paterno

Idealmente, quiero poder mostrar esto usando el visual Sunburst (un donout de varias capas)

Esto es lo que hice:

Primero creé la columna inGroup en DimGroupsUsers con la siguiente fórmula:

inGroup - IF(
ISBLANK(
LOOKUPVALUE(
DimGroups[fatherGroupID],
DimGroups[groupID],
DimGroupsUsers[groupID])),
Falso
Verdad)

Luego, en DimGroups, pensé en calcular el número de usuarios dentro de cada grupo o grupo padre

con una columna calculadautilizando la siguiente fórmula:

GruposPoblación - IF(
ISBLANK(DimGroups[fatherGroupID]),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, SELECTEDVALUE(DimGroups[groupID])),
FILTER(DimGroupsUsers, NOT(DimGroupsUsers[inGroup]))
),
IF(
CONTIENE(
DimGroupsUsers,
DimGroupsUsers[groupID],
DimGroups[groupID]
),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, SELECTEDVALUE(DimGroups[groupID]))
),
0
)
)
Esperaba que la nueva columna mostrara la suma de los usuarios en cada grupo o grupo paterno
correspondiente a cada fila de DimGroups
Sin embargo, sólo obtengo ceros en la correspondencia de los grupos vacíos
NOTA: Agregué SELECTEDVALUE porque inicialmente IF no estaba filtrando por contexto custermID
¿Alguien puede ayudarme a resolver este enigma? Muchas gracias
1 ACCEPTED SOLUTION
Greg_Deckler
Super User
Super User

Podría equivocarme, pero tal vez intentar:

GruposPoblación - IF(
ISBLANK(DimGroups[fatherGroupID]),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, DimGroups[groupID]-EARLIER(DimGroups[groupID])),
FILTER(DimGroupsUsers, NOT(DimGroupsUsers[inGroup]))
),
IF(
CONTIENE(
DimGroupsUsers,
DimGroupsUsers[groupID],
DimGroups[groupID]
),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, DimGroups[groupID] ? EARLIER(DimGroups[groupID]))
),
0
)
)

@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...

View solution in original post

2 REPLIES 2
Greg_Deckler
Super User
Super User

Podría equivocarme, pero tal vez intentar:

GruposPoblación - IF(
ISBLANK(DimGroups[fatherGroupID]),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, DimGroups[groupID]-EARLIER(DimGroups[groupID])),
FILTER(DimGroupsUsers, NOT(DimGroupsUsers[inGroup]))
),
IF(
CONTIENE(
DimGroupsUsers,
DimGroupsUsers[groupID],
DimGroups[groupID]
),
CALCULAR(
DISTINCTCOUNT(DimGroupsUsers[userID]),
FILTER(DimGroups, DimGroups[groupID] ? EARLIER(DimGroups[groupID]))
),
0
)
)

@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...

Gracias por la solución Greg.
Desgraciadamente me acabo de dar cuenta de que la solución funciona bien para el caso de ejemplo

Me presenté en el post original, pero no para otros.

Por ejemplo, en el caso opuesto, donde todos los usuarios están en el mismo grupo paterno,

la fórmula cuenta dos veces a los usuarios en el grupo paterno

Capture.PNG

(aquí Contexto es la definición de grupo paterno de la empresa)

En esta situación, el gráfico de doble donout mostrará un grupo padre

que contiene el doble de usuarios y un grupo de contexto independiente que contiene

exactamente el mismo número de usuarios que en los otros grupos, mientras que el

Se supone que el grupo de contexto es un grupo ficticio que recopila a todos los usuarios

no asignado a un grupo paterno

Capture2.PNG

Para remediar esto, pensé en hacer lo siguiente:

agregar una medida en la tabla DimGroupsUsers

para calcular el número de usuarios dentro de grupos, utilizando el siguiente

UsersInGroupsRole á CALCULATE(
IF(
DISTINCTCOUNT(DimGroupsUsers[userID])-0,
0,
DISTINCTCOUNT(DimGroupsUsers[userID])
),
ALLEXCEPT(DimGroupsUsers, DimGroupsUsers[userID]),
FILTER(DimGroupsUsers, DimGroupsUsers[inGroup]),
USERELATIONSHIP(DimGroupsUsers[userID], DimUsers[userID])
)

y luego modificar la solución como esta

Poblaciones ?
var contpop á CALCULATE(
IF(
DISTINCTCOUNT(DimGroupsUsers[userID])-0,
0,
DISTINCTCOUNT(DimGroupsUsers[userID])
),
FILTER(ALLNOBLANKROW(DimGroups), DimGroups[groupID]-EARLIER(DimGroups[groupID])),
FILTER(ALLNOBLANKROW(DimGroupsUsers), NOT(DimGroupsUsers[inGroup]))
)
var groupop - CALCULATE(
IF(
DISTINCTCOUNT(DimGroupsUsers[userID])-0,
0,
DISTINCTCOUNT(DimGroupsUsers[userID])
),
FILTER(ALLNOBLANKROW(DimGroups), DimGroups[groupID]-EARLIER(DimGroups[groupID])),
FILTER(ALLNOBLANKROW(DimGroupsUsers), DimGroupsUsers[inGroup])
)
devolver IF(
ISBLANK(DimGroups[fatherGroupID]),
IF(contpop <> [UsersInGroupsRole], contpop, 0),
IF(
CONTIENE(
DimGroupsUsers,
DimGroupsUsers[groupID],
DimGroups[groupID]
),
groupop,
0
)

)

Sin embargo, recibo el siguiente mensaje de error:

Se detectó una dependencia circular: DimGroups[Poblaciones]

¿Alguna idea de cómo resolver esto? Muchas gracias

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors