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)
Tags:                         

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

  • 28 de janeiro de 2020 em 4:32 PM
    Permalink

    Muito obrigado amigo, me ajudou bastante!!!!

    Resposta
    • 28 de janeiro de 2020 em 4:33 PM
      Permalink

      Desculpe corrigindo, amiga!!

      Resposta
    • 30 de janeiro de 2020 em 4:58 AM
      Permalink

      🙂

      Resposta
  • 1 de novembro de 2019 em 5:24 PM
    Permalink

    Obrigado por compartilhar.

    Ficou perfeito e vou usar o mesmo método para resolver meu problema aqui na empresa. Onde tenho na base de fato as colunas mês e semana e as vendas são agrupadas por loja, produto e as datas (semana ou mês).

    No Excel é bem simples, duas tabelas dinâmicas, uma na visão acumulada semana e outra na visão acumulada mês, porém com um período de vendas bem reduzidos por conta das linhas do Excel.
    No power BI não estava dando certo, até agora. Pois tenho certeza que sua dica vai funcionar bem. 🙂

    Vou tentar agora mesmo e qq novidade volto aqui.

    Abraço e muito obrigado por compartilhar.

    Resposta
    • 30 de janeiro de 2020 em 4:51 AM
      Permalink

      🙂

      Deu certo?

      Resposta
  • 28 de outubro de 2019 em 12:57 AM
    Permalink

    Olá Meirieli,

    Estou tentando realizar um censo diário hospitalar e não estou conseguindo calcular quantos pacientes vieram do dia anterior.
    Tenho uma tabela chamada Atendimento, com a identificação de cada Atendimento realizado, e outra tabela Ocorrência, onde cada atendimento tem várias ocorrências (Entrada por admissão, Entrada por transferência, Saída por Transferência e Saída por Alta) em varias datas.
    Assim, gostaria de calcular o número de pacientes (em cada dia) que permaneceram internados: (data de entrada da admissão data de referência OU data da alta=NULL). Além disso, como pretendo realizar esse censo por unidade e especialidade, como eu selecionarei a ocorrência certa?

    ex:
    data – ocorrencia – especialidade – clinica

    dia 21/jan – entrada admissao – CARDIOLOGIA – PRONTO SOCORRO
    dia 24/jan – saida por transferencia- CARDIOLOGIA – PRONTO SOCORRO
    dia 24/jan – entrada por transferencia- CARDIOLOGIA- CLINICA MEDICA
    dia 31/jan – saida por transferencia- CARDIOLOGIA- CLINICA MEDICA
    dia 31/jan – entrada por transferencia-CIRURGIA CARDIACA- UTI
    dia 05/fev – saida por alta -CIRURGIA CARDIACA- UTI

    Supondo que desejo saber o calculo dos pacientes vindos do dia anterior dia 01/fevereiro (data de referencia), esse paciente deve ser incluido na contagem, alem de ser da especialidade CIRURGIA CARDIACA na unidade UTI

    Desde já agradeço pela atenção!

    Atenciosamente,

    Cássio Antonio Andrade

    Resposta
  • 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 Leonardo Conrado Cancelar resposta

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