Nota: Este artículo explica la estructura y el uso de los modelos de datos de Alchemy Reporting. El acceso Snowflake Direct le proporcionará capacidades adicionales de generación de informes fuera de Alchemy Manager para aquellos que utilicen operaciones de inteligencia empresarial (BI) o análisis empresarial (BA). Si está interesado en utilizar Snowflake, póngase en contacto con su gestor de cuentas de Alchemy para obtener información sobre precios. Para saber más sobre los informes inteligentes, consulte ¿Qué son los informes inteligentes?
Acerca de Snowflake Direct Access
La plataforma Alchemy Training System utiliza Snowflake, una solución de almacén de datos extremadamente capaz. Para los clientes con sofisticadas operaciones de inteligencia empresarial (BI) o análisis empresarial (BA), Alchemy ofrece la posibilidad de que los clientes se conecten directamente a Snowflake, lo que permite a las organizaciones ver, consultar y analizar directamente todos sus datos de formación.
Snowflake Direct Access permite realizar análisis e informes exclusivos sobre la formación que Intertek Alchemy le ayuda a impartir.
- Elabore eficazmente sus análisis
- Combine fácilmente los datos de Alchemy con conjuntos de datos de otros sistemas.
- Descubra valiosas perspectivas y tendencias
Los clientes pueden acceder a la nube de datos Alchemy Manager Snowflake de dos maneras:
- Cuenta de cliente: esta opción es para los clientes que tienen su propia cuenta Snowflake y relación de facturación. Esta opción requiere que el cliente tenga sus datos almacenados en la región AWS us-east-1.
- Alchemy Reader Account: en esta opción, Alchemy crea y gestiona una cuenta Reader para el cliente, y toda la facturación corre a cargo de Alchemy.
Tanto si utiliza una de las interfaces web de Snowflake como una conexión de red directa a Snowflake, su acceso a los datos se realiza con SQL, por lo que necesitará a alguien que sepa utilizarlo. El nivel de conocimientos de SQL que necesite vendrá determinado por lo que esté intentando conseguir, pero podría requerir fácilmente el uso de múltiples JOINs, múltiples cláusulas WHERE y una extensa lista de campos SELECT.
Modelos de datos
Los modelos de datos (DM) son las vistas de sus datos de Alchemy a las que proporcionamos acceso directo. Sus Smart Reports y cuadros de mando utilizan estos DM para generar los datos. Proporcionan una versión de los datos de la aplicación que simplifica la recuperación y funciona muy bien a la hora de analizar los datos.
Los campos "clave" se utilizan para identificar los principales objetos de la base de datos. Pueden utilizarse para identificar objetos únicos y también se utilizan con un "join" para extraer datos adicionales.
DM_STUDENT_DETAIL
Esta tabla contiene datos exhaustivos sobre cada alumno. Puedes consultarlo directamente así:
select nombre_completo_usuario, id_usuario, lugar_trabajo_usuario, fecha_contratación, grupos_usuario
de dm_student_detail
order by date_of_hire desc nulls last
límite 20;
Columnas de la lista de grupos
Los grupos a los que pertenece el usuario se encuentran en los siguientes campos.
-
USER_GROUPScontiene grupos de tipo Corporate y System -
DYNAMIC_GROUPScontiene Grupos Dinámicos
Grupos de clasificación
Alchemy Manager puede configurarse para admitir hasta 13 "Clasificaciones de alumnos". Cada clasificación tiene un campo en DM_STUDENT_DETAIL que tiene el nombre del grupo (o grupos) al que pertenece ese alumno.
Las columnas se denominan como sigue:
STATUS_GROUPSPAY_TYPE_GROUPSTIME_TYPE_GROUPSGRUPOS_TIPO_EMGRUPOS_REGIONALESSUB_REGION_GROUPSDIV_GROUPSBUSS_UNIT_GROUPSDEPT_GROUPSJOB_CODE_GROUPSJOB_TITLE_GROUPSJOB_CLASS_GROUPSSHIFT_GROUPS
Los nombres de grupos múltiples se separarán con espacios y el símbolo de pipa (|). Sólo se mostrarán los 100 primeros nombres de grupos, ya que se pretende que se muestren "tal cual" y no que se manipulen o busquen.
DM_*_INFORME
Estas son las principales tablas del informe. En general, cada Smart Report en Alchemy Manager utiliza una tabla de informes, y cada fila de la tabla representa una fila de salida en un Smart Report. Los casos más sencillos utilizarán probablemente una tabla de informes y la tabla DM_STUDENT_DETAIL, una consulta como ésta funcionaría:
select s.nombre_completo_usuario, tr.fecha_fin_entrenamiento, tr.código_actividad, tr.título_actividad
de dm_tr_report tr
inner join dm_student_detail s
on tr.clave_alumno = s.clave_alumno
donde date(tr.training_end_date) = current_date();
Las mesas son:
| Tabla de informes | Datos proporcionados |
|---|---|
DM_TR_INFORME |
Contiene datos de formación sobre las actividades individuales de los alumnos, como los cursos Alchemy, las observaciones, los cursos para reproductores, los ILT, etc. |
DM_LP_INFORME |
Contiene información sobre el estado de las suscripciones de los alumnos a los planes de formación. Para cada suscripción del alumno a un plan de aprendizaje, tiene una fila para cada actividad requerida para completar ese plan de aprendizaje y el estado del alumno para ese requisito. |
DM_INFORME_OBSERVACION |
Contiene detalles de las observaciones, como los comentarios resumidos, la información del observador, la causa raíz, el refuerzo y las acciones correctivas. Tenga en cuenta que las imágenes no están disponibles y que los detalles de las respuestas individuales requieren unirse con DM_ANSWER_DETAILS. |
DM_QP_STATUS_REPORT |
Mantiene el estado de las asignaciones de los alumnos a los planes de cualificación. Esto puede incluir cualificaciones manuales o expiraciones. |
Tenga en cuenta que estamos eliminando los campos de alumnos de las tablas de informes para simplificar los nuevos informes y obtener detalles de varios alumnos (es decir, OBSERVED_BY_KEY, FACILITATOR_STUDENT_KEY, etc.). Por compatibilidad futura, debe recuperar los datos de los alumnos de la tabla DM_STUDENT_DETAIL.
DM_LOCALE_*
Estas tablas contienen las distintas traducciones de los objetos de Alchemy Manager que lo soportan. Cada tabla representa las traducciones disponibles para un único campo de texto. Cada fila de la tabla representa el texto que se mostraría para una única configuración regional. (Actualmente, el campo de configuración regional contiene un número obtuso. Esto se cambiará más adelante).
Tenga en cuenta que existe una traducción en cada una de las configuraciones regionales de interfaz de usuario admitidas, aunque no se haya proporcionado ninguna. En este caso se utilizará la traducción "en_US".
El contenido del curso puede estar disponible en una amplia variedad de idiomas, pero el título principal está en DM_LOCALE_PARENT y sólo en las configuraciones regionales de interfaz de usuario compatibles. Por ejemplo, hay cursos en swahili, vietnamita, etc., con nombres no ingleses, pero su título padre tendría una traducción al inglés, como "Electrical Safety Swahili", y podría no haber una traducción al español del título padre, por lo que en dm_locale_parent se almacenaría con el mismo título en inglés.
Por ejemplo, para obtener los nombres de los padres "es-US" (obtendremos "en-US" cuando no haya "es-US" disponible) para la formación reciente, funcionaría una consulta como ésta:
select s.nombre_completo_usuario, tr.fecha_fin_entrenamiento, tr.código_actividad, p.nombre, tr.título_actividad
de dm_tr_report tr
inner join dm_student_detail s
on tr.clave_alumno = s.clave_alumno
inner join dm_locale_parent p
on p.parent_key=tr.parent_key and p.filter_locale=160
where date(training_end_date) = current_date() limit 20;
Las mesas son:
| Tabla de traducción | Clave de objeto | Datos proporcionados |
|---|---|---|
DM_LOCALE_CATEGORY_GROUP |
CLAVE DE CURSO |
Contiene los nombres de las categorías de cursos |
DM_LOCALE_PARENT |
CLAVE_PARENTAL |
Contiene los nombres de los cursos principales |
DM_LOCALE_LP_GOAL |
CLAVE_OBJETIVO |
Mantiene los nombres de los Planes de Aprendizaje |
DM_CALIFICACIÓN_LOCAL |
CLAVE_PLAN_CALIFICACIÓN |
Contiene los nombres de los planes de cualificación |
El ID de localización (filter_locale) para las localizaciones de Alchemy UI son:
| Nombre de la localidad | ID de localidad |
|---|---|
| es_US | 1 |
| es_US | 160 |
| fr_CA | 186 |
| mi_MM | 343 |
| so_SO | 442 |
| es_GB | 116 |
| pa_IN | 380 |
| zh_CN | 538 |
| vi_VN | 522 |
| de_DE | 85 |
| es_ES | 149 |
| pt_BR | 389 |
| es_MX | 153 |
| fr_FR | 194 |
| es_419 | 140 |
DM_DETALLES_DE_RESPUESTA
Esta tabla contiene los detalles de las respuestas de los alumnos a un examen, una evaluación o una observación. Algunos campos se rellenan o no en función del tipo de objeto. Se unirá a la tabla del informe utilizando TEST_SESSION_KEY.
Nota: Las "Evaluaciones anónimas" son anónimas en la interfaz de usuario, pero no en los datos. Para preservar el anonimato, cualquier uso de los datos debe ocultar los detalles.
DM_GRUPO_ESTUDIANTE
Esta tabla incluye todos los grupos asociados a un alumno. Su uso está destinado exclusivamente al filtrado. Esto se consigue añadiendo una cláusula WHERE como:
where clave_alumno in (
select distinct clave_alumno from dm_grupo_alumno
where nombre_grupo='Un nombre de estado'
and group_type='Estado'
)
DM_SEGURIDAD_ESTUDIANTES
Esta tabla te permite reforzar la seguridad estilo supervisor de Alchemy Manager. La seguridad del administrador se basa totalmente en el acceso a un alumno. Las filas de esta tabla deben filtrarse por ADMIN_STUDENT_KEY y unirse de nuevo a la tabla del informe utilizando STUDENT_KEY. El resultado es eliminar las filas que no son accesibles para el administrador. Para obtener la ADMIN_STUDENT_KEY correcta, busque la STUDENT_KEY del admin en la tabla DM_STUDENT_DETAIL. Este es un ejemplo para filtrar los resultados del administrador con USER_ID='000001':
where clave_alumno in (
select distinct clave_alumno from dm_seguridad_alumno
donde admin_student_key=(
select student_key from dm_student_detail where user_id='000001'
)
)
Nota: La tabla también se puede filtrar por UNIQUEADMINID, que se compone de StudentID y su DB_NAME. Es algo parecido a esto:
where clave_alumno in (
select distinct clave_alumno from dm_seguridad_alumno
where uniqueadminid='12345@alchemy_clientname_live'
)
Carga incremental
Si está copiando los datos de los informes en un sistema propio, recargar los datos periódicamente puede resultar demasiado lento o costoso. La solución estándar a este problema es cargar sólo lo que ha cambiado. Esto se denomina carga incremental o, a veces, carga delta. Este plan plantea varias dificultades:
- Identificar las filas modificadas puede ser difícil
- Las filas modificadas deben fusionarse con los datos antiguos
- No hay forma de saber qué filas hay que borrar
La forma más sencilla de gestionar una gran carga de datos es realizar cargas incrementales cada día, pero luego hacer una recarga completa una vez a la semana. En otras palabras, utilice una carga incremental como "mejor esfuerzo" para tener los datos actualizados, pero utilice una recarga completa para arreglar cualquier cosa que se haya pasado por alto o que deba eliminarse.
Estamos trabajando para facilitar la identificación de las filas modificadas. Actualmente, cada tabla tiene un campo CHANGE_DATE, pero es posible que esto cambie con demasiada frecuencia. Estamos añadiendo un campo DM_LAST_MODIFIED para indicar sólo cuándo se han producido cambios importantes. Si está utilizando alguna unión, también debe respetar los cambios en esas tablas. Para ser minucioso, debe buscar cualquier fecha mayor que la fecha mayor de los datos cargados anteriormente.
Para ilustrar una estrategia para mantener una copia local de DM_TR_REPORT, este bloque de pseudocódigo asume que su "db local" funciona exactamente igual que otra cuenta Snowflake. El objetivo es minimizar la cantidad de datos transferidos desde Alchemy a la base de datos local.
-- Transferencia de filas modificadas de Alchemy a la base de datos local
SET última_fecha_anterior = (
SELECT COALESCE(MAX(DM_LAST_MODIFIED), '1980-01-01')
FROM localdb.DM_TR_REPORT );
CREATE OR REPLACE localdb.changes AS
SELECT tus_columnas FROM ALCHEMY.DM_TR_REPORT
WHERE DM_LAST_MODIFIED > $last_previous_date;
-- Actualizar localmente las filas existentes donde haya coincidencias
UPDATE localdb.DM_TR_REPORT SET tus_columnas
FROM localdb.changes
WHERE localdb.DM_TR_REPORT.transcript_key = localdb.changes.transcript_key;
-- Insertar filas donde no hay coincidencias
INSERT INTO localdb.DM_TR_REPORT (sus_columnas)
SELECT tus_columnas FROM localdb.changes
LEFT JOIN localdb.DM_TR_REPORT
ON localdb.DM_TR_REPORT.transcript_key = localdb.changes.transcript_key
WHERE localdb.DM_TR_REPORT.transcript_key IS NULL;
Tenga en cuenta que esto todavía no manejará las filas eliminadas.
He aquí una lista de las tablas DM y qué clave (o claves) debe utilizarse para identificar filas únicas.
| Tabla DM | Claves de identificación |
|---|---|
DM_TR_INFORME |
TRANSCRIPT_KEY |
DM_LP_INFORME |
SUBSCRIPTION_KEY, COURSE_REQ_KEY
|
DM_STUDENT_DETAIL |
CLAVE_ESTUDIANTE |
DM_SEGURIDAD_ESTUDIANTES |
ADMIN_TO_STUDENT_KEY o ADMIN_STUDENT_KEY,STUDENT_KEY
|
DM_GRUPO_ESTUDIANTE |
GROUP_TO_STUDENT_KEY o GROUP_KEY,STUDENT_KEY
|
DM_DETALLES_DE_RESPUESTA |
CLAVE_RESPUESTA_PRUEBA |
DM_LOCALE_CATEGORY_GROUP |
CATEGORY_GROUP_LOCALE_FILTER_KEY |
DM_LOCALE_LP_GOAL |
LP_GOAL_LOCALE_FILTER_KEY |
DM_LOCALE_PARENT |
PARENT_LOCALE_FILTER_KEY |
DM_CALIFICACIÓN_LOCAL |
CLAVE_DE_FILTRO_LOCAL_DEL_PLAN_DE_CALIFICACIÓN |
DM_INFORME_OBSERVACION |
TRANSCRIPT_KEY |
DM_QP_STATUS_REPORT |
CLAVE DE ASIGNACIÓN |
Actualmente, sólo DM_TR_REPORT tiene un campo DM_LAST_MODIFIED. Las otras tablas tienen un campo CHANGE_DATE que puede utilizarse del mismo modo, pero no será tan eficaz para reducir los registros considerados "nuevos".
Informes avanzados
Algunos de nuestros informes tienen una complejidad adicional además de las tablas normales. No podrá recrear la salida de estos informes sin reproducir esta complejidad adicional.
Por ejemplo:
- El informe de suscripción al plan de formación utiliza la agrupación para simplificar los resultados cuando los usuarios están suscritos al mismo plan varias veces.
- Los informes "Matriz" utilizan varias filas y realizan una operación "pivotante" para convertir esas filas adicionales en columnas.
- Los gráficos de cuadros de mando disponibles en Manager agregan las filas en una o dos dimensiones y, a continuación, proporcionan los datos a una biblioteca de gráficos.