J'ai un cube contenant des stocks des stocks des opérations de vente au détail. Il dispose de 2 groupes de mesure - un contenant le nombre d'unités de stock comptées dans chaque lot de stock-tige (qui est lié au produit, aux dimensions du produit et du temps), et un autre prix contenant des produits (qui est juste lié à la dimension du produit).
Les mesures dans le groupe de mesure des prix utilisent les opérateurs min et max (c'est-à-dire qu'ils montrent le prix minimum ou maximum sur les membres sélectionnés de la dimension des produits).
Il me semble que vous avez correctement configuré le cube et les dimensions (les mesures de prix s'affichent comme prévu) ... Sauf dans le cas suivant:
Si je demande le cube dans Excel et obtenez des unités par heure et par lot, je vois le résultat attendu (voir l'image ci-dessous, filtrée à l'heure = 2015 et cacher des lignes sans données), c'est-à-dire que les lots avec des unités de données de faits pour la sélection Membres de la dimension temporelle.
Si j'ajoute maintenant l'une des mesures de prix (sans changer de filtres), le total des unités est inchangé (comme prévu) mais je vois maintenant chaque membre de la dimension de lot (voir image au dessous de). Il s'agit d'un problème pour les utilisateurs finaux, car tout ce qu'ils veulent, c'est de voir les prix du produit dans les lots précédemment sélectionnés.
D'un point de vue technique, il a un sens de sens - les faits de prix n'ont aucune relation avec le temps, alors ne peuvent donc pas être filtrés par mon filtre de temps comme les unités.
Y a-t-il quelque chose que je puisse faire (dans la conception du cube ou Excel) pour éliminer les éléments de lot sans unités pour les filtres donnés? Remarque: i Impossible d'obtenir les utilisateurs d'écrire des requêtes MDX - Signaler le bâtiment doit rester "Point et clic"!
Edit 27/1 (Ajout d'une capture d'écran supplémentaire pour illustrer étrange effet secondaire du réglage Ignorer les dimensions non liées = Faux par réponse de Tomv)
Comme vous l'avez dit correctement, c'est ce qui se passe lorsque vous essayez d'afficher des mesures sur une dimension auquel ils n'ont pas de relation.
Vous avez essentiellement 2 options
IgnoreUnrelatedDimensions
MDX
Je vous suggère d'essayer le IgnoreUnRelatedDimensions
d'abord, car les mesures seraient mieux agrégées, et NonEmptyCrossJoins
serait en mesure de bénéficier de la Bitmap Indexes
utilisé quand Attribute Relationships
sont définis.
La solution MDX est plus un dernier recours en raison de problèmes de performance possibles et vous auriez également besoin de définir une mesure calculée pour chaque mesure que vous avez. La solution MDX serait probablement complexe ou gâcher vos totaux/montrez des données incorrectes.
IgnoreUnRelateddimensions
Lorsque vous regardez le cube AventureWorks 2012, vous avez cette situation où les employés ne sont pas liés aux "ventes Internet", mais elles sont liées aux "ventes de revendeurs".
Lors de la navigation sur le cube, le résultat est identique à celui lorsque vous ajoutez des mesures des deux groupes de mesure sur la dimension des employés.
Vous pouvez résoudre ce problème en définissant la propriété IgnoreUnrelatedDimensions
sur False
sur le Measure Group
.
Après avoir réparé le cube et rafraîchir le navigateur, le résultat ressemble maintenant à ceci:
Il y a quelques mises en garde, cependant, comme un problème avec le réglage DefaultMember
Si le DefaultMember
n'est pas le All level
Sur l'un des attributs des dimensions non liées, vous ne recevez pas de données agrégées car l'élément par défaut agit toujours comme un filtre, même s'il n'est pas inclus dans votre tableau de pivotement:
Par exemple, après avoir défini le fichier DefaultMember
property sur l'attribut sexiste de la dimension des employés comme celle-ci.
C'est le résultat lorsqu'aucun trancheur n'est inclus dans le rapport. Bien sûr, vous voudriez voir le total ici:
Je semble rappeler d'autres cas de bord avec calculated measures
Mais je ne me souviens pas de la situation spécifique.
solution MDX
Si vous rencontrez dans l'un des cas de bord, vous devez avoir recours à une solution MDX
telle publiée par @Greggallallay, mais cela pourrait finir par être fastidieux et très spécifique à un seul rapport ou à un cas d'utilisation:
CREATE MEMBER CURRENTCUBE .[Measures].[Max Current CP With Units] AS
IIf (
NOT IsEmpty ( [Measures].[Units] ),
[Measures].[Max Current CP],
NULL
) ;
L'inconvénient de cette solution serait que vous découleriez la manière dont les totaux de la façon dont l'apparence et éventuellement présentent des données incorrectes, mais cela pourrait être acceptable dans votre cas spécifique d'informations de prix avec une agrégation min/max, mais une pause totalement pour les sommes et montrerait probablement fausses données à vos utilisateurs.
Par exemple lors de l'exécution de cette requête
WITH MEMBER [Measures].[Filtered internet order count] as
'
IIf (
NOT IsEmpty ([Measures].[Reseller Order Count] ),
[Measures].[Internet Order Count],
NULL)
'
SELECT {[Measures].[Filtered internet order count],[Measures].[Reseller Order Count]} ON 0,
[Employee].[Employees].allmembers ON 1
FROM [Adventure Works]
Produit ce résultat
Ce qui semble également étrange, car le total est identique à chaque membre individuel. Mais cela peut être acceptable dans votre cas spécifique de tarification min/max, je pense que cela affiche principalement de fausses données car il n'y a pas de vente sur Internet pour ces employés.
Je suppose que si vous contrôlez les rapports, ce serait possible. Pour la table pivot ajoutée dans votre édition, je suppose que cela produirait des résultats ok.
Ajoutez cette mesure calculée au cube:
Create Member CurrentCube.[Measures].[Max Current CP With Units] as
IIf(Not IsEmpty([Measures].[Units]),[Measures].[Max Current CP],Null);