Qual o registo seguinte?

Nos últimos dias na comunidade surgiu uma questão de como se poderia obter uma listagem de produtos que eram posteriores a um produto pesquisado. Tratava-se de uma lista de artigos com uma estrutura de pai/filho em que cada registo tinha correspondência com um artigo anterior.

O objetivo era localizar todos os artigos que sucediam ao artigo procurado, sendo que o formato dos dados nos permitia fazer utilização da fórmula PATH.

A informação era a seguinte:

Como se pode verificar, temos a identificação do artigo antecessor e do seguinte, no entanto para a solução apenas necessitamos do antecessor, que neste caso vai ser o nosso “pai”.

Assim utilizando a função PATH podemos adicionar uma nova coluna aos nossos dados:

Products path = PATH(Products[Product], Products[predecessor])

A função PATH (caminho) retorna uma cadeia de texto delimitada com os identificadores de todos os pais do identificador atual, começando com o mais antigo e continuando até o atual.

Ao analisarmos a coluna correspondente vemos que temos identificados todos os artigos que antecedem o produto em questão, se por exemplo pegarmos no artigo 134 vemos que o mesmo é precedido pelo 133 e 132, temos assim a nossa hierarquia de artigos.

Para podermos encontrar os artigos que sucedem a um determinado registo temos agora de criar uma tabela não relacionada com a nossa listagem de artigos, esta permitirá criar um slicer para realizar a pesquisa.

A tabela pode ser criada em DAX ou no Power Query, e adicionamos a seguinte medida:

Find products = 
SUMX (
    ADDCOLUMNS (
        'Products Search',
        "ProductsTotal",
            COUNTROWS (
                FILTER ( Products, FIND ( 'Products Search'[Products], Products[Products path],, 0 ) )
            )
    ),
    [ProductsTotal]
)

Com a utilização da função FIND podemos identificar as linhas onde os artigos procurados estão na coluna do PATH, ao encontrarmos essas linhas podemos então filtrar a nossa tabela contar o total de linhas em que esse artigo está presente.

O resultado é o seguinte:

O artigo 134 que tem 3 artigos identificados na coluna do Products Path tem um total de 3 para Find Products assim logo podemos verificar que a contagem dos artigos, ao realizarmos um filtro no nosso slicer o resultado:

O artigo 115 apenas está presente numa das linhas, enquanto o 114 está identificado 3 a informação pode ser validada pela coluna Product Path.

Agora utilizando o Find Products como filtro podes ter o resultado final da nossa pesquisa:

Na pergunta da comunidade a necessidade era de encontrar apenas os artigos ativos pelo que modificamos a nossa função para:

Find products = 
SUMX (
    ADDCOLUMNS (
        'Products Search',
        "ProductsTotal",
            COUNTROWS (
                FILTER ( Products, FIND ( 'Products Search'[Products], Products[Products path],, 0 ) && Products[Status] = "Active")
            )
    ),
    [ProductsTotal]
)

Deixe um comentário