Fala, pessoal!
Tudo bem com vocês?

No post de hoje, irei explicar um cenário que ocorreu comigo tempos atrás.

Um cliente queria plotar em um mesmo eixo do gráfico a data de abertura e fechamento de um chamado. Acontece que existiam chamados que eram abertos em uma dia e fechados em outro. Logo, como fazer isso, se existiam duas colunas de datas distintas?

A solução surgiu quando descobri o poder da função USERELATIONSHIP.

Basicamente, essa função especifica qual relacionamento considerar conforme especificado nas ColumnName1 e columnName2.

Vamos aos exemplos.

Para acessar o arquivo utilizado como exemplo, clique no link abaixo.

Download Arquivo

Importe o arquivo para o Power BI.

Lembrando que a fonte de dados é o Excel.

Ao analisarmos o conteúdo da base CRM, podemos notar duas colunas: Data Abertura e Data Fechamento.

Como estamos falando de DATAS, devemos considerar a existência da tabela DCalendario.

Conforme eu já expliquei em um post anterior, vou cria-lá utilizando a função CalendarAuto.

Como não estamos lidando com as datas no nível de data / hora, vamos tipificar as colunas apenas como Data no formato dd/mm/yyyy, nas três colunas conforme abaixo.

Agora, vamos analisar os relacionamentos.

Precisamos relacionar as duas colunas de data (Data Abertura e Data Fechamento com a coluna date.

Quando vinculamos as duas tabelas, notem os relacionamentos.

A coluna Data Abertura está com o relacionamento ativo (linha) e a Data Fechamento está inativo (linha tracejada).

Eu já havia escrito um post explicando como funcionam os relacionamentos. Caso queira dar uma lida para contextualizar melhor, Clique no link abaixo.

Acesso ao post de relacionamentos

Porque isso ocorre?

No Power BI não podemos ter dois relacionamentos ativos entre as mesmas tabelas, pois como ela vai saber de qual estamos falando quando usamos em nossos cálculos?

Para contornar essa situação, utilizamos a função USERELATIONSHIP. Nela, especificamos quais colunas considerar no relacionamento.

Vamos criar duas medidas para contextualizar. Uma utilizando a data de Abertura e a outra a data de Fechamento.

Como cada linha representam um chamado aberto, basta contar quantas linhas existentes na tabela.

Para os relacionamentos ativos não precisamos usar a função USERELATIONSHIP.

Chamados Abertos = COUNTROWS(CRM)

Agora, vamos criar a medida de chamados Fechados.

Como essa coluna está com relacionamento inativo, nela precisaremos usar a função USERELATIONSHIP.

Veja como:

Chamados Fechados = CALCULATE(COUNTROWS(CRM);USERELATIONSHIP(CRM[Data Fechamento];DCalendario[Date]))

Porque aqui eu usei a função Calculate?

Porque a função USERELATIONSHIP só pode ser utilizada com funções que precisam de filtro, uma vez que ela filtra qual relacionamento será o ativo.

Vamos ver como ficou?

Notamos que todos os chamados abertos, foram fechados. Porém, conseguimos ver, no mesmo eixo de data, quando foram abertos e quando foram fechados.

Na  tabela, conseguimos ver que em 2009 foram abertos apenas dois chamados, nos dias 6 e 27/10, respectivamente.

Gostaram da dica? Tem alguma que queira a explicação?

Deixe seu comentário.

Abs.

Meirieli Ribeiro

Power BI – Função USERELATIONSHIP (Habilitando Relacionamentos)
Classificado como:                        

16 ideias sobre “Power BI – Função USERELATIONSHIP (Habilitando Relacionamentos)

  • 9 de agosto de 2019 em 3:28 PM
    Permalink

    Olá.
    Estou com um problema com datas também. Preciso fazer um cálculo de dias de atraso, porém, os dias de atraso dependem da data de referência que eu gostaria de acessar via um filtro. Um exemplo: tenho um título que vence dia 10/02. Caso colocar no filtro a data máxima dia 09/02, este título ainda não esta vencido, mas caso colocar no filtro dia 11/02 este filtro mostraria que este título esta 1 dia vencido. Não estou conseguindo pensar como posso usar a data de referência do filtro nos meus cálculos e tornar o calculo de dias de atraso dinâmico. Existe uma solução para esta situação? Obrigado.

    Resposta
    • 10 de agosto de 2019 em 3:07 PM
      Permalink

      Ola André

      Deixa eu ver se entendi. Você precisa que isto venha por exemplo, se o usuário selecionar algum filtro de data ou fosse algum parâmetro de input de dados?
      Poderiamos pensar em parametros para isto.
      Já tentou?

      Abs
      Igor

      Resposta
  • 31 de maio de 2019 em 12:12 AM
    Permalink

    Boa tarde, gostaria da sua estou com um grande problema e não estou conseguindo resolver.
    1. Tenho uma tabela calendário que criei com a função CALENDARAUTO()
    2. Uma tabela com os seguintes dados, Data, Faturamento e uma medida chamada Período Anterior, onde comparo os valores do período atual (Janeiro – Maio) com o período anterior.

    Periodo Anterior =
    if(NOT(ISBLANK([1 Soma Faturamento]));
    VAR DATES2 = CALCULATE([1 Soma Faturamento];DATEADD(Sheet1[DATA];-1;YEAR))
    return
    CALCULATE(DATES2;ALL(Calendario[Date])))

    Até aí tudo bem, o problema está no relacionamento, se for configurado 1:1 a coluna Período anterior retorna os valores e seu total corretamente, mas se mudar para Muito para Um aí ferra tudo, a coluna Período anterior retorna vazia, sem nenhum dado.

    Sabe me dizer como reverter isso? Se necessário pode me chamar no Skype: Maxwell Rios ou WhatsApp (61) 98150-1173

    Resposta
    • 29 de junho de 2019 em 12:50 AM
      Permalink

      Olá, Maxwell!

      Já tentou criar a métrica utilizando a função SAMEPEPERIODLASTYEAR?

      Abs.
      Meirieli Ribeiro

      Resposta
  • 12 de abril de 2019 em 3:39 AM
    Permalink

    Olá Marielli,

    Esse post salvou minha horas dedicadas a resolver esse problema de duplo relacionamento muito obrigadoooo!! Meu projeto também é em cima de um sistema de tickets. Baseado no uso da função USERELATIONSHIP e datas de abertura e fechamento dos tickets, como eu poderia filtrar o todos os chamados que foram abertos em um determinado mês (especificado no visual usando o dCalendar) e os que foram fechados dentro do próprio mês?

    Resposta
    • 15 de abril de 2019 em 11:30 PM
      Permalink

      Nesse caso,você precisará criar um filtro usando as duas datas como referência.

      Algo assim Se Mes(DataAbertura) = Mes(DataFechamento); “Mesmo Mês”; “Mês Diferente”) e ai vc add o filtro de mes e esse campo.Assim, é só selecionar o mes atual no filtro e marcar a opção mesmo Mês que te mostra os abertos e fechados do mês selecionado. 🙂

      Resposta
      • 23 de abril de 2019 em 2:08 PM
        Permalink

        Olá Meirieli,

        Muito obrigado pela resposta! Legal mais um jeito de fazer meu filtro, fiz de outra forma que deu certo também, segue:

        Tickets Opened = COUNTROWS(dTicket)

        Total Closed on the Same Period =
        CALCULATE(COUNTROWS(dTicket); FILTER(dTicket; AND(dTicket[Created_Date]=MIN(dCalendar[Date])));FILTER(dTicket; AND(dTicket[Closed_Date]=MIN(dTicket[Created_Date]))))

        Resposta
        • 23 de abril de 2019 em 9:14 PM
          Permalink

          Que massa, Leonardo! Mais uma forma de chegar ao mesmo resultado! Obrigada por vir aqui e colocar a sua contribuição!
          Abs e no que precisar, conte conosco! 🙂

          Resposta
        • 29 de julho de 2019 em 3:00 PM
          Permalink

          Bom dia, tentei fazer desta forma mas esta dando erro de sintaxe.
          Total_Data_Aberto = COUNTROWS(RelPosicaoAcessos)

          Total_Data =
          CALCULATE(
          COUNTROWS(RelPosicaoAcessos);
          FILTER(RelPosicaoAcessos;
          AND(
          RelPosicaoAcessos[DATA_AQUISICAO]=MIN(dCalendario[Data]);FALSE()
          )
          );
          FILTER(RelPosicaoAcessos;
          AND(
          RelPosicaoAcessos[DATA_DEVOLUCAO]=MIN(RelPosicaoAcessos[DATA_AQUISICAO]);FALSE()
          )
          )
          )
          Alguém consegue me ajudar ?

          Resposta
          • 10 de agosto de 2019 em 3:28 PM
            Permalink

            Ola Luiz
            Só alegria?
            Poderia nos enviar via drive o print do erro?

            Abs
            Igor

            Resposta
  • 9 de abril de 2019 em 4:12 PM
    Permalink

    Olá Meirieli,

    Primeiramente, obrigado por esse post! Sou novo com Power BI, esse post salvou minhas muitos horas gastas tentando resolver esse dilema das duas datas de tickets que até o momento de ler sua ajuda não tinha conseguido resolver 🙂

    Gostaria de saber se você pode me ajudar com outra questão. gostaria de obter os chamados que foram abertos em um determinado mês e a quantidade desses mesmos chamados que foram fechados no dentro do próprio mês que foi aberto.

    Obrigado mais uma vez!!

    Resposta
    • 15 de abril de 2019 em 11:33 PM
      Permalink

      Nesse caso,você precisará criar um filtro usando as duas datas como referência.

      Algo assim Se Mes(DataAbertura) = Mes(DataFechamento); “Mesmo Mês”; “Mês Diferente”) e ai vc add o filtro de mes e esse campo.Assim, é só selecionar o mes atual no filtro e marcar a opção mesmo Mês que te mostra os abertos e fechados do mês selecionado. ?

      Resposta
  • 7 de março de 2019 em 3:35 PM
    Permalink

    Bom dia Meirieli
    Muito bom o seu exemplo, e se ao invés de eu utilizar uma coluna de data de uma mesma tabela, eu tiver que filtrar por uma terceira tabela?

    Resposta
    • 8 de março de 2019 em 12:42 AM
      Permalink

      Oi, Lucas!

      A USERELATIONSHIP é uma função que ativa o relacionamento inativo entre duas tabelas. Se há uma terceira tabela envolvida, entendo que o seu modelo é Snow Flake.

      Para isso, vc tem duas opções:

      Torna a terceira tabela parte da segunda, via join no PB ou na sua base, ou usa a função RELATED para retornar a coluna da terceira tabela na segunda.

      Abs.

      Resposta
  • 13 de fevereiro de 2019 em 3:21 PM
    Permalink

    Bom dia Meirieli ,

    Parabéns pelo conteúdo! Está me ajudando muito no meu dia a dia.

    Fiz o passo a passo, porém o no meu caso não estou conseguindo exibir o eixo.
    Realizei algumas validações, as medidas estão corretas.
    Obs: no meu caso, seria interessante exibir por mês/ano (ex: 02/2018..)

    Não sei se estou deixando passar algum detalhe. Se tiver um meio que eu possa enviar meu .pbix

    Agradeço atenção.

    Resposta
    • 13 de fevereiro de 2019 em 8:11 PM
      Permalink

      OI, Lucas!

      Na sua Calendário vc pode criar uma coluna via DAX nesse formato que você Precisa: FORMAT(SeuCampoData;”mm/yyyy”). Teste e nos informe se funcionou. Abs.

      Resposta

Deixe uma resposta para André Luiz Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *