Saltar al contenido principal Saltar al contenido complementario

Expresiones de conjunto internas y externas

Las expresiones de conjunto se utilizan dentro y fuera de las funciones de agregación y van entre llaves.

Cuando utiliza una expresión de conjunto dentro de una función de agregación, puede presentar el siguiente aspecto:

Ejemplo: Expresión de conjunto interna

Sum( {$<Year={2021}>} Sales )

Utilice una expresión de conjunto fuera de la función de agregación si tiene expresiones con múltiples agregaciones y desea evitar escribir la misma expresión de conjunto en cada función de agregación.

Si utiliza una expresión de conjunto externa, debe colocarse al comienzo del área.

Ejemplo: Expresión de conjunto externa

{<Year={2021}>} Sum(Sales) / Count(distinct Customer)

Si utiliza una expresión de conjunto fuera de la función de agregación, también puede aplicarla en medidas maestras actuales.

Ejemplo: Expresión de conjunto externa aplicada a la medida maestra

{<Year={2021}>} [Master Measure]

Una expresión de conjunto utilizada fuera de las funciones de agregación afecta a toda la expresión, a menos que esté entre corchetes, en ese caso los corchetes definen el alcance. En el ejemplo siguiente de ámbito léxico, la expresión de conjunto solo se aplica a la agregación que va dentro de los corchetes.

Ejemplo: Ámbito léxico

( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)

Reglas:

Ámbito léxico

La expresión de conjunto afecta a toda la expresión, a menos que esté encerrada entre corchetes. Si es así, los corchetes definen el alcance léxico.

Posición

La expresión de conjunto debe colocarse al comienzo del ámbito léxico.

Contexto

El contexto es la selección que es relevante para la expresión. Tradicionalmente, el contexto siempre ha sido el estado predeterminado de la selección actual. Pero si un objeto está establecido en un estado alterno, el contexto es el estado alterno de la selección actual.

También puede definir un contexto en forma de una expresión de conjunto externa.

Herencia

Las expresiones de conjunto internas tienen prioridad sobre las expresiones de conjunto externas. Si la expresión de conjunto interna contiene un identificador de conjuntos, esto anula el contexto definido en la expresión de conjunto externo. En caso contrario, las expresiones de conjunto interna y externa se evalúan ambas.

Ejemplo 1: Expresión de conjunto interna con identificador de conjunto

{<Year={2023}>} Sum(Sales) / Count({1} distinct OrderNumber)

En la expresión anterior, la expresión de conjunto interna Count({1} distinct OrderNumber) está formada por el identificador de conjunto {1}. Cuando se evalúa esta expresión de conjunto interna, no se aplica el ámbito definido en la expresión de conjunto externa {<Year={2023}>}.

Ejemplo 2: Expresiones de conjunto internas sin identificadores de conjuntos

{<Year={2023}>} Sum ({<Status={'Confirmed'}>} Sales_Stream1) + Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2)

En la expresión anterior, las expresiones de conjunto internas Sum ({<Status={'Confirmed'}>} Sales_Stream1) y Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2) no contienen identificadores de conjunto. Por lo tanto, la expresión de conjunto externa {<Year={2023}>} y ambas expresiones de conjunto internas se aplican todas al evaluar el resultado.

Asignación de conjunto de elementos

La asignación del conjunto de elementos determina cómo se fusionarán las dos selecciones. Si se utiliza un signo igual normal, la selección en la expresión de conjunto interna tiene prioridad. De lo contrario, se utilizará el operador de conjunto implícito.

  • {<Field={value}>}: esta selección interna reemplaza cualquier selección externa en “Field”.

  • {<Field+={value}>}: esta selección interna se fusiona con la selección externa en “Field”, utilizando el operador de unión.

  • {<Field*={value}>}: esta selección interna se fusiona con la selección externa en “Field”, utilizando el operador de intersección.

Herencia en varios pasos

La herencia se puede dar en varios pasos. Ejemplos:

  • Selección actual → Sum(Amount)

    La función de agregación utilizará el contexto, que aquí es la selección actual.

  • Selección actual → {<Set1>} Sum(Amount)

    Set1 heredará su contexto de la selección actual y el resultado será el contexto para la función de agregación.

  • Selección actual → {<Set1>} ({<Set2>} Sum(Amount))

    Set2 heredará su contexto de Set1, que a su vez lo hereda de la selección actual, y el resultado será el contexto para la función de agregación.

Herencia para cadenas de expresiones de conjunto internas y externas

Existen consideraciones adicionales para la herencia cuando se utilizan expresiones de conjunto múltiples en cadenas complejas, en particular cuando a una expresión de conjunto externa le siguen otras expresiones de conjunto externa y/o una expresión de conjunto interna. Para más detalles, vea Cadenas de múltiples expresiones de conjunto externas e internas.

La función Aggr()

La función Aggr() crea una agregación anidada que tiene dos agregaciones independientes. En el ejemplo a continuación, se calcula Count() para cada valor de Dim, y la matriz resultante se agrega mediante la función Sum().

Ejemplo:  

Sum(Aggr(Count(X),Dim))

Count() es la agregación interna y Sum() la agregación externa.

  • La agregación interna no hereda ningún contexto de la agregación externa.

  • La agregación interna hereda el contexto de la función Aggr(), que puede contener una expresión de conjunto.

  • Tanto la función Aggr() como la función de agregación externa heredan el contexto de una expresión de conjunto externa.

Cadenas de múltiples expresiones de conjunto externas e internas

Tenga en cuenta que es posible tener más de una expresión exterior de conjunto. En este ejemplo tenemos dos expresiones de conjunto externas y una interna:

{<Year={2021}>} {<Region={"Europe"}>} Sum( {$<Product={"XI345"}>} Sales )

Las expresiones de conjunto se aplicarán de izquierda a derecha. Esto significa que si dos expresiones de conjunto utilizan conjuntos contradictorios, tendrá preferencia la expresión situada más a la derecha.

Aunque no hay límite en cuanto al número de expresiones de conjuntos externas encadenadas de esta manera, el número de expresiones de conjunto internas está limitado a una. Tener más de una expresión de conjunto interna una al lado de la otra no producirá ningún error, pero solo se utilizará la que esté más a la derecha cuando se evalúe.

Heredar las expresiones de conjunto

Cuando una expresión de agregación contiene más de una expresión de conjunto como parte de una cadena, las expresiones de conjunto se evaluarán una a una de izquierda a derecha. El resultado de cada expresión de conjunto es un grupo de conjuntos, potencialmente uno por cada dimensión. Los conjuntos se pasan a la siguiente expresión de conjunto, que puede realizar más cambios antes de pasar a la siguiente.

Mientras cada expresión de conjunto opere sobre dimensiones diferentes, no habrá conflictos entre ellas, y todos los conjuntos se conservarán hasta el final de la cadena (y se aplicarán durante la agregación). Hay una excepción a esta regla, que a veces se aplica cuando una dimensión en una expresión de conjunto ha producido un conjunto vacío. Consulte lo siguiente para obtener más información:

Conjuntos de selecciones vacíos

Cuando se evalúa una dimensión en una expresión de conjunto, es posible que el conjunto no contenga ningún dato. Esto se denomina conjunto vacío. Los conjuntos vacíos pueden darse en muchos escenarios, como los siguientes:

  • Definición incorrecta de la expresión. Por ejemplo, al intentar buscar un valor 2025 con una expresión de conjunto {<OrderYear={‘2025’}>}, la expresión se escribe como {<OrderYear={‘0025’}>}.

  • Durante el análisis, se realiza una selección en una dimensión diferente a la expresada en la expresión y esta selección da como resultado que no haya datos disponibles para la dimensión de la expresión de conjunto. Por ejemplo, un usuario realiza una selección en Region='Europe' y un conjunto de filtros de expresión para {<ProductCategory={‘Shirts’}>} Sum (Sales). Si no se venden camisas en Europa, la expresión de conjunto contiene un conjunto vacío.

  • El conjunto vacío se define explícitamente en la expresión. Esto no es común ni útil, pero es técnicamente posible. Por ejemplo: {<Year={}>}

Borrado implícito de conjuntos de selección

Si el resultado después de aplicar una expresión de conjunto es un conjunto vacío para cualquiera de las dimensiones (consulte Conjuntos de selecciones vacíos), y hay una expresión de conjunto más que se aplica después de esto, entonces el conjunto de selección para esa dimensión se borrará (restaurado de nuevo al conjunto completo) justo antes de que se aplique esa siguiente expresión de conjunto. Un conjunto de selecciones borrado significa que se incluyen todos los valores. Sin embargo, tenga en cuenta que esta eliminación o borrado solo se produce si hay una o más expresiones de conjunto externas adicionales que se aplican después de la expresión de conjunto en la que se produce el conjunto vacío.

He aquí un ejemplo de cuándo se borrará un conjunto de selecciones:

{<Year={}>} {<Region={"Europe"}>} Sum( Sales )

Year={} creará el conjunto vacío para la dimensión Year. Esto significa que el conjunto de selecciones para Year se borra cuando el conjunto se transmite a la siguiente expresión de conjunto, que contiene Region={Europe}. Tenga en cuenta que el borrado de selecciones únicamente se produce para una única dimensión. Los conjuntos de otras dimensiones —incluidos los conjuntos dentro de la misma expresión de conjunto— se seguirán transmitiendo sin modificaciones.

He aquí otro ejemplo de un conjunto de selecciones borrado:

{<Year={}, Product={"XI345"}>} {<Region={"Europe"}>} Sum(Sales)

En el ejemplo anterior, ocurre lo siguiente:

  • Se aplican los conjuntos de selección Product={"XI345"} y Region={"Europe"}.

  • Year={} no se aplica. Esto se debe a que ese conjunto se borra cuando se aplica la última expresión de conjunto:{<Region={"Europe"}>}.

Mover un componente de expresión de conjunto a la última expresión de conjunto externa evitará que se produzca un borrado implícito. Tome este ejemplo:

{<Product={"XI345"}>} {<Year={}, Region={"Europe"}>} Sum(Sales)

Aquí, hemos trasladado la expresión Year a la última expresión de conjunto de la cadena. Esto evitará que se produzca el borrado implícito y el conjunto vacío para la dimensión Year se utilizará realmente para la agregación Sum.

En cualquier caso, pueden producirse comportamientos no deseados cuando se borran los conjuntos de selección. Para mejorar la experiencia de análisis y facilitar la escritura de cadenas de expresiones de conjunto, utilice el indicador de conservación de conjuntos vacíos. Para más información, vea Indicador de conservación de conjuntos vacíos (expresiones de conjunto externas).

Indicador de conservación de conjuntos vacíos (expresiones de conjunto externas)

Utilice el símbolo & (indicador de conservación de un conjunto vacío) para simplificar el modelo de evaluación de las expresiones de conjunto externas. Por ejemplo:

{& <Year={}, Product={XI345}>} {<Region={Europe}>} Sum( Sales )

En este ejemplo, Year={} define un conjunto de selección vacío para Year. Sin el símbolo &, la expresión {<Region={Europe}>} haría que se borrara el conjunto de selecciones vacío Year, con lo que se utilizarían todos los datos en el cálculo de la agregación. El símbolo & obliga a la agregación a respetar el conjunto de selecciones vacío Year, lo que da como resultado un resultado de salida más comprensible.

Para más detalles sobre el indicador de conservación de conjuntos vacíos, consulte Indicador de conservación de conjuntos vacíos.

¿Esta página le ha sido útil?

Si encuentra algún problema con esta página o su contenido (errores tipográficos, pasos que faltan o errores técnicos), no dude en ponerse en contacto con nosotros.