Expliqué 3 partes básicas de la lógica de script en el último post BPC Script logic for Dummies, capitulo 1.. Fue alcance, cálculo y escritura.
Encontraremos más funciones avanzadas para el alcance en esta publicación.
1. Ámbito de aplicación utilizando la propiedad miembro
Hemos encontrado cómo usar *XDIM_MEMBERSET la última vez. *XDIM_MEMBERSET es para el alcance basado en la identificación del miembro.
¿Qué sucede si el usuario desea incluir miembros en un valor de propiedad específico? Por ejemplo, un usuario desea filtrar los miembros de la dimensión de la cuenta que son activos.
Para lograr esto, necesitamos usar la propiedad ACCTYPE que tiene el valor de tipo de cuenta. AST es el valor para la cuenta ASSET. (Nota: el valor se basa en el APSHELL de BPC).
El comando es *XDIM_FILTER
El uso es *XDIM_FILTER <DIMENSIONNAME> = [DIMENSIONName] .Properties («Nombre de la propiedad») = «Valor de la propiedad»
Así que el ejemplo anterior se puede escribir de la siguiente manera.
*XDIM_FILTER ACCOUNT = [cuenta].properties(ACCTYPE = ‘AST’)
Digamos que la dimensión de la cuenta tiene 3 miembros como abajo.
ID ACCTYPE
Extsales INC
CASH AST
TAXES EXP
NETINCOME INC
Luego, *XDIM_FILTER_ACCOUNT seleccionará solo el miembro CASH.
Supongamos que si ya ha utilizado varios comandos *XDIM_MEMBERSET y, a continuación, se seleccionan los datos de las tablas de hechos.
* XDIM_MEMBERSET TIME = 2011.JAN
* XDIM_MEMBERSET CATEGORY = BUDGET
<Result>
EXTSALES, 2011.JAN, PRESUPUESTO, 9000
EFECTIVO, 2011.JAN, PRESUPUESTO, 3000
IMPUESTOS, 2011.JAN, PRESUPUESTO, 800
NETINCOME, 2011.JAN, PRESUPUESTO, 1500
Ahora si agrega *XDIM_FILTER contra la dimensión ACCOUNT.
* XDIM_MEMBERSET TIME = 2011.JAN
* XDIM_MEMBERSET CATEGORY = BUDGET
* XDIM_FILTER ACCOUNT = [account] .properties (ACCTYPE? = ‘AST’)
Entonces, solo se seleccionará un registro del resultado anterior porque CASH es el único miembro de la cuenta que tiene el valor ‘AST’ de la propiedad ACCTYPE.
<Resultado>
EFECTIVO, 2011.JAN, PRESUPUESTO, 3000
2. Alcance usando el valor de miembro
Acabamos de descubrir cómo hacer un alcance de los datos de origen en función de la propiedad. Entonces alguien podría hacer esta pregunta. ¿Podemos basarnos en el valor? Por ejemplo, ¿podemos seleccionar todos los datos que un valor de cuenta mayor que 100? Por supuesto, podemos hacerlo.
El comando es *XDIM_GETMEMBERSET. A diferencia de otro comando, necesita el comando *ENDXDIM para especificar los datos. Aquí está la gramática de *XDIM_GETMEMBERSET y un ejemplo.
* XDIM_GETMEMBERSET {dimension} [= {member set}]
[* APP = {application}] // opcional
[* XDIM_MEMBERSET {dimension} [= {member set}] // tantos como sea necesario
[* QUERY_TYPE = 0 | 1 | 2] // opcional
* CRITERIOS {expresión} // requerido
* ENDXDIM
* XDIM_GETMEMBERSET P_CC = [P_CC]. [H1]. [AAPJ]. HIJOS
* APP = PLANIFICACIÓN
* XDIM_MEMBERSET P_DataSrc = ENTRADA
* CRITERIOS [P_ACCT]. [H1]. [CE0001000]> 1000
* ENDXDIM
Obtendrá los datos que son:
a. Niños miembros de la AAPJ en la dimensión P_CC. Y
b. Desde la aplicación de PLANIFICACIÓN Y
c. Miembro de la ENTRADA de la dimensión P_Datasrc Y
d. El valor de miembro de CE0001000 de la dimensión P_ACCT debe ser mayor que 100000
Supongamos que la tabla de hechos tiene registros por debajo.
CE0001000, 2011.JAN, ACTUAL, ENTRADA, COREA, 2500
CE0002000, 2011.JAN, ACTUAL, ENTRADA, CHINA, 5000
CE0001000, 2011.JAN, ACTUAL, ADJ, CHINA, 3000
CE0002000, 2011.JAN, ACTUAL, ENTRADA, JAPÓN , 1999
CE0003000, 2011.JAN, ACTUAL, ENTRADA, JAPÓN, 2222
CE0001000, 2011.FEB, BUDGET, ADJ, COREA, 345
CE0001000, 2011.FEB, PRESUPUESTO, ENTRADA, TURQUÍA, 1999
CE0003000, 2011.JAN, ACTUAL, INPUT , TURQUÍA, 1100
CE0001000, 2011.FEB, PRESUPUESTO, ENTRADA, CHINA, 1050
CE0001000, 2011.FEB, PRESUPUESTO, ENTRADA, JAPÓN, 450
¿Qué registros serán seleccionados?
La respuesta es
CE0001000, 2011.JAN, ACTUAL, INPUT, COREA, 2500
CE0001000, 2011.FEB, BUDGET, INPUT, CHINA, 1050
Los registros siguientes no se seleccionarán, aunque P_ACCT sea CE0001000 porque su valor es menor a 1000 o Datasrc no es ENTRADA o no es el miembro secundario de AAPJ (Asia Pacífico)
CE0001000, 2011.JAN, ACTUAL, ADJ, CHINA, 3000 (datasrc no se ingresa)
CE0001000, 2011.FEB, BUDGET, ADJ, KOREA, 345 (datasrc no se ingresa)
CE0001000, 2011.FEB, BUDGET, INPUT, TURKEY, 1999 (Turquía no es miembro hijo de AAPJ)
CE0001000, 2011.FEB, BUDGET, INPUT, JAPAN, 450 (el valor es inferior a 1000)
Aquí hay algunas notas importantes para usar este comando.
Nota 1: Este comando solo funciona para BPC MS.
Nota 2: Si no especifica el alcance de cada dimensión, se realizará en los miembros correspondientes de la región preseleccionada que se define con XDIMMEMBERSET de la línea anterior o Pasado por Data Manager.
Nota 3: este comando generará una declaración MDX por lo que demora más tiempo en ejecutarse. Si su conjunto de datos solo tiene miembros base, puede usar *XDIM_GETINPUTSET. (Por favor refiérase al archivo de ayuda)
3. Cuando el usuario desea agregar más miembros sobre los datos del ámbito actual.
Digamos que un usuario desea agregar una entidad de ventas de USAS sobre un conjunto de miembros predefinido. En ese caso el usuario lo define a continuación.
* XDIM_ADDMEMBERSET Entity = USASales La razón principal por la que necesitamos esto es que a veces, XDIMMEMBERSET no funciona con algunas funciones específicas como BAS (principal).
Por ejemplo, EN BPC NW, *XDIM_MEMBERSET = BAS (EE.UU.), CANADÁ no funcionará.
Por lo tanto, debemos usar *XDIM_MEMBERSET y * XDIM_ADDMEMBERSET.
Nota: En BPC MS, BAS () no funcionará con XDIM_MEMBERSET. Si el usuario siempre quiere ejecutar un conjunto de miembros específico cada vez que se ejecuta la lógica, debe utilizar XDIM_ADDMEMBERSET
4. Ámbito dinámico y guardándolo en una variable.
A veces necesitamos guardar nuestros datos de ámbito en una variable lógica de script. Pero ¿qué pasa si los miembros de su dimensión se actualizan con frecuencia? Como sé, casi todos los clientes actualizan su dimensión al menos una vez al mes. Si el cliente cambia sus miembros de dimensión, ¿qué ocurrirá en la lógica de su script? Puede usar * Filtro, pero a veces puede que no funcione todo el tiempo.
Luego podemos usar los comandos *SELECT y *MEMBERSET como una herramienta de alcance dinámico. Al igual que otro motor de secuencias de comandos, la secuencia de comandos de Logic también admite Variable para guardar algunos datos. La variable se define mediante el símbolo%. Aquí hay algunos ejemplos, %MYTIME%, %CUR%, etc.
Entonces, ¿cómo podemos guardar algunos datos en la variable y cuándo se puede utilizar? Generalmente, la variable se puede llenar usando el comando * SELECT y el comando *MEMBERSET. Ambos son comandos de alcance, pero *SELECT será más rápido porque creará una declaración SQL.
Aquí está la gramática de ambos comandos. *SELECT (, {miembro establecido en formato MDX}) Veamos cómo usar el comando *SELECT.
*SELECT (%REPORTING_CURRENCIES%, «ID», «CURRENCY», «[GROUP] = ‘REP'»)
Este comando obtendrá el ID de miembro de la dimensión de moneda en el que la propiedad GROUP tiene el valor ‘REP’. En realidad, se creará una declaración SQL como a continuación:
SELECCIONE ID desde mbrCurrency donde [GROUP] = ‘REP’
Después de que se ejecute el comando SQL anterior, todos los resultados se guardarán en la variable %REPORTING_CURRENCIES%.
Aquí hay un ejemplo de *MEMBERSET que hará el mismo resultado, pero ejecutará la declaración MDX en lugar de SQL.
*MEMBERSET (%REPORTING_CURRENCIES%, Filter {[CURRENCY].members, [currency] .properties (GROUP = ‘REP’)})
La variable se puede usar en cualquier parte de la lógica, como en este ejemplo:
*XDIM_MEMBER_SET CURRENCY =% REPORTING_CURRENCIES%
Asumamos que la dimensión de la moneda tiene debajo de los miembros.
ID GRUPO
USD REP
EUR REP
KRW
JPY
Luego, la declaración anterior se convertirá en
*XDIM_MEMBER_SET CURRENCY = USD, EUR
Cuando define y completa los datos con *SELECT y *MEMBERSET, por favor recuerda esto como ‘MEMBERSET Variable’Nota: el comando MEMBERSET solo es compatible con la versión MS.
Script de ejemplo:
Fuente: https://blogs.sap.com/2011/06/20/bpc-script-logic-for-dummies-part-2/
BPC Script logic for Dummies, capitulo 1
BPC Script logic for Dummies, capítulo 3
BPC Script logic for Dummies, capítulo 4
BPC Script logic for Dummies, capítulo 5
4 comentarios