2017-06-29 2 views
1

J'essaie d'ajouter un membre calculé à mon cube, ce qui renverra le premier exercice où il y a des données dans une mesure particulière.Force le membre calculé au cube entier

Le but est de supprimer (c'est-à-dire de NULLIFIER) diverses mesures calculées d'une année à l'autre lorsque l'année est la première année: cette année, la comparaison avec l'année précédente n'a pas de sens.

J'ai ce jusqu'à présent:

WITH MEMBER Measures.DataStartYear_Sales 
AS 
HEAD(
    NONEMPTY([Calendar].[Fiscal Periods].[Fiscal Year].Members,[Measures].[QuantityOrdered]) 
    ,1).Item(0).Properties("NAME") 

Au moment:

a. Il s'agit d'une mesure à portée de requête, car c'est plus facile à expérimenter.

b. Il retourne le nom de la première année, car c'est plus facile à voir. Finalement, je vais simplement renvoyer le membre lui-même, et faire une comparaison IS contre la hiérarchie de l'année. CurrentMember dans les autres calculs de membre calculés. Le problème auquel je m'attendais, et qui s'est produit, est que je veux seulement que cette mesure soit calculée une fois, sur tout le cube. Mais quand je l'ai utilisé dans une requête, il réagit évidemment au contexte. Par exemple, si je colle la dimension Produits sur ROWS, la valeur de cette mesure sera différente pour chaque ligne, car la première date de commande de chaque produit est différente.

C'est bien sûr utile, mais ce n'est pas ce que je veux. Existe-t-il un moyen de forcer cette mesure à ignorer le contexte de la requête et de toujours retourner la même valeur? J'ai regardé dans SCOPE_ISOLATION et SOLVE_ORDER, mais ils ne font pas ce que j'essaye de faire ici.

Je suppose que je pourrais spécifier un tuple de Dimension1.All, Dimension2.All .... DimensionN.All, couvrant toutes les dimensions dans le cube, mais qui semble salissant et fragile.

Répondre

1

Je pense que vous pourriez être en mesure d'accomplir cela avec des ensembles statiques. Voici un exemple d'utilisation Adventure Works qui produit la même première année quel que soit le contexte:

WITH STATIC SET FirstYear AS 
HEAD 
    (
    NONEMPTY([Date].[Calendar Year].[Calendar Year].MEMBERS, [Measures].[Internet Sales Amount]) 
, 1 
    ) 
    MEMBER FirstYearName AS 
    FirstYear.ITEM(0).NAME 
SELECT 
[Measures].[FirstYearName] ON COLUMNS 
, [Date].[Calendar Year].[Calendar Year].MEMBERS 
    //Add as many dimensions as you like here...for example 
* [Product].[Product].[Product].MEMBERS 
ON ROWS 
FROM 
[Adventure Works] 
; 

sortie Exemple:

enter image description here

Cela devrait, espérons-vous mettre sur la bonne voie.

+0

Brillant! STATIC était ce que je cherchais: mais vous ne pouvez créer que STATIC SET, pas (pour une raison quelconque) CREATE STATIC MEMBER. Une fois que j'ai le set (singleton), c'est facile. – SebTHU