|
Responder
|
| Autor | |
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Tema: Formatear Tabla Referencia CruzadaEnviado: 12/Octubre/2024 a las 12:46 |
|
Buenos días.
Después de migrar Access 2010 a 2021 LTSC y realizar algunos ajustes, casi todo funciona perfectamente, pero un problema que no acabo de resolver es el de las Tablas Dinámicas. Investigando un poco, acabé encontrando información que Microsoft había quitado de las nuevas versiones las Tablas Dinámicas. Con todo esto he tenido que pasarlas a Tablas de Referencia Cruzada. Y aquí viene mi duda. Lo primero decir que funcionan bien, pero existe un pequeño detalle que no me gusta. La tabla tiene los campos Concepto, MesPago e Importe. Antes con la Tabla Dinámica hacía un filtro a través de dos campos (FechaDesde, FechaHasta), y me aparecía los Conceptos por MesPago y su Importe total solo del periodo filtrado. Ahora, con la Tabla de Referencia Cruzada me muestra la fila con los Conceptos agrupados, las columnas con el Importe sumado del periodo solicitado (FechaDesde, FechaHasta), pero además muestra el resto de los meses con las columnas en blanco. Cómo puedo decirle que solamente muestre las columnas del periodo solicitado (FechaDesde, FechaHasta)? |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 12/Octubre/2024 a las 13:24 |
|
Hola,
Las tablas de referencias cruzadas disponen de una propiedad PIVOT que permite definir los títulos que se mostrarán (en tu caso los meses). Si construyes tu SQL desde VBA deberás crear una cláusula PIVOT mediante algún bucle que recorra del primero al último valor a mostrar. Para ver como funciona una clausula PIVOT haz la prueba en u a consulta que ya tengas creada. En las propiedades de la consulta, es la llamada "Encabezados de columna" Imagina que tienes una consulta dónde el campo "agrupación" es encabezado de fila, el Id es el valor y el Mes([CampoFecha]) es encabezado de columna. En ese caso puedes establecer los encabezados como 1;2;3;4;5;6;7;8;9;10;11;12 de forma que se mostrarán si o si las 12 columnas, tengan o no datos. Un saludo
|
|
![]() |
|
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Enviado: 12/Octubre/2024 a las 14:38 |
|
Gracias. Después de ver las propiedades de la consulta, observo que aparecen los 12 meses en letras. Si no entiendo mal, dices de cambiarles el nombre por 1, 2, 3..., pero como bien apuntas, ...se mostrarán si o si las 12 columnas, tengan o no datos. Eso es exactamente lo que no deseo. Deben aparecer solamente las columnas del periodo solicitado. Un saludo
|
|
![]() |
|
mounir
Colaborador
Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6521 |
Enviado: 12/Octubre/2024 a las 20:13 |
|
Hola!
Has probado crear una consulta simple de la tabla, aplicar ahí el filtro y luego de la consulta resultante crear la consulta de referencias cruzadas. Así al ejecutar la consulta de referencias cruzadas te pide que introduzcas los meses. A ver si te funciona. |
|
|
Un Saludo.
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 13/Octubre/2024 a las 09:21 |
|
Se trata de leer entre líneas.
En mi primera línea digo si construyes tu SQL desde VBA. y luego te explico como forzar los encabezados en una consulta para que veas la SQL resultante. Se trata de que escribas un código que genere esa clausula PIVOT. Si lo quieres hacer sin VBA, la propuesta de mounir es una muy buena vía. Un saludo
|
|
![]() |
|
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Enviado: 13/Octubre/2024 a las 11:00 |
|
Gracias.
La solución de Mounir es la que estoy usando. Es decir, la tabla de referencia cruzada está basada en una consulta simple de dos tablas con el filtro. Respecto a crear un SQL, no tengo mucha idea. Podríamos partir del creado en la propia consulta?. La consulta de Ref. Cruz. está basada, como digo, en la consulta C_Ingresos: Docmd.RunSQL (TRANSFORM Sum(C_Ingresos.IMPORTE) AS SumaDeIMPORTE SELECT C_Ingresos.CONCEPTO, Sum(C_Ingresos.IMPORTE) AS [Total de IMPORTE] FROM C_Ingresos GROUP BY C_Ingresos.CONCEPTO PIVOT Format([MES],"mmm") In ("ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"); Un saludo. |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 13/Octubre/2024 a las 13:13 |
|
Hola,
Las consultas de selección (SELECT y TRANSFORM) no se abren con DoCmd.RunSQL. Necesitas crear una consulta (CreateQueryDef) y después abrirla (DoCmd.OpenQuery) o asignarla como el objeto origen de un subformulario. Un saludo
|
|
![]() |
|
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Enviado: 15/Octubre/2024 a las 16:37 |
|
Ok
Hasta que me ponga a estudiar un poco las consultas SQL, como la solución de Mounir es la que estoy usando (subformulario basado en la tabla de referencia cruzada, filtrado por los campos FechaDesde, FechaHasta del formulario), y los datos aparecen de forma correcta (aunque aparezcan todos los meses). Cómo puedo cambiar el tamaño de la columna, por ejemplo de un campo, en la hoja de datos (subformulario SubForm_1) para poder ver todos los meses. El código que utilizo para asignar la fuente al subformulario (SubForm_1) es: 'F_Ventas_TRC es el formulario basado en la tabla de referencia cruzada Me.SubForm_1.SourceObject = "F_Ventas_TRC" Un saludo. |
|
![]() |
|
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Enviado: 21/Octubre/2024 a las 15:11 |
|
Buenos días.
Después de dar muchas vueltas, he podido modificar el tamaño de las columnas con ColumnWith al cargar el formulario. Pero una preguntita. Cómo puedo cambiar el estilo de fuente de los campos del formulario. He probado con "FontName" también al cargar el formulario pero no hace nada. Gracias y un saludo |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 21/Octubre/2024 a las 16:04 |
|
Hola,
Las propiedades para cambiar la fuente y su tamaño son DatasheetFontName y DatashetteFontHeight respectivamente. Esas propiedades aplican al objeto en su totalidad, no a los campos. Un saludo
|
|
![]() |
|
Nomada
Colaborador
Unido: 03/Julio/2011 Localización: España Estado: Sin conexión Puntos: 1759 |
Enviado: 21/Octubre/2024 a las 16:19 |
|
Perfecto.
Muchas gracias. Este hilo se puede cerrar satisfactoriamente. Pda. Voy a ponerme con la clausula PIVOT.
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |