Hola!
Hay forma de relacionar 2 dimensiones?
El caso puntual para lo que me interesa es lo siguiente:
Una tabla con Sectores (donde los usuarios podrán acceder a X sector de acuerdo al perfil de datos que se les asigne).
Una tabla con Items (estos items se definen con un “propietario” que es un sector X).
Sector1
Item11
Item12
Sector2
Item21
Sector3
Item31
Definí una dimension para los sectores, de forma tal que el Usuario1 pueda acceder al Sector1 y Sector3, pero no al Sector2.
El tema es que dicho Usuario1, puede acceder al Item11, pero no al Item12, y debe acceder al Item31 dentro del Sector3.
Por lo tanto, definí una dimensión nueva para los Items, que no está relacionada con la anterior.
En el perfil de datos que asociaré al Usuario1, le indiqué que podía acceder a los 2 sectores, 1 y 3.
Y por otro lado, impuse las restricciones para que accediera al item11, al item12, y al item31.
Es decir, el objetivo estaría cumplido.
Sin embargo sería algo ideal poder relacionar y crear una dimensión asociada al resultado de otra dimension, porque como está definido, yo podría haber asociado al Usuario1 a los sectores 1 y 3, y solo darle acceso al item21 (claro que nunca llegaría y no serviría para nada, pero, se podría hacer).
De aquí surgen 2 preguntas:
Hay alguna forma de anidar las dimensiones?
Si la respuesta fuera no, en la descripción de los Items, que por ahora solo tengo la columna nombre, puedo asociar la columna nombre del sector?, podría poner id_sector,nombre, pero la idea sería formatearla con algo como: sectores.nombre||’ - '||nombre, pero no me lo permite. Capaz hay alguna forma de codificarlo que se me escapa.
segun entiendo hay una FK entre Sectores e Items, quizas lo que deberias tener en ese caso es a la tabla de Items colocada como gatillo directo.
Por otra parte, los items tienen peso suficiente como para ser una dimension por si solos?.. es decir, puedo filtrar por items y nada mas, o siempre tengo que pasar por el sector?
Si hay largo camino de 3 o 4 tablas con un caminito largo entre sectores e items. Y tengo definido en la dimension de sectores, este camino como gatillo directo.
Los items tienen peso propio, por eso defino también una dimensión para ellos.
La idea es que más allá de los items, X usuario, ni se entere que sectores existen excepto el que le fue asignado, y luego en ese sector, solo pueda acceder a los items que corresponden dentro de ese sector, que quizá no sean todos.
Solucionado está, con 2 dimensiones y mucho cuidado al definir los perfiles de datos.
Capaz puede quedar como sugerencia para la versión 4.x, jeje.
Si los items tienen peso propio dentro del sistema, es la forma correcta de solucionarlo.
Por otro lado y con respecto al tema de relacionar las dimensiones, de alguna forma lo estas haciendo mediante los gatillos indirectos, es tu forma de limitar ambas cosas al mismo tiempo.
Ademas, aun si hubiera alguna manera mas explicita de relacionar las dimensiones, tendrias que seguir fijando valores en toba_usuarios para ambas y por tanto, tener el mismo cuidado.
Bueno, ahí te cambio la consulta entonces. Pero porque no entiendo bien la función de los gatillos indirectos.
Es decir, los directos, si, metés el camino de todo lo que va a ser filtrado por la dimensión.
Pero los indirectos? tenés en mente algún caso práctico? o bien, como lo aplicaría en mi caso?
No los uso, porque no lo entiendo… jeje…
Te los explico a bajo nivel, capaz con algo mas palpable queda mas claro cual es la intencion.
Gatillos directos, son todas aquellas tablas para las que tenes una FK en la tabla actual (o en la tabla destino), osea tenes un salto nomas.
Aca no hay camino, las tablas se relacionan directamente con la dimension.
Gatillos indirectos, serian todas aquellas tablas a las que podes llegar de manera “transitiva”, esto es… armando un camino de N tablas mediante sus FK, en este caso tenes N-1 saltos para llegar a la tabla de la dimension.
Ah! entonces lo estaba usando mal… yo definía el camino en los directos (con todas las tablas involucradas, ya que no conocía el alcance ni el tema de los saltos).
En mi caso, ambas dimensiones podrían definirse sin gatillos, ni directos ni indirectos, no?
Depende, si unicamente queres que filtre cuando aparezca la tabla de la dimension entonces si, de todas maneras creo que en gral lo mas interesante es cuando se hacen consultas sobre tablas relacionadas y se filtran automaticamente… de modo que algun gatillo directo deberias de tener. De hecho al menos tenes que tener la misma tabla de la dimension como gatillo directo.
Lo otro, es que de esta forma estas forzado a definir si o si, valores para ambas restricciones… aun cuando tengas un subconjunto que pudiera funcionar unicamente restringiendo la sede.
Pensa, que una dimension sin gatillos que puedan dispararla… no se si tiene tanto sentido, digo… es un valor que se agrega unicamente cuando se consulta una tabla determinada… no pareciera tener tanto dinamismo o complejidad como para no incluir el join manualmente en la consulta.
Esta claro.
Los sectores los voy a definir, como la tabla sector, con gatillo directo la tabla sectores, y gatillo indirecto la tabla items.
De esa forma me filtrará ambas tablas (de todas formas quedaba igual, pero no bien, porque como los items los elegia en cascada de los sectores, y como solo podía elegir algunos).
Las de items, solo la defino a los efectos de definir los perfiles de datos, así que solo tendría el gatillo directo de la misma tabla.
Adjunto imágenes de como quedarían.