none
Analysis Service con Empleados, Puesto actual con jerarquías RRS feed

  • Pregunta

  • Hola, mi consulta es para saber de que manera se puede generar este tipo de relacion entre una FacTable de empleados y una Dim Jerarquica de Puesto (el ejemplo en este caso es de puesto):

    De que manera se puede indicar que un empleado pertenece a "X" Puesto sin necesitad de pegar en la factable supongamos en el campo idPuesto, el id de puesto de la Dim Jerarquizada en toda su historia, me explico? Se busca no tener que hacer un update en toda la historia de la FacTable. Esto tiene que funcionar para que luego al volcar esto a algún reporte en "Reporting Services" se pueda utilizar la Jerarquia sin problemas. 

    Saludos.- 

    jueves, 11 de diciembre de 2014 15:00

Respuestas

  • A eso voy, el empleado es un dato que teóricamente no cambia y por el cual ordenas valores (los hechos) por lo cual debería de ser dimensión no parte de una fact, entonces este valor no debería de estar directamente implicado en la fact table, sino directamente relacionado con la dimensión.

    Ejemplo

    Fact idempleado, ventas, comisión, total

     Dim empleado > idempleado, idpuesto, nombre, etc

      Dim puesto >> idpuesto, puesto

    Esto seria un ejemplo de como debería de estar. Al no tener esto lo que puedes hacer es agregar una bandera a la fact table y copiar los registros existentes y crear una columna.

    Registro 1 viejo con bandera 0

    Registro 1 nuevo con bandera 1

    La bandera te dira cual es el activo, pero cambiaras todos los puestos debido a que que son llaves sino estarías deformando la información. Disculpa sino me explico bien no encuentro una manera fácil de darme a entender.

    jueves, 11 de diciembre de 2014 16:33

Todas las respuestas

  • Si es una dimesnion debe de estar ligada de alguna manera con la fact table puede ser como dices por un idpuesto o hasta por un idempleado, pero sin saber tu estructura será difícil saber que podemos obtener.

    jueves, 11 de diciembre de 2014 15:31
  • Hola:

    Como bien explica Enrique las dimensiones tienen que estar ligadas a los hechos mediante alguna Key,que es única en la Dimension, pero si ya tienes una estructura con FactTable contra DimEmpleado y ahora quisieras añadir la Dimpuesto, puedes hacer que DimEmpleado y DimPuesto estén conectadas. Si te es mas sencillo añadir el idPuesto en la dimension Empleado.

    De todos modos no nos das muchos detalles y es difícil saber que necesitas.

    Saludos


    JM Claudio Dba/Consultor SQL/BI Pasiona - Spain

    jueves, 11 de diciembre de 2014 15:49
  • Aquí tenemos la FacTable y la DimPuesto, donde podemos ver que, para el idEmpleado "1" siempre tuvo el puesto 5, el empleado en todo su tiempo pudo haber cambiado de puesto, nosotros necesitamos saber siempre cual es el ultimo puesto que ocupo y por eso el id 5 se repite. Ahora es necesario cambiar el idPuesto por el 6 en todo su periodo laboral, por este motivo es necesario hacer un update en el campo idPuesto y pegar a toda la historia de la FacTable el id 6.

    La consulta es, hay alguna manera de no hacer un update en toda la historia de la FacTable? de esta manera la jerarquía de la DimPuesto en el cubo funciona perfecto cuando volcamos los datos a "Reporting Services", necesito otra forma no tan poco performante como hacer ese update que me permita seguir utilizando la jerarquía en reporting services.

    Saludos.- 

    jueves, 11 de diciembre de 2014 15:53
  • Hola:

    Como bien explica Enrique las dimensiones tienen que estar ligadas a los hechos mediante alguna Key,que es única en la Dimension, pero si ya tienes una estructura con FactTable contra DimEmpleado y ahora quisieras añadir la Dimpuesto, puedes hacer que DimEmpleado y DimPuesto estén conectadas. Si te es mas sencillo añadir el idPuesto en la dimension Empleado.

    De todos modos no nos das muchos detalles y es difícil saber que necesitas.

    Saludos


    JM Claudio Dba/Consultor SQL/BI Pasiona - Spain

    Hola Claudio, entiendo a lo que vas, el tema con esta solucion de que la DimEpleado y DimPuesto esten conectadas, me hace perder la Jerarquia cuando quiero verla en el Browser de Visual Studio. Por este motivo es que busco otra alternativa.


    Saludos.- 


    • Editado Ox9O jueves, 11 de diciembre de 2014 16:01
    jueves, 11 de diciembre de 2014 15:58
  • No entiendo porque la perderías, normalmente esto que mencionas es el método Kimbal o también conocido como SCD (Slow changing dimensión), básicamente tienes una bandera que se usa para saber cual es el valor más actual, por ejemplo puede ser una fecha o algún otro valor como un bit que nos sirva para saber cual es el ultimo valor.

    Pero esto significaría hacer un cambio en la estructura de la fact table, de otra manera tendrías que ver una lógica que se base posiblemente en tu llave para calcular el ultimo registro de estos valores disponible.

    jueves, 11 de diciembre de 2014 16:08
  • No entiendo porque la perderías, normalmente esto que mencionas es el método Kimbal o también conocido como SCD (Slow changing dimensión), básicamente tienes una bandera que se usa para saber cual es el valor más actual, por ejemplo puede ser una fecha o algún otro valor como un bit que nos sirva para saber cual es el ultimo valor.

    Pero esto significaría hacer un cambio en la estructura de la fact table, de otra manera tendrías que ver una lógica que se base posiblemente en tu llave para calcular el ultimo registro de estos valores disponible.

    Enrique, en realidad la dimension puesto nunca cambia (que seria lo que dices SCD), la jerarquía es siempre la misma, lo que cambia es la FacTable, donde ahi debo hacer update en toda la historia del nuevo idpuesto que pertenece a ese empleado, lo que yo intento hacer es evitar el udpate en toda la historia de la fac y ver de hacerlo de otra manera.

    Saludos.- 

    jueves, 11 de diciembre de 2014 16:11
  • Es que este valor en especifico debería estar en la Dimension no la Fact, he aquí el problema principal que estas teniendo. Al ligarlo a la Fact no podrias hacer el cambio de una manera fácil debido a como se liga, el SCD contra lo que te indica el nombre puede ser usado en la Fact también.

    jueves, 11 de diciembre de 2014 16:15
  • Es que este valor en especifico debería estar en la Dimension no la Fact, he aquí el problema principal que estas teniendo. Al ligarlo a la Fact no podrias hacer el cambio de una manera fácil debido a como se liga, el SCD contra lo que te indica el nombre puede ser usado en la Fact también.

    Perdón Enrique, no estoy entendiéndote, yo creo que no estoy usando nunca una dim SCD, la dim no cambia nunca solo cambia la FacTable.


    Slaudos.- 

    jueves, 11 de diciembre de 2014 16:18
  • A eso voy, el empleado es un dato que teóricamente no cambia y por el cual ordenas valores (los hechos) por lo cual debería de ser dimensión no parte de una fact, entonces este valor no debería de estar directamente implicado en la fact table, sino directamente relacionado con la dimensión.

    Ejemplo

    Fact idempleado, ventas, comisión, total

     Dim empleado > idempleado, idpuesto, nombre, etc

      Dim puesto >> idpuesto, puesto

    Esto seria un ejemplo de como debería de estar. Al no tener esto lo que puedes hacer es agregar una bandera a la fact table y copiar los registros existentes y crear una columna.

    Registro 1 viejo con bandera 0

    Registro 1 nuevo con bandera 1

    La bandera te dira cual es el activo, pero cambiaras todos los puestos debido a que que son llaves sino estarías deformando la información. Disculpa sino me explico bien no encuentro una manera fácil de darme a entender.

    jueves, 11 de diciembre de 2014 16:33
  • A eso voy, el empleado es un dato que teóricamente no cambia y por el cual ordenas valores (los hechos) por lo cual debería de ser dimensión no parte de una fact, entonces este valor no debería de estar directamente implicado en la fact table, sino directamente relacionado con la dimensión.

    Ejemplo

    Fact idempleado, ventas, comisión, total

     Dim empleado > idempleado, idpuesto, nombre, etc

      Dim puesto >> idpuesto, puesto

    Esto seria un ejemplo de como debería de estar. Al no tener esto lo que puedes hacer es agregar una bandera a la fact table y copiar los registros existentes y crear una columna.

    Registro 1 viejo con bandera 0

    Registro 1 nuevo con bandera 1

    La bandera te dira cual es el activo, pero cambiaras todos los puestos debido a que que son llaves sino estarías deformando la información. Disculpa sino me explico bien no encuentro una manera fácil de darme a entender.

    Entiendo perfectamente Enrique, gracias! el tema es que, cuando voy al Browser, la jerarquia de puestos se rompe de la manera en la que vos lo planteas, no funciona cuando entre la FacTable y la Dim Puesto con jerarquia hay una tabla plana como en este caso la dim empleado.

    Saludos.- 

    jueves, 11 de diciembre de 2014 16:43