Sql 12 month moving average


Eu tenho uma produção de tabela que contém a seguinte estrutura: Eu tenho dados para cada representante de 112017 a 812017. O que eu quero ser capaz de fazer é criar uma média móvel de 12 meses começando 112017 para cada representante, da seguinte forma: onde cada linha representa A média móvel de 12 meses para o referido representante no horário indicado. Encontrei alguns exemplos que estavam vagamente próximos e os tentei sem sucesso. Parece que a adição de um grupo por componente representante é a principal saída de outros exemplos. Isso é tão longe quanto eu consegui: Essa consulta parece puxar uma média geral ou uma soma, uma vez que não há agrupamento na subconsulta correlacionada. Quando eu tento agrupar, recebo um erro que só pode retornar ao máximo uma linha. Perguntou 10 de outubro 13 às 14: 47 Agora eu quero um gráfico mostrando esta média móvel de 12 meses nos últimos 12 meses, ou seja, no eixo horizontal nos últimos 12 meses e no eixo vertical a porcentagem de doença. Eu criei um conjunto de dados chamado Last12Months, mas é claro que isso é errado, p. Para a porcentagem de doença em média móvel de julho de 2018, a média móvel precisa das porcentagens de doença de agosto de 2009 até julho de 2018. No entanto, ao usar um conjunto de dados que contém os últimos 12 meses, as porcentagens de doença para antes de julho de 2018 não estão disponíveis para calcular a mudança Média de julho de 2018. Você poderia dar mais explicações para isso, você pode fornecer algum layout de amostra de relatório para limpar seu requisito, para o seu último parágrafo, parece que deseja dar um filtro ao grupo de categorias no gráfico para mostrar os últimos 12 últimos Mês, certo se for esse o caso, acho que você pode usar a função Hoje em serviços de relatórios para obter o ano e o mês atual, então use este ano para subtrair 1, você terá os últimos 12 meses. Se eu entendê-lo mal, sinta-se à vontade para nos informar. Obrigado, Challen Fu Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcar se não fornecem ajuda. Marcado como resposta por HennieErgon sexta-feira, 19 de agosto de 2017 11:14 am terça-feira, 16 de agosto de 2017 5:17 AM IIf (Mês (hoje ()) lt 10, (Ano (Hoje ()) - 2) amp quotM0quot amp Month (Hoje () (2) amp quotMquot amp Month (today ())) IIf (Month (today ()) lt 10, Year (Today ()) amp quotM0quot amp (Mês (hoje () (1)) Ano (Today ()) amp quotMquot amp (Mês (hoje ()) - 1)) Marcado como resposta por Challen Fu Moderador sábado, 20 de agosto de 2017 12:50 Editado por HennieErgon segunda-feira, agosto 22, 2017 6:18 A ordem correta da fórmula Sexta-feira, 19 de agosto de 2017 11:12 Agora eu quero um gráfico mostrando essa média móvel de 12 meses nos últimos 12 meses, ou seja, no eixo horizontal nos últimos 12 meses e em O eixo vertical o percentual de doença. Eu criei um conjunto de dados chamado Last12Months, mas é claro que isso é errado, p. Para a porcentagem de doença em média móvel de julho de 2018, a média móvel precisa das porcentagens de doença de agosto de 2009 até julho de 2018. No entanto, ao usar um conjunto de dados que contém os últimos 12 meses, as porcentagens de doença para antes de julho de 2018 não estão disponíveis para calcular a mudança Média de julho de 2018. Você poderia dar mais explicações para isso, você pode fornecer algum layout de amostra de relatório para limpar seu requisito, para o seu último parágrafo, parece que deseja dar um filtro ao grupo de categorias no gráfico para mostrar os últimos 12 últimos Mês, certo se for esse o caso, acho que você pode usar a função Hoje em serviços de relatórios para obter o ano e o mês atual, então use este ano para subtrair 1, você terá os últimos 12 meses. Se eu entendê-lo mal, sinta-se à vontade para nos informar. Obrigado, Challen Fu Lembre-se de marcar as respostas como respostas se elas ajudarem e desmarcar se não fornecem ajuda. Marcado como resposta por HennieErgon sexta-feira, 19 de agosto de 2017 11:14 am terça-feira, 16 de agosto de 2017 5:17 AM Obrigado pela resposta. Eu fiquei com filtro na categoria de data, mas depois tenho outros problemas. Anexei um exemplo. Como você pode ver meu formato de data é como 2009M09. Mas para filtrar nos últimos 12 (ou 24) meses, eu tenho que dividir ano e mês. No entanto, como você pode ver no exemplo, por exemplo, os 2009M10, 2009M11 e 2009M12 são omitidos, porque pensa que 10, 11 em 12 são inferiores a 9. Quarta-feira, 17 de agosto de 2017 9:46 AM Como você me disse, Eu fiz um filtro na categoria YearMonth: IIf (Month (today ()) lt 10, (Year (Today ()) - 2) amp quotM0quot amp Month (today ()), (Year (Today ()) - 2) Amp quotMquot amp Month (today ())) IIf (Month (today ()) lt 10, Year (Today ()) amp quotM0quot amp (Month (today ()) - 1), Year (Today ()) amp quotMquot amp (Mês (hoje ()) - 1)) Marcado como resposta pelo Moderador do Challen Fu Sábado, 20 de agosto de 2017 12:50 Editado por HennieErgon segunda-feira, 22 de agosto de 2017 06:18 correto ordem de fórmula sexta-feira, 19 de agosto, 2017 11:12 AMRolling 12 Months Average em DAX A computação da média contínua de 12 meses no DAX parece uma tarefa simples, mas esconde alguma complexidade. Este artigo explica como escrever a melhor fórmula evitando armadilhas comuns usando funções de inteligência de tempo. Começamos com o modelo usual de dados AdventureWorks, com produtos, vendas e tabela de calendário. O Calendário foi marcado como uma tabela de calendário (é necessário trabalhar com qualquer função de inteligência do tempo) e nós construímos uma hierarquia simples ano-mês-data. Com esta configuração, é muito fácil criar uma primeira tabela dinâmica mostrando vendas ao longo do tempo: ao fazer análise de tendências, se as vendas estiverem sujeitas à sazonalidade ou, em geral, se você deseja remover o efeito de picos e queda nas vendas, A técnica comum é a de calcular o valor em um determinado período, geralmente 12 meses, e a média. A média móvel em 12 meses fornece um indicador suave da tendência e é muito útil em gráficos. Dado uma data, podemos calcular a média móvel de 12 meses com esta fórmula, que ainda possui alguns problemas que resolveremos mais tarde: O comportamento da fórmula é simples: calcula o valor de Vendas depois de criar um filtro no calendário que Mostra exatamente um ano completo de dados. O núcleo da fórmula é o DATESBETWEEN, que retorna um conjunto inclusivo de datas entre os dois limites. O menor é: lendo-o do mais íntimo: se estamos mostrando dados por um mês, digamos, julho de 2007, tomamos a última data visível usando LASTDATE, que retorna o último dia em julho de 2007. Então, usamos NEXTDAY para tomar o primeiro De agosto de 2007 e finalmente usamos SAMEPERIODLASTYEAR para mudar de volta um ano, produzindo 1 de agosto de 2006. O limite superior é simplesmente LASTDATE, ou seja, final de julho de 2007. Se usarmos esta fórmula em uma tabela dinâmica, o resultado parece ser bom, mas nós Tem um problema para a última data: de fato, como você pode ver na figura, o valor é calculado corretamente até 2008. Então, não há valor em 2009 (o que é correto, não temos vendas em 2009), mas existe Um valor surpreendente em dezembro de 2018, onde nossa fórmula mostra o grande total em vez de um valor em branco, como seria de esperar. Na verdade, em dezembro, o LASTDATE retorna o último dia do ano e NEXTDAY deve retornar o 1 de janeiro de 2017. Mas NEXTDAY é uma função de inteligência do tempo e espera-se que retornem conjuntos de datas existentes. Este fato não é muito evidente e vale mais algumas palavras. As funções de inteligência do tempo não executam matemática nas datas. Se você quiser tomar um dia após uma determinada data, você pode simplesmente adicionar 1 a qualquer coluna de data e o resultado será no dia seguinte. Em vez disso, as funções de inteligência do tempo mudam os conjuntos de datas de ida e volta ao longo do tempo. Assim, NEXTDAY adquire a sua entrada (no nosso caso uma tabela de uma única linha com o 31 de dezembro de 2018) e desloca-a um dia depois. O problema é que o resultado deve ser 1 de janeiro de 2017, mas, como a tabela do Calendário não contém essa data, o resultado é BLANK. Assim, nossa expressão calcula as vendas com um limite inferior em branco, o que significa o início dos tempos, resultando como resultado do grande total de vendas. Para corrigir a fórmula, basta alterar a ordem de avaliação do limite inferior: como você pode ver, agora NEXTDAY é chamado após a mudança de um ano de volta. Desta forma, nós levamos 31 de dezembro de 2018, movê-lo para 31 de dezembro de 2009 e levamos no dia seguinte, que é 1 de janeiro de 2018: uma data existente na tabela do calendário. O resultado é agora o esperado: neste ponto, precisamos apenas dividir esse número em 12 para obter a média móvel. Mas, como você pode facilmente imaginar, nem sempre podemos dividi-lo em 12. De fato, no início do período não há 12 meses para agregar, mas um número menor. Precisamos calcular o número de meses para os quais há vendas. Isso pode ser feito usando a filtragem cruzada da tabela do calendário com a tabela de vendas depois de aplicarmos o novo contexto de 12 meses. Definimos uma nova medida que calcula o número de meses existentes no período de 12 meses: você pode ver na próxima figura que a medida Mess12M calcula um valor correto: Vale ressaltar que a fórmula não funciona se você escolher um período Mais de 12 meses, porque o CalendarMonthName possui apenas 12 valores. Se você precisar de períodos mais longos, você precisará usar uma coluna YYYYMM para poder contar mais do que 12. A parte interessante desta fórmula que usa filtragem cruzada é o fato de que ele calcula o número de meses disponíveis mesmo quando você filtra usando outro atributos. Se, por exemplo, você selecionar a cor azul usando um cortador, as vendas começam em julho de 2007 (não em 2005, como acontece com muitas outras cores). Usando o filtro cruzado em Vendas, a fórmula calcula corretamente que, em julho de 2007, há um único mês de vendas disponíveis para o Blue: neste ponto, a média móvel é apenas um DIVIDE: quando usamos isso em uma tabela dinâmica, nós ainda Tem um pequeno problema: de fato, o valor é calculado também por meses para os quais não há vendas (ou seja, meses futuros): isso pode ser resolvido usando uma declaração IF para evitar que a fórmula mostre valores quando não há vendas. Eu não tenho nada contra IF, mas, para o desempenho viciado em você, sempre vale a pena lembrar que IF pode ser um assassino do desempenho, porque poderia forçar o mecanismo de fórmula DAX a entrar. Neste caso específico, a diferença é insignificante, mas , Como regra geral, a melhor maneira de remover o valor quando não há vendas é confiar em fórmulas de mecanismo de armazenamento puro como esta: Comparando um gráfico usando o Avg12M com outro que mostra as Vendas, você pode facilmente apreciar como a média móvel Descreve as tendências de uma maneira muito mais limpa: mantenha-me informado sobre os próximos artigos (boletim informativo). Desmarque para baixar livremente o arquivo.

Comments