cancel
Showing results for 
Search instead for 
Did you mean: 
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
2 REPLIES 2
Greg_Deckler
Super User IV
Super User IV

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!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




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
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

April Update

Check it Out!

Click here to read more about the April 2021 Updates!

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.

secondImage

Experience what’s next for Power BI

See the latest Power BI innovations, updates, and demos from the Microsoft Business Applications Launch Event.