SAC, Como cambiar datos transaccionales con atributos de dimensión. Fórmula avanzada

Hola, hoy vamos hablar de como cambiar datos que tenemos guardados en un modelo de Planning en SAC con los atributos de una dimensión.

Seguro que, os ha ocurrido, tener datos en un modelo que no corresponden a los que se tienen en el maestro, esto puede ser una situación normal, datos históricos, pero también puede pasar que queramos cambiarlos por los atributos del maestro de una dimensión. ¿Cómo podríamos hacerlo?

Situación:

Tenemos un modelo de planificación donde uno o varios de sus dimensiones también es atributo de otro de las dimensiones que tenemos en el modelo. El usuario de negocio se da cuenta que necesita cambiar estos datos del modelo de planificación ya que en el reporting e incluso en accesos por autorización no son los correctos. Solicita poder cambiar estos datos del modelo según el valor del dato maestro. Por ejemplo, cambiar, la persona responsable y cliente, que están en el modelo de planificación, por la persona responsable y cliente que están como atributo de la dimensión de proyecto. La persona responsable además es Objeto de Autorización.

¿Cómo lo hacemos?

Para poder solucionarlo y que el usuario tuviese una pantalla de selección, sin realizarlo con una aplicación, es decir, hacerlo desde una historia, fue crear un Data Action con un paso de fórmula. Este Data Action, solicita el proyecto como selección y cambia los valores del modelo de planificación con los atributos que tiene el proyecto. Para esto, usamos fórmula avanzadas

Creamos una historia donde la primera pestaña tiene acceso al maestro de proyectos, es decir, añadimos un hiperlink a la dimensión de proyecto para que pudiese, primero, modificar los valores en la dimensión. Algo sencillo y rápido, sin necesidad de crearse aplicación.

La siguiente pestaña tenemos una el modelo de planificación con la visualización por tabla, mostrando los campos de Proyecto / Persona responsable/Cliente pero para poder que los valores de la dimensión y el dato del modelo son diferentes, en la dimensión de Proyecto, mostramos los atributos de Proyecto — Persona responsable y Cliente.

Creamos un Data Action solicitando el proyecto donde se tiene que cambiar los datos del modelo por los atributos de la dimensión de proyecto

Fórmula:

Por cada ratio del modelo, tenemos dos variables numéricas, la primera guardamos los valores del modelo de planificación. En la segunda, guardamos lo mismo pero, con los valores de atributo de la dimensión proyecto.

Guardamos en el modelo los valores pero con el valor de los atributos de la dimensión del proyecto.

Comprobación, si el valor buscado es el mismo que el valor cambiado, borramos el valor dentro del modelo y guardamos los valores que teníamos en la segunda variable, que son los valores que tiene con los atributos de la dimensión del proyecto.

Código:

// Según la selección de la versión y el tiempo, se modificará cada // línea del modelo según el atributo
// del proyecto. Estas modificaciones no son masivas y están 
// localizadas por cada proyecto
// los datos a modificar son el Cluster y el cliente, tanto en 
// ingresos como en gastos
CONFIG.TIME_HIERARCHY = CALENDARYEAR
CONFIG.GENERATE_UNBOOKED_DATA = OFF
// Región de datos a la que realizar la modificación
MEMBERSET [d/Measures] = «Amount»
// MEMBERSET [d/Date] = («Time1», «Time2»)
MEMBERSET [d/PD_PR_PROJECT] = %P_PROJECT%
VARIABLEMEMBER #AMOUNT1 OF [d/Measures]
VARIABLEMEMBER #AMOUNT2 OF [d/Measures]


// Recogemos en una variable el valor actual que tiene el proyecto
DATA([d/Measures] = #AMOUNT1, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY]) =
RESULTLOOKUP([d/Measures] = «Amount», [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY])

// RATIO Nº 2 DONDE SE AGREGA LA MISMA RELACIÓN PERO CON EL 
// ATRIBUTO DEL PROYECTO, del cliente, persona responsable
DATA([d/Measures] = #AMOUNT2, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_PR_PROJECT].[p/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_PR_PROJECT].[p/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY]) =
RESULTLOOKUP([d/Measures] = #AMOUNT1, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY])

// LINEA BUENA DONDE ME GUARDA LOS DATOS ACTUALES Y CAMBIA EL
// Cliente y la persona responsable
DATA([d/Measures] = «Amount», [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_PR_PROJECT].[p/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_PR_PROJECT].[p/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY]) =
RESULTLOOKUP([d/Measures] = «Amount», [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY])
//———————————————————————————–
//HACEMOS LA COMPARACION DE LOS VALORES Y VOLVEMOS A CREAR EL VALOR
// CON LOS ATRIBUTOS
//———————————————————————————–
IF RESULTLOOKUP([d/Measures] = #AMOUNT2, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_PR_PROJECT].[p/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_PR_PROJECT].[p/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY]) =
RESULTLOOKUP([d/Measures] = #AMOUNT1, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY]) THEN
DELETE()
DATA([d/Measures] = «Amount») = RESULTLOOKUP([d/Measures] = #AMOUNT2, [d/Date] = [d/Date], [d/PD_PR_PROJECT] = [d/PD_PR_PROJECT], [d/PD_CLUSTER] = [d/PD_CLUSTER],
[d/PD_PR_ACCOUNT] = [d/PD_PR_ACCOUNT], [d/PD_RECORD_TYPE] = [d/PD_RECORD_TYPE], [d/PD_CUSTOMER] = [d/PD_CUSTOMER],
[d/PD_CONCEPT] = [d/PD_CONCEPT], [d/PD_POSITION] = [d/PD_POSITION], [d/PD_CURRENCY] = [d/PD_CURRENCY])
ENDIF

Espero que os sirva

Seguir avanzando, saber es bueno y también, saber quién sabe, puede ayudarnos

Publicado por Óscar Gómez

Os dejo mi perfil https://www.linkedin.com/in/oscar-g%C3%B3mez-4b78a62a/

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: