La función Treatas DAX no funciona como se esperaba, está devolviendo una columna en blanco completa

Aug 16 2020

Estoy tratando de entender la función de Treatas DAX. Hay dos tablas Activos y Ticket . La mesa de boletos tiene una relación padre e hijo. Para cada valor de Asset[AssetKey], quiero calcular el recuento de niños en la tabla Ticket. Hay dos relaciones entre estas tablas. Uno activo y otro inactivo.

El problema: cuando uso la función Treatas, la medida completa del número de niños se devuelve en blanco. Usé la fórmula -

Number of Child = CALCULATE(COUNT(Tickets[AssetKey]),TREATAS(SUMMARIZE(Asset,Asset[AssetKey]),Tickets[ParentId]))

Para replicar el escenario, siga los siguientes pasos:

Paso 1: crear tabla Activo :

Asset = DATATABLE("AssetKey",INTEGER,"Name",STRING,{{1,"Australia"},
{2,"Belgium"},
{3,"Canada"},
{4,"Denmark"},
{5,"England"}})

Crear ticket de mesa

Tickets = DATATABLE("AssetKey",INTEGER,"ParentId",INTEGER,"TicketKey",INTEGER,{{3,1,1},
{1,Blank(),1},
{3,1,3},
{2,Blank(),4},
{4,2,5},
{3,1,6},
{2,Blank(),7},
{4,2,8},
{1,Blank(),9},
{5,2,10}})

Paso 2: cree una relación entre los activos y la tabla de tickets (uno a muchos) en la columna AssetKey.

Paso 3: ahora cree las siguientes medidas:

Number Of Tickets = COUNT(Tickets[TicketKey])

Number of Child = CALCULATE(COUNT(Tickets[AssetKey]),TREATAS(SUMMARIZE(Asset,Asset[AssetKey]),Tickets[ParentId]))

Ahora el problema: ¿Por qué la columna del Número de Hijos aparece en blanco?

La salida esperada es:

Respuestas

1 Aldert Aug 16 2020 at 23:23

Tu problema no es el TRATAR sino el RESUMEN. TREATAS espera la entrada de la mesa para que lo resumas.

Prueba lo siguiente:

summarizedAsset = SUMMARIZE(Asset,Asset[AssetKey])

Esto te devuelve 1,2,3,4,5. Lógico porque esto es lo que le pediste que hiciera. Ahora TREATAS va a hacer lo mismo en la mesa Ticket. Entonces devuelve una tabla con valores de una columna "vacíos", 1,2. Exactamente lo que podemos esperar. Lo siguiente que hace es COUNT en AssetKey, esta tabla recién creada no tiene esta columna, por lo que regresa vacía.

Lo que estás buscando es una columna que está calculando a los niños:

Number of Child = 
var Akey = Asset[AssetKey]
return CALCULATE(COUNT(Tickets[ParentId]), filter(Tickets, Akey = Tickets[ParentId]))

Esto devuelve exactamente lo que estabas buscando.

PD: 10 puntos, hiciste un excelente trabajo al hacer la pregunta, fácil de reproducir para otros. ¡¡Trabajas como un profesional!!