Saturday 15 July 2017

Mudar O Acesso Médio À Ms


Eu tenho uma produção de tabela que contém a seguinte estrutura: Eu tenho dados para cada representante de 112011 a 812013. O que eu quero ser capaz de fazer é criar uma média móvel de 12 meses começando 112012 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. Solicitado 10 de outubro 13 às 14: 47Avg Função Calcula a média aritmética de um conjunto de valores contidos em um campo especificado em uma consulta. O espaço reservado expr representa uma expressão de cadeia que identifica o campo que contém os dados numéricos que você quer em média ou uma expressão que executa um cálculo usando os dados nesse campo. Operandos em expr podem incluir o nome de um campo de tabela, uma constante ou uma função (que pode ser intrínseca ou definida pelo usuário, mas não uma das outras funções agregadas de SQL). A média calculada por Média é a média aritmética (a soma dos valores divididos pelo número de valores). Você poderia usar Avg. Por exemplo, para calcular o custo médio do frete. A função Avg não inclui nenhum campo Nulo no cálculo. Você pode usar Avg em uma expressão de consulta e na propriedade SQL de um objeto QueryDef ou ao criar um objeto de conjunto de registros com base em uma consulta SQL. Cálculo médio móvel Cálculo médio móvel Cálculo médio móvel Estou tentando calcular uma média móvel para uma série de dados. Eu quero gerar a média móvel para cada ponto dentro dos dados, para mostrar em um gráfico. De qualquer forma, abaixo é um exemplo do MS Support. Eu segui para a carta, mas o meu não dá uma média móvel. Ele repete o mesmo ponto de dados repetidamente (o primeiro ponto de dados). Então, eu não acredito que a função é encontrar o início na linha MyRST. Seek, portanto, apenas retornando o primeiro ponto de dados. Finalmente (talvez fará isso realmente fácil) Estou confuso sobre como os índices funcionam. Eu pensei que você só poderia ter uma chave primária, mas, aparentemente, você pode criar várias restrições de campo. Tentei fazer isso com a seguinte consulta de definição de dados: ALTER TABLE Tabela1 ADD CONSTRAINT NoDupes UNIQUE (CurrencyType, TransactionDate) Desculpe o tamanho dessa publicação. Eu aprecio sua ajuda. A seguinte função de exemplo calcula as médias móveis com base em uma tabela com uma chave primária de campo múltiplo. Os valores semanais das moedas estrangeiras são utilizados para este exemplo. Para criar a função de exemplo, siga estas etapas: Crie a seguinte tabela e salve-a como Tabela1: Tabela: Tabela1 --------------------------- -------------- Nome do campo: Tipo de moeda Tipo de dados da chave primária: Tamanho do campo de texto: 25 Nome do campo: Tipo de dados principal do TransactionDate: Formato do DateTime: Data curta Nome do campo: Taxa Tipo de dados: moeda Locais decimais: 4 Veja a tabela na exibição da folha de dados e insira os seguintes valores: Taxa do tipo CurrencyType TransactionDate ------------------------------- ------------- Ien 8693 0.0079 Ien 81393 0.0082 Ien 82093 0.0085 Ien 82793 0.0088 Ien 9393 0.0091 Mark 8693 0.5600 Mark 81393 0.5700 Mark 82093 0.5800 Mark 82793 0.5900 Mark 9393 0.6000 Abra um novo módulo e digite o Seguintes funções: Função MAvgs (Períodos como Inteiro, StartDate, TypeName) Dim MyDB como DATABASE, MyRST Como conjunto de registros, MySum como Double Dim i, x Set MyDB CurrentDb () Definir MyRST MyDB. OpenRecordset (Tabela1) Em Error Resume Next MyRST. Index PrimaryKey x Periods - 1 loja ReDim (x) MySum 0 para i 0 Para x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Estas duas variáveis ​​devem estar na mesma ordem que os campos da chave primária em sua tabela. Store (i) MyRSTRate Se eu lt x Então StartDate StartDate - 7 O 7 aqui assume dados semanais 1 para dados diários. Se StartDate lt 8693 Então MAvgs Null: Exit Function 8693 é substituído pela data mais antiga dos dados em sua tabela. MySum Store (i) MySum Next I MAvgs Periodos MySum MyRST. Fechar End Function Crie a seguinte consulta com base na tabela Table1: Query: Query1 --------------------- ---------------------------------- Campo: FieldType Campo: TransactionDate Campo: Campo de Taxa: Expr1: MAvgs (3 , TransactionDate, CurrencyType) NOTA: Esta consulta gerará uma média móvel de três semanas dos dados da Taxa. Para calcular uma média móvel mais longa ou mais curta, altere o número 3 na coluna Expr1 de consultas para o valor que deseja calcular. Execute a consulta. Observe que você vê a seguinte média móvel de três semanas para cada moeda. Um valor nulo indica que não havia valores anteriores suficientes para calcular a média da semana. CurrencyType TransactionDate Rate Expr1 Mark 080693 0,5600 Mark 081393 0,5700 Mark 082093 0,5800 0,57 Mark 082793 0,5900 0,58 Mark 090393 0,6000 0,59 Iene 080693 0,0079 Ien 081393 0,0082 Ien 082093 0,0085 0,0082 Ien 082793 0,0088 0,0085 Ien 090393 0,0091 0,0088 RE: Cálculo médio móvel dhookom (Programador) 28 10 de junho 21:15 Quantos anos tem esse código. Não usa explicitamente DAO e não menciona que isso não funcionará com tabelas vinculadas. Dim MyDB como DAO. Database, MyRST como DAO. Recordset. Eu usaria uma subconsulta em vez de um conjunto de registros. Pode parecer algo como: SELECT CurrencyType, TransactionDate, Rate, (SELECT Avg (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType AND A. TransactionDate ENTRE B. TransactionDate - 14 AND B. TransitionDate) FROM Table1 A RE: Moving Cálculo médio que é realmente perfeito. Eu realmente aprecio sua ajuda. No entanto, o código que você deu é calcular a média móvel direta de 14 dias (colocando a média móvel no registro para o dia 1 da média, onde eu queria que ela fosse uma média retroativa, colocada no registro 14). Eu mudei um pouco para o seguinte e parece estar funcionando SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType AND B. TransactionDate ENTRE A. TransactionDate - 14 E A. TransactionDate) AS Expr1 FROM Table1 AS A Você pode ver, tudo o que fiz foi troca A para B na cláusula where. Esta é uma grande ajuda para mim e eu realmente aprecio isso. Eu não vi codificação assim antes, e, honestamente, eu realmente não entendo isso. Não sei como o SQL entende o que B e A são. Eu suponho que eles estão criando algum tipo de referência alternativa ao Table1. Se você pode dar qualquer orientação, eu realmente apreciaria isso. Além disso, talvez alguma referência ao material que eu possa observar Estou sempre muito animado para aprender algo novo sobre o VBASQL, e eu realmente aprecio sua ajuda RE: Cálculo médio móvel PHV (MIS) 29 Jun 10 12:22 entende o que B e A São eles são alias es RE: Cálculo médio móvel Obrigado, PHV. Já faz melhor sentido RE: Cálculo médio em movimento joshery420 (TechnicalUser) 6 Jul 10 15:06 Uau, nunca olhei para o SQL view antes. Supremamente útil. Estou tentando obter esse código para funcionar no meu próprio conjunto de dados e estou preso em uma questão específica. Pd2004, não tenho certeza se o novo código de subconsulta funcionou o mesmo que o seu código VBA antigo ou não, mas com meus dados ainda mostra a média contínua, mesmo que não haja dias suficientes para criar esse tamanho de média. por exemplo. Se eu estiver executando uma média contínua de 7 dias, o dia 1 mostra os mesmos dados na coluna 7DayAvg como faz na coluna diária de dados. O dia 2 mostra a média dos dias 1 e 2, etc. Vocês também sabem como consertar isso por acaso Também, obrigado pela excelente dica de código PHV. RE: Cálculo médio em movimento joshery420 (TechnicalUser) 6 Jul 10 15:08 Woops, obrigado a agradecer a dhookom pela dica de código, não PHV. Mas oi, obrigado a ambos. XD RE: Cálculo médio móvel Eu deixarei as melhores soluções para os profissionais aqui, mas você pode ver na minha publicação original como o exemplo da Ajuda da Microsoft tenta lidar com isso. Aqui está o código: Se StartDate lt 8693 Então MAvgs Null: Exit Function 8693 é substituído pela data mais antiga dos dados em sua tabela. Eles estão apenas saindo da função se a data não corresponder aos critérios. Não sei se você poderia incorporar algo assim no código de alias fornecido pelo dhookem. Eu não gosto da sua maneira de lidar com isso, e eu suspeito que o dhookem fornecerá uma solução muito mais elegante. Para os meus propósitos, o problema que está descrevendo não é uma preocupação, mas estarei interessado em ver quaisquer soluções. RE: cálculo da média móvel dhookom (Programador) 6 Jul 10 17:05 Você pode tentar usar IIf () para testar a contagem do número de registros. Cuidado: o código do bloco de notas não testado segue: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF ((SELECT Count (Taxa) FROM Table1 C WHERE A. CurrencyType C. CurrencyType AND C. TransactionDate ENTRE A. TransactionDate - 14 AND A. TransactionDate) 7, (SELECT Média (Taxa) FROM Tabela1 B WHERE A. CurrencyType B. CurrencyType AND B. TransactionDate ENTRE A. TransactionDate - 14 AND A. TransactionDate), Nulo) AS Expr1 FROM Table1 AS A RE: Calculadora média móvel

No comments:

Post a Comment