Para fazer cálculos envolvendo datas no Power BI é necessário utilizar a linguagem DAX. Para isto existem, dentro desta linguagem, as funções de inteligência de tempo. Elas servem para trazer resultados de ano até o momento (year to date), ano versus ano (yoy), último dia do mês, última data disponível, etc.

Além de alguns cenários utilizando funções de inteligência de tempo no Power BI você aprenderá também sobre a opção “marcar como tabela de datas” que foi incorporada no Power BI na atualização de fevereiro de 2018. Entender o papel desta configuração feita nas tabelas que tem datas.

Baixe o arquivo do Power BI Desktop que oferecemos abaixo com todas as funções que falamos neste artigo. São exemplos práticos de quase todas as funções de inteligência de tempo disponíveis na linguagem DAX. Além de conseguir acompanhar o que falamos neste post sobre estas funções você terá também um local de consulta rápida sobre estas funções no seu PC. Assim poderá relembrar e tirar dúvidas no momento que quiser. Baixar o arquivo aqui.

Utilize o índice abaixo para navegar neste artigo. Por ele vá direto à função que deseja aprender.

15 funções DAX mais usadas

Funções de inteligência de tempo em DAX

A linguagem DAX disponibiliza um grande número de funções de inteligência de tempo. Veja todas neste link. Estas funções podem ser divididas em duas categorias:

  • Funções que retornam valores escalares sem necessidade da função CALCULATE;
  • Funções que retornam uma tabela, que será usada como um filtro numa fórmula CALCULATE.

Um exemplo do primeiro grupo é a função TOTALYTD. Este grupo, na verdade, apenas simplifica uma fórmula que utilizaria CALCULATE, trocando por uma função de inteligência de tempo. Exemplo de uma expressão utilizando TOTALYTD.

No segundo grupo, utiliza-se a função CALCULATE em conjunto. De fato, a função acima pode ser obtida também conforme abaixo, mas utilizando DATESYTD como um filtro.

Na fórmula acima é aplicado um filtro ao campo “CalendarioDAX[Date]”. Este substitui filtros existentes nesta coluna. Na prática a função DATESYTD por ser substituída pela função FILTER. A fórmula anterior corresponde a mesma fórmula a seguir.

Entenda mais sobre a função FILTER no artigo “5 funções DAX para usar muito no Power BI”.

Observe na figura abaixo que o resultado é o mesmo. Os três contextos utilizados trazem o mesmo valor, porque são formas diferentes para buscar um mesmo resultado. Em duas utilizamos funções de inteligência de dados temporais, nos dois grupos que destacamos no início deste tópico.

Funções de inteligência de tempo comparativo

Passamos agora a falar das funções de inteligência de tempo dividas pelos resultados que retornam.

 

Funções que retornam uma única data

Como nesta categoria as funções retornam uma única data, podem ser utilizadas como argumentos para outras funções. Abaixo colocamos alguns exemplos de funções deste grupo. De qualquer forma citamos todas disponíveis no texto.

FIRSTDATE

Retorna a primeira data da coluna de datas utilizadas no contexto atual.

Estrutura da fórmula: FIRSTDATE (<coluna_datas>)

Exemplo:

LASTDATE

Retorna a última data da coluna de datas utilizadas no contexto atual.

Estrutura da fórmula: LASTDATE (<coluna_datas>)

Exemplo:

As duas funções de inteligência de dados temporais acima são úteis em casos que deseje encontrar a primeira ou a última data em que foi feita uma venda, por exemplo. Dá para especificar qual produto, qual valor e mais, utilizando juntamente a função CALCULATE e/ou FILTER.

 

STARTOFMONTH

Retorna a primeira data do mês para uma coluna de datas utilizadas dentro do contexto atual.

Estrutura da fórmula: STARTOFMONTH (<coluna_datas>)

Exemplo:

 

ENDOFMONTH

Retorna a última data do mês para uma coluna de datas utilizadas dentro do contexto atual.

Estrutura da fórmula: ENDOFMONTH (<coluna_datas>)

Exemplo:

Além das duas funções acima temos ainda as funções STARTOFQUARTER e ENDOFQUARTER, que, nos mesmos moldes, são para datas em trimestres. Temos também as funções STARTOFYEAR e ENDOFYEAR que tratam o contexto na visão de ano.

Ao todo são 10 funções de inteligência de tempo que retornam um único valor de data, restou listar entre estas as funções FIRSTNOBLANK e LASTNOBLANK, que utilizadas em colunas de datas retorna valores (primeiro ou último) que não estão em branco.

Abaixo uma imagem dos resultados destas funções. Elas estão no arquivo que você fez o download acima (se não fez, faça agora pois ele contém vários exemplos das funções de inteligência de tempo em aplicações práticas).

 

Funções que retornam uma tabela de datas

Dentre às funções de inteligência de tempo há aquelas que retornam tabelas de datas. Estas, normalmente, são utilizadas como um argumento de filtro na função CALCULATE.

Estas funções, citaremos exemplos de algumas, mas ao todo são oito nesta situação, retornam um resultado a partir de uma coluna de data especificada antes.

 

PREVIOUSDAY, PREVIOUSMONTH, PREVIOUSQUARTER e PREVIOUSYEAR

Vamos utilizar a função PREVIOUSDAY como principal exemplo para se basearem. Esta função retorna uma tabela que contém uma coluna com todas as datas que representam o dia anterior à primeira data da coluna de datas na tabela Calendário no contexto atual.

Estrutura da fórmula: PREVIOUSDAY (<coluna_datas>)

Exemplo:

Neste exemplo a função retornará o valor de vendas do dia anterior em relação à data atual. Para exemplificar, para o dia 05/08/2018 a função retornará as vendas do dia 04/08/2018. No arquivo disponibilizado temos um exemplo prático desta função e de todas logo abaixo, para você entender melhor. Não deixe de baixa-lo logo no início deste post.

Além desta função temos também as funções PREVIOUSMONTH, PREVIOUSQUARTER e PREVIOUSYEAR. Estas outras três funções tem a mesma estrutura e lógica da PREVIOUSDAY, só representam contextos diferentes.

PREVIOUSMONTH

Retorna uma tabela que contém uma coluna com todas as datas que representam o mês anterior à primeira data da coluna de datas na tabela. Esta função retorna a soma de valores do mês fechado. Ou seja, caso a linha contenha uma data do mês de agosto retornará a soma das vendas total do mês de julho.

PREVIOUSQUARTER

Retorna uma tabela que contém uma coluna com todas as datas que representam o trimestre anterior à primeira data da coluna de datas na tabela. Esta função retorna a soma de valores do trimestre fechado. Ou seja, caso a linha contenha uma data do mês de agosto retornará a soma das vendas de todo trimestre anterior, no caso a soma dos meses abril, maio e junho.

PREVIOUSYEAR

Retorna uma tabela que contém uma coluna com todas as datas que representam o ano anterior à primeira data da coluna de datas na tabela. Esta função retorna a soma de valores do ano fechado. Ou seja, caso a linha contenha uma data do mês de agosto/17 retornará a soma das vendas de todo ano anterior, no caso a soma de todos os meses de 2016.

 

NEXTDAY, NEXTMONTH, NEXTQUARTER e NEXTYEAR

Estas funções de inteligência de tempo tem a mesma lógica das funções citadas acima que começam com PREVIOUS. Essa palavra é substituída por NEXT, que significa próximo. Assim estas funções retornam uma tabela que contém uma coluna com todas as datas que representam um dia, um mês, um trimestre ou um ano seguinte à primeira data da coluna de datas.

Utilizaremos o exemplo da função NEXTDAY para ilustrar, mas as outras seguem a mesma estrutura. No arquivo de Power BI Desktop disponibilizado deste artigo tem todos as funções exemplificadas. Esta função retorna o resultado do dia posterior à primeira data da coluna.

Estrutura da fórmula: NEXTDAY (<coluna_datas>)

Exemplo:

As explicações para as funções NEXTMONTH, NEXTQUARTER e NEXTYEAR são as mesmas de suas correspondentes PREVIOUS acima. Apenas substitua a palavra anterior por seguinte nas explicações.

 

DATESMTD, DATESQTD, DATESYTD e SAMEPERIODLASTYEAR

Estas funções de inteligência de tempo, ao invés de calcular um período anterior ou próximo, elas calculam o conjunto de datas no contexto. Melhor dizendo o resultado será do mês até o dia (DATESMTD), ou do trimestre até o dia (DATESQTD) ou do ano até o dia (DATESYTD). Todas essas funções executam seus cálculos usando a última data no contexto atual.

Para ilustrar utilizaremos a função DATESMTD, que retorna uma tabela que contém uma coluna de datas desde o início do mês até o dia atual no contexto.

Estrutura da fórmula: DATESMTD (<coluna_datas>)

Exemplo:

As funções DATESQTD e DATESYTD seguem a mesma lógica acima, mas retornam o total do trimestre ou ano respectivamente.

Já a função SAMEPERIODLASTYEAR requer um conjunto contínuo de datas, sem que as datas sejam contínuas esta função retornará um erro. Retorna uma tabela que contém uma coluna de datas com o atraso de um ano em relação às datas na coluna atual do contexto.

 

DATEADD, DATESBETWEEN, DATESINPERIOD e PARALLELPERIOD

Estas últimas quatro funções na categoria de funções que retornam uma tabela de data são um pouco mais complexas, mas também mais poderosas. Estas funções são utilizadas para deslocar-se do conjunto de datas de forma mais dinâmica, obedecendo o contexto atual das datas.

DATEADD

Retorna uma tabela que contém uma coluna de datas, adiantadas ou atrasadas no tempo conforme o número especificado de intervalos das datas no contexto atual. É possível substituir a função SAMEPERIODLASTYEAR que descrevemos acima pela fórmula abaixo. Este é apenas um dos exemplos da utilização desta função. Ela serve para adiantar ou atrasar os cálculos para dias, meses, trimestres e o caso do exemplo, anos.

DATESBETWEEN

Calcula um conjunto de datas entre uma data de início e uma data de término especificas nos argumentos. Esta função, bem como as próximas duas deslocam algum número de intervalo de tempo do contexto atual. Elas facilitam para deslocar os intervalos em dias, meses, trimestres e ano. Com elas é possível voltar 4 meses, adiantar um ano, voltar 2 semanas (14 dias), etc. No exemplo abaixo somamos os resultados de vendas nos primeiros 15 dias do mês.

DATESINPERIOD

Da mesma forma da função acima esta função desloca um número de intervalo de tempo do contexto atual. No exemplo abaixo fazemos o cálculo somando as vendas de 15 dias antes da data atual do contexto. Desta forma teremos as vendas -15 dias para cada data que apareça no contexto.

PARALLELPERIOD

Esta função retorna uma tabela que contenha uma coluna de datas que representa um período paralelo na coluna de datas no contexto atual, com as datas deslocadas em vários intervalos no presente ou no passado. A função PARALLELPERIOD é bem parecida à função DATEADD, exceto pelo fato de que PARALLELPERIOD sempre retorna períodos completos. A função DATEADD retorna períodos parciais. Por exemplo, se você tiver uma seleção de datas começando em 05/04/2017 e terminando em 16/04/2017 e quiser deslocar essa seleção um mês à frente, a função PARALLELPERIOD retornará todas as datas do próximo mês (de 1º de maio a 31 de maio); no entanto, se DATEADD for usada, o resultado só incluirá datas de 05 a 16 de maio. Na fórmula abaixo, retorna a soma das vendas de todo o mês seguinte à data no contexto.

Abaixo uma imagem dos resultados de todas as funções deste tópico que disponibilizamos no arquivo com todos os exemplos das funções de inteligência de tempo em aplicações práticas. Não deixe de baixar o arquivo para um melhor entendimento do que falamos aqui. Você pode baixar utilizando os links no início ou no fim deste artigo.

Inteligência de tempo com uma tabela de datas

 

Funções que avaliam expressões ao longo de um período de tempo

Este tipo de funções de inteligência de dados temporais avaliam uma expressão durante um período de tempo específico. São funções para simplificar e deixar suas expressões mais curtas. São todas fórmulas que podem ser substituídas pela função CALCULATE juntamente com outra função de inteligência de tempo.

 

TOTALMTD, TOTALQTD e TOTALYTD

Estas três fazem a mesma coisa, mas em período de tempos diferentes.

Como exemplo analisaremos a função TOTALMTD.

Estrutura da fórmula: TOTALMTD (<expressão>; <coluna_datas>)

Exemplo:

Esta fórmula traz o mesmo resultado da fórmula abaixo.

Mas é melhor utilizar a primeira por ser uma fórmula reduzida e com isso utilizamos menos recursos de memória. No exemplo acima, se colocar num gráfico diário, esta função irá somar as vendas acumulando dia a dia um novo valor. No arquivo que disponibilizamos você conseguirá ver este exemplo e outros na prática.

As funções TOTALQTD e TOTALYTD tem a mesma estrutura, mas fazem o acúmulo dos resultados por trimestre e por ano respectivamente. Temos um exemplo da TOTALYTD logo no começo deste artigo.

Dentro desta categoria existem também um grupo de funções que trabalham com balanços de abertura e fechamento. São funções com um apelo específico para área contábil e financeira, não vamos tratar em detalhes destas funções aqui. Coloquei abaixo o link direto ao site da Microsoft onde poderá saber os detalhes técnicos destas funções.

OPENINGBALANCEMONTH (<expressão>, <coluna_datas>)

OPENINGBALANCEQUARTER (<expressão>, <coluna_datas>)

OPENINGBALANCEYEAR (<expressão>, <coluna_datas>)

CLOSINGBALANCEMONTH (<expressão>, <coluna_datas>)

CLOSINGBALANCEQUARTER (<expressão>, <coluna_datas>)

CLOSINGBALANCEYEAR (<expressão>, <coluna_datas>)

Apenas explicando um pouco dos conceitos destas funções. Para alguns as explicações vão parecer meio obvias, mas é importante nivelar todos num mesmo patamar de conhecimento. As funções que começam com OPENING, de abertura, é baseado na última data do período anterior. Aquelas que começam com CLOSING, de fechamento, tratam a última data do período atual. O balanço de abertura para qualquer período é o mesmo que o balanço de fechamento do período anterior.

Há alguma das funções citadas e não detalhadas que queiram um maior detalhamento? Se sim deixe um comentário ao final neste artigo que daremos mais detalhes da função de inteligência de dados temporais solicitada.

Fonte: Office-Microsoft

Marcar como tabela de data. Entenda melhor.

Quando se aplica a configuração “Marcar como tabela de data” a uma tabela, o DAX automaticamente inclui uma função ALL sobre esta tabela em cada fórmula CALCULATE com um filtro sobre coluna utilizado dentro da expressão. Por exemplo, se marcar uma tabela de nome “Calendário” como tabela de data utilizando a coluna “Date” para isto, dá para escrever a seguinte expressão.

Automaticamente a lógica do DAX irá incluir uma função ALL para a tabela “Calendário”, removendo qualquer filtro das outras colunas da mesma tabela. Por trás a expressão ficaria assim.

Caso esteja utilizando a tabela Calendário com uma coluna de tipo de Data como chave primária para os relacionamentos, mesmo se não aplicar “Marcar como tabela de data” as funções de inteligência de tempo funcionarão normalmente. Isto porque é uma coluna de tipo Data no relacionamento.

Caso o relacionamento da tabela Calendário não seja a partir de uma coluna do tipo Data, aí sim será necessário utilizar a configuração “Marcar como tabela de data” para as funções de inteligência de tempo funcionarem. Ou então pode incluir manualmente a função ALL nas funções que irá utilizar em conjunto para que funcionem adequadamente.

Conclusão

As funções de inteligência do tempo são um dos grandes trunfos da linguagem DAX. Elas dão uma nova perspectiva no trabalho com datas dentro do Power BI ou Power Pivot, deixam esta atividade realmente mais inteligente.

Possibilitam comparativos e cálculos que não é possível com fórmulas de excel ou outras ferramentas de mercado. Deixam o Power BI ainda mais power.

Não deixe de baixar o arquivo do Power BI Desktop com a aplicação prática de todas as funções que falamos neste artigo. Com este arquivo é possível consultar a qualquer tempo como as funções de inteligência de dados temporais funcionam e com isso lhe garantir resolver suas dúvidas rapidamente. Aproveite e baixe o arquivo aqui.

 

Compartilhe este conteúdo nas suas redes sociais (utilize os botões abaixo) e ajude seus colegas a compreender melhor sobre o assunto. Ajude-nos também a espalhar bons conteúdos sobre o Power BI.

Tem dúvidas? Nos pergunte! Utilize a sessão de comentários deste artigo logo abaixo.

Até a próxima!

Neste artigo você encontrará, as melhores práticas que nós da uaiSmart consideramos para as atividades de importação de dados no Power BI.  Lembrando que essas recomendações servem também para o Power Pivot do Excel.

Nos seus modelos de dados no Power BI, considere sempre utilizar os nomes de forma intuitiva, padrão e quais colunas incluir. Isto lhe trará melhoras na interface e na performance deles.

Nem todas as práticas descritas poderão ser aplicadas a todos os modelos de dados. Será necessário então adaptar nossas sugestões conforme sua realidade. O mais importante é que você consiga passar sua mensagem em seus arquivos, então considere as vantagens e desvantagens de cada escolha.

 

Utilize nomes que façam sentido na importação de dados no Power BI

Tanto os nomes para as tabelas quanto para as colunas devem ser amigáveis, intuitivos e ter significado para quem utiliza o modelo.

Deve-se remover qualquer prefixo ou sufixo que existam nas tabelas ou colunas que dão origem aos dados importados. É comum ver prefixos como “tb”, “tbl”, “vw”. Não há necessidade destes na hora da importação de dados no Power BI. Assim é melhor ter uma tabela de nome “Clientes” do que “tb_Clientes”. Este nome pode ser necessário no banco de dados SQL, Oracle ou qualquer outro, para identificação e padronização, mas para o Power BI não. Quanto mais intuitivo e simples o nome melhor para identificar e trabalhar com ele.

Evite também abreviações, prefixos e sufixos nos nomes das colunas. Mas para casos de abreviações bastante conhecidas tudo bem, pois estas não causarão confusões. Exemplo, utilize “Total de Vendas” ao invés de “Ttl Vendas”, ou “# Vendas” ou “TotalVendas”. Você pode usar espaço, caracteres especiais ou letras com acentuação sem nenhum problema dentro da importação de dados no Power BI. A ideia é simplificar a vida de quem utiliza os modelos.

Nome da coluna na importação de dados no Power BI

 

Evite nomes repetidos ou parecidos nas colunas e medidas

Sempre carregue as colunas numéricas no modelo de dados utilizando nomes que não se confundam com as medidas. Caso não vá utilizar a coluna pura, oculte para que não apareça na Visualização de Relatório. Assim poderá criar à medida que utiliza aquela coluna com o nome que melhor descrever e não irá ficar repetindo, pois uma se manterá oculta.

Pense no nome da medida já de forma antecipada. Se quer apresentar o nome “Total de Vendas” como a soma de todas as vendas, então não use o nome como um nome de coluna. Se usar o nome de uma coluna como medida após a importação de dados no Power BI, este vai negar, pois não se pode ter o mesmo nome de coluna em medida.

Usar nomes tais como “Soma do Total de Vendas” para medidas não é uma boa solução. Nomes assim não soam bem.  Por exemplo, você pode importar o “Total de Vendas” como “Valor das Vendas” ou “ValorVendas” (sem espaços mesmo, já que vai ficar escondida). Assim crie a medida “Total de Vendas” a partir desta coluna e esta ficará à disposição do usuário.

 

Remova colunas desnecessárias na importação de dados no Power BI

Não mostre na visualização de relatórios uma coluna que não seja necessária para o modelo de dados do Power BI.

Mesmo que não saiba antecipadamente qual coluna será ou não útil para seu modelo. Durante a confecção do relatório você acabará descobrindo todas, mas mesmo assim tente mostrar somente aquelas necessárias. Após apurar que uma coluna não precisa ser mostrada, volte e oculte a mesma.

Com a redução de colunas expostas na visualização do relatório, reduz também a quantidade de memória utilizada pelo Power BI. Esta prática evita também expor colunas de informações sensíveis que são utilizadas somente por razões técnicas, tais como colunas de chaves numéricas, nomes de usuários, quem fez a última modificação, etc.

Menor número de colunas no processo de importação de dados no Power BI significa menor número de dependências entre tabelas físicas e relatórios. Evita assim também grandes necessidades de manutenções futuras em caso de mudança de base, por exemplo.

Colunas ocultas na importação de dados no Power BI

As colunas em cinza na imagem acima estão ocultas na Visualização do Relatório.

 

Divida as colunas de data e hora

No caso de uma coluna que tenha tanto a data quanto a hora juntas é melhor dividir em duas. Uma para Data e outra para Hora.

Uma coluna contendo data e hora contém dados mais complexos que exige mais do Power BI. Dividindo em duas colunas conseguirá economizar memória, vai melhorar a performance e deixar o modelo de dados mais fácil de usar.

Sabe trabalhar com mapas no Power BI? Não? Temos um e-book que desvenda todos os segredos dos mapas no Power BI. Clique na figura abaixo e baixe gratuitamente.

Banner aprenda a trabalhar com mapas no Power BI

 

Aplique a opção “Marcar como tabela de data” em tabelas com datas

As funções de inteligência de tempo têm melhor desempenho quando a tabela “Calendário” tem esta categorização. Em alguns casos de relacionamento isto se faz até mandatório para que o mesmo funcione. É o caso de coluna chave substituta.

Mas mesmo nos casos não obrigatórios é uma boa prática fazer a marcação. Assim a interface de usuário e outras funcionalidades do Power BI serão melhoradas e dará ao usuário uma melhor experiência na utilização do modelo.

 

Conclusão

Boas práticas de importação de dados no Power BI estão sempre surgindo, neste artigo disponibilizamos algumas. Caso você conheça outras deixe seu comentário abaixo que pesquisaremos e agregaremos no conteúdo. Caso também descubramos mais atualizaremos aqui.

Estas práticas se aplicam também se você é administrador de banco de dados SQL e irá disponibilizar a usuários de Power BI uma “View” do banco. Aplique estas práticas e o melhor é por “View” mesmo.

Este processo faz parte da parte de ETL, quer saber mais sobre este assunto leia o artigo: O que é ETL e sua importância para o Business Intelligence.

Compartilhe este conteúdo nas suas redes sociais (utilize os botões abaixo) e ajude seus colegas a compreender melhor sobre o assunto. Ajude-nos também a espalhar bons conteúdos sobre o Power BI.

Tem dúvidas? Nos pergunte! Utilize a sessão de comentários deste artigo logo abaixo.

Até a próxima!