Avaliação de agrupamento DAX

Aug 16 2020

Nesta medida - estou criando uma tabela temporária para agrupar por ID do cliente e retornar o ano do min order_date para cada cliente. Em seguida, quero contar o número de clientes que aparecem em um determinado ano (basicamente apenas uma contagem de linhas).

O que estou lutando para entender é - esta fórmula não parece olhar para a SUMMARIZEtabela dentro dela. Se eu colocar o ano e esta medida em uma matriz, ela conta com base na tabela bruta, não na versão agrupada construída SUMMARIZEna fórmula. Alguma ideia de por que está avaliando dessa maneira?

COUNTROWS(
SUMMARIZE(
    Orders,
    Orders[Customer ID],
    "min_order_date_year",
    MIN(Orders[Order Date].[Year])))

Respostas

1 mkRabbani Aug 16 2020 at 14:14

A fórmula está OK de acordo com a lógica que você forneceu a ela. Você deve esclarecer seus requisitos e o que está escrevendo em seu código. Sua fórmula está retornando exatamente o que você está instruindo.

Se bem entendi, você simplesmente precisa da contagem de clientes para o ano mínimo. Por exemplo, se você tiver 6 clientes únicos para o ano de 2019 e 11 clientes únicos para o ano de 2020, você está procurando aqui o valor 6 para retornar por sua medida.

Agora, o que sua tabela de resumo realmente está retornando? se você criar uma tabela personalizada separada apenas para o código Resumir, conforme abaixo, poderá ver que a tabela conterá todo o nome/ID do cliente na primeira coluna e a segunda coluna conterá o ano MIN disponível para esse cliente.

orders_summarize = 
SUMMARIZE(
    Orders,
    Orders[customer id],
    "min_order_date_year",MIN(Orders[Order Date].[Year])
)

Então, basicamente, você tem uma lista de todos os clientes em sua tabela resumida. E agora você está contando as linhas de sua tabela de resumo que, na verdade, está retornando o número total de clientes únicos.

Por fim, se você deseja contar clientes para um ano específico (como o ano MIN), siga estas etapas abaixo:

Etapa 1: crie uma tabela resumida personalizada conforme abaixo-

store_summarized_table = 
SUMMARIZE(
    store,
    store[Customer ID],
    "mindate",MIN(store[Order Date])
)

Etapa 2: crie uma medida as-

count_cust_id = COUNT('store_summarized_table'[Customer ID])

Etapa 3: agora configure seus visuais Matrix conforme mostrado na imagem abaixo. Você também pode obter a saída na imagem

Para evitar a Tabela Física, você pode fazer isso abaixo-

Etapa 1: crie uma coluna personalizada conforme abaixo-

is_min_year = 

// -- keep current row's customer id to a variable
VAR current_cust_id = store[Customer ID]
// -- keep current row's YEAR value to a variable
VAR current_year = store[Order Date].[Year]

// -- find the MIN YEAR from order date for the current row customer id
VAR min_year_current_custommer_id =  
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        store,
        store[Customer ID] = current_cust_id
    )
)

// -- check the current row's year is the MIN year of order date for the customer as well or not.
RETURN IF(current_year = min_year_current_custommer_id, 1,0)

OU crie uma medida como-

is_min_year_measure = 

VAR min_order_year_for_current_customer = 
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        ALL(store),
        store[Customer ID] = MIN(store[Customer ID])
    )
)

RETURN
IF ( MIN(store[Order Date].[Year]) = min_order_year_for_current_customer, 1,0)

Etapa 2: crie uma medida conforme abaixo-

Para coluna personalizada criada

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        store[is_min_year] = 1
    )
)

Para medida criada

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        [is_min_year_measure] = 1
    )
)

Agora adicione "Data do pedido" e meça "count_cust_for_min_year" à sua matriz. A saída será igual à abaixo-