Función dbusq en una consulta

En el día de ayer te realice otra inquietud que aun no contestas, aprovecho para hacerte otra, para ver si así me puedes ayudar con ambas (disculpe la molestia). Tengo una consulta donde tengo los campos mes, año, cantidad, costos totales, la idea es obtener en un campo calculado el dato de la cantidad del mes anterior, es decir que me quede algo así.
Los datos los tengo en una consulta de nombre prueba
Mes año cant costo mesant cantmesant
2 2010 100 3000 1 200
3 2010 150 2000 2 100
4 2010 300 2500 3 150
Todo esto es con el fin de poder calcular la variación porcentual entre la cantidad de un mes con la del mes anterior.
El problema ha sido para obtener el dato del mes anterior.   lo q se me ha ocurrido es utilizar la siguiente funcion en el campo de cantmesant  dbusq("[cant]";"[Prueba]";"[mes]=[mes]-1").
Pero esto no me funciona. Quisiera saber que estoy haciendo mal o simplemente si esto no me va a funcionar y siendo así cual seria la forma optima de hacerlo.

2 respuestas

Respuesta
1
Yo haría una subconsulta para calcular lo del mes anterior en la que pondría
xMes=siinm(Mes=1;Mes=12;Mes=Mes-1)
xAño=siinm(Mes=1;Año;Año=Año-1)
CantMesAnt=cant
Esta subconsulta la relacionaría con la que ya tienes por Mes->xMes Año->xAño y añadiría el campo CantMesAnt.
La relación hazla de la consulta que tu tenías a ésta de forma Unidirecional, es decir, con la flechita de las relaciones hacia la nueva subconsulta...
Buenos días experto, gracias por su respuesta anterior. Disculpa mi ignorancia, ¿pero cada una de las expresiones que anterior me mencionas son campos calculados de la subconsulta que realizo a través del generados de expresiones?, de no ser así por favor indicame como ingreso los parámetros que me brindaste en las nueva consulta. Muchas gracias por tu ayuda
Eso es, son los nombres de los campos que se te generan en las subconsultas. Cuando haces una consulta, puedes utilizar sus resultados como si de otras tablas se trataran para hacer nuevas consultas.
Digamos que las subconsultas, son las tablas de las que tiras para hacer la consulta final.
Buenas tardes expertos, resumo para ver si te entendí bien. Creo una subconsulta a partir de la consulta original. Lo que hago es que con el generador de expresiones empiezo a crear cada uno de los campos que me indicaste utilizando la función sin() luego las relaciono con lo que me dijiste. En este punto me surge otra inquietud, esto no me presenta problemas al restar el mes de enero de un año con el de diciembre del anterior, es decir, necesito restar los meses 1 de un año con el mes 12 de otro.
Muy buenas tardes experto, te voy a poner un poco más en contexto para que así me puedas ayudar un pocos más (disculpa la molestia). Trabajo para una empresa del sector agroindustrial la idea es realizar una interfaz con un aplicativo de inventarios que se maneja en una finca lechera. El aplicativo de inventarios tiene una tabla DBF denominada movimientos la cual tengo vinculada a access (en esta tabla se encuentra registrada la información fundamental que necesito). Yo realizo una consulta de dicha tabla vinculada de la cual extraigo los campos fecha, articulo, cantidades, unidad, costos. Ya en campos calculados extraigo el numero de la semana de la fecha del movimiento, lo mismo que el mes de la fecha y el año. Como yo tengo los consumos históricos día a día de los movimientos y los nuevos registros se van a actualizar automáticamente a la interfaz (porque la tabla de movimientos esta vinculada), la idea es a través de una consulta de la que ya hice calcular la variación por semanas, mensual y anual entre un rango de fechas que yo ingrese. La idea es dar esta interfaz en administración (la persona que la maneja no sabe nada de access, entonces la idea es darle un aplicativo que no sea si no apretar botones y se ejecute las consultas previamente diseñadas por nosotros). Entonces una de las consultas fundamentales (como ya lo mencione) es las variaciones de los costos. Inicialmente trabaje todo en tablas dinámicas (teniendo la experiencia de que en excel dichas tablas dinámicas me permiten calcular esta variación muy fácilmente, ya que tiene una opción de campo calculado que es mostrar como porcentaje de la diferencia del mes anterior), pero las tablas dinámicas de access no son tan funcionales como las de excel. Investigando me di cuenta que tenia que realizar este calculo manualmente en el diseño de la consulta que después mostraría como vista de tabla dinámica. Para realizar este calculo necesito tener al frente de la cantidad del mes actual la cantidad del mes anterior, lo mismo con las semanas y con los años. Como ya te explique todo (disculpa lo extenso), la idea es que me ayudes a incorporar lo que me dijiste en la respuesta anterior, a la consulta que ya te mencione.
Realice lo que me dijiste y no me saco datos en el campo de cantMesAnt. Te explicare como lo realice para ver si cometí un error en el camino. Tengo una consulta original denominada Prueba en ella tengo los campos año, mes, nomarticulo, cantidad_neta, unidad, costoTotal (Cabe aclara que esta consulta esta dentro de un rango de fechas), entonces necesito hacer la variación de la cantidad y del costo, te pregunte solo por uno porque me imagino que se utilizo la misma lógica para ambos. Cabe aclara que en esta consulta los tengo agrupados por año, mes, artnom, y los sumo por la cantidad y sumo el costo. (Esto lo hago para así totalizar cada producto por mes). Luego a partir de esta cree la subconsulta que me mencionaste. En el primer campo puese lo siguiente
xMes: SiInm(Prueba!MES=1;Prueba!MES=12;Prueba!MES=Prueba!MES-1)
en el segundo campo puse
xAño: SiInm(Prueba!MES=1;Prueba!AÑO;Prueba!AÑO=Prueba!AÑO-1)
y en el tercero puse
CantMesAnt: Prueba!SumaDeCANTIDAD_NETA
Esta consulta la guarde con el nombre de "otro"
Luego en otra consulta relacione la original "Prueba" con la "otro" de la siguiente manera. El campo año de prueba lo uni con el campo año de otro. Y campo mes de prueba lo uni con el campo xMes de otro. Utilice el tipo de combinación N° 2 q es la q hace q la flechita quede hacia la nueva subconsulta. En la nueva consulta puse el campo año de la consulta prueba, mes de prueba, artnom de prueba, cantidad_neta de prueba y CantmesAnt de otro. Pero al realizarlo no me muestra valor alguno en este ultimo valor.
No se si fui muy enredado para explicarme, de ser así por favor pídeme la aclaración. Muchas gracias por tu ayuda y de nuevo disculpa la molestia
En la consulta "otro", ¿tienes datos dentro del mes en el campo CantMesAnt?
Primero comprueba eso
En un principio todo lo que leo que has hecho esta ok...
Si quieres, mandame por correo una copia de la BD con la tabla Importada en vez de Vinculada de lo de la lecha, y le hecho un vistazo, porque a priori todo lo que veo está bien...
Cuando me mandes el *.mdb, renómbralo a *.mdb00 por ejemplo, porque si no el correo piensa que es un virus
Muchas gracias por tu ayuda. Creo que ahora lo que me dijiste si me funciono. Pero tengo otra inquietud espero puedas ayudarme. Ya realice la tabla dinámica que quería, en la misma hice un campo calculado en la cual calculo la variación mes a mes, pero tengo un problema con la división por cero e intento hacer una validación utilizanto un "si" en el campo calculado pero no me funciona. Mi inquietud es ver si en un campo calculado de una tabla dinámica de excel se pueden utilizar fórmulas lógicas, para así utilizar la mismas para hacer la validación por cero.
Me imagino que te refieras a Access no a excel cuando preguntas. La respuesta es si.
=siinm(CondicionLogica;ValorTrue;ValorFalse)
Si quieres que te ayude exactamente con la fórmula, pégamela aquí y la echamos un vistazo...
Muy buenos días experto. Exactamente te preguntaba por access, muchas gracias. Te cuento, yo he utilizado fórmulas lógicas como la que me indicas en tablas dinámicas de excel para realizar la validación por cero, el hecho es que he intentado hacer lo mismo en una tabla dinámica de access y no he podido. He intentado poniendo el igual y la fórmula y nada. Sin el igual y la fórmula y nada.
[Measures].[Total2]= Es la forma en que el sistema ingresa en el campo calculado un campo que hace referencia al campo suma del costo actual
[Measures].[Total13]=Es la forma en que el sistema ingresa en el campo calculado un campo que hace referencia al campo suma del costo anterior
la fórmula que estoy poniendo es la siguiente.
siinm([Measures].[Total13]="";0;([Measures].[Total2]-[Measures].[Total13])/[Measures].[Total13])
El mensaje de error que sale es el siguiente: No se puede procesar la consulta: o error de la fórmula-error de sintaxis-el testigo no es válido: " siinm^(^[Measures].[Total13]
Espero puedas experto solucionar mi inquietud. Ya sea encontrar el error en la formulación de la lógica o decirme simplemente si se puede o no utilizar lógica en un campo calculado de una consulta en vista tabla dinámica de access.
PDT: no se si te sirva de algo, el campo calculado no es hecho en la vista de diseño de la consulta, es hecho en la tabla dinámica. De antemano te cuento que ya intente hacer la variación como un campo calculado en la vista de diseño pero no me sirvió porque en los subtotales de la tabla dinámica me suma las varaciones, por esta razón tuve que hacerla directamente en la tabla. De antemano muchas gracias por su ayuda.
Prueba a poner esto a ver si te funciona, aunque no te aseguro que sea la solución, si no probamos otra cosa...
nz(ValorAComprobar;ValorQueQueremosquesalgasiesNulo)
ResultadoSalida:siinm(nz([Measures].[Total13];"")="";0;([Measures].[Total2]-[Measures].[Total13])/[Measures].[Total13])
Ya me contaras
Hola buenas tardes experto, te agradezco inmensamente tu ayuda, te cuento que lo que me recomentdas ya lo había utilizado y no me había funcionado. Al final lo que hice fue ingeniármelas para generar una conexión ODBC entre mi base de datos y excel, para así vincular mi consulta de access a una tabla dinámica en excel (q me es mucho más familiar). Pero en este punto tengo otra inquietud, con la cual espero me puedas ayudar. Ejecuto la consulta desde un botón de access, esta me ejecuta una macro y me abre el archivo de excel donde tengo la tabla dinámica. Mi inquietud es la siguiente: se abrir el archivo de excel, pero quisiera saber como hago para abrirlo en una hoja especifica. El código q actualmente estoy utilizando es:
Private Sub Comando4_Click()
Dim abrir As Long
On Error GoTo Err_Comando0_Click
    Dim stDocName As String
    DoCmd.SetWarnings (warningsoff)
    stDocName = "VARIACIONSEM"
    DoCmd.RunMacro stDocName
    DoCmd.SetWarnings (warningsOn)
    abrir = Shell("excel.exe C:\CONSULTA_VARIACIONSEM", vbMaximizedFocus)
Exit_Comando0_Click:
    Exit Sub
Err_Comando0_Click:
    MsgBox Err.Description
    Resume Exit_Comando0_Click
End Sub
Quisiera q me indicaras de q forma ingreso el nombre de la hoja en la ruta especificada. Muchas gracias de antemano por tu ayuda.
Lo siento, pero no se cual es la función que habré una hoja determinada en excel a través del comando Shell.
Intenta buscar algún ejemplo en google.
Espero haberte ayudado aunque no haya solucionado completamente tu problema
Respuesta
1
Si no contesto es porque sencillamente no abro a diario la web, y normalmente eso sucede fines de semana y festivos.
La otra pregunta ya ha sido respondida. Si lo prefieres seguimos solo un hilo de conversación.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas