Excel 2010 PowerPivot: comment afficher des éléments sans données?

12

Dans les tableaux croisés dynamiques Excel standard, il existe une option pour les champs qui vous permettent de forcer l'affichage de tous les éléments même s'il n'y a aucun résultat pour votre sélection actuelle. Voici l'option:

Boîte de dialogue Paramètres du champ du tableau croisé dynamique

Cependant, à l'aide du complément PowerPivot pour Excel 2010, cette option est grisée. Existe-t-il une solution pour que je puisse forcer tous les résultats à apparaître?

Exemple de scénario - nombre de bananes vendues par mois. Si je ne vends aucune banane en août, le tableau powerpivot n'affiche pas du tout de colonne pour août, il saute simplement de juillet à septembre. J'ai besoin d'août pour apparaître, avec soit un nombre vierge de bananes, soit zéro.

Des idées? Peut-être qu'une expression DAX est requise?

EDIT : pour répondre à la question de harrymc, j'ai créé ce tableau croisé dynamique en sélectionnant Tableau croisé dynamique dans ce menu dans la fenêtre PowerPivot.

Menu d'insertion de tableau croisé dynamique PowerPivot

Andi Mohr
la source
Sur un ensemble de données PowerPivot, vous ne pouvez pas ajouter des éléments sans données, il est donc naturel que "Afficher les éléments sans données" soit grisé. Utilisez-vous un tableau croisé dynamique aplati comme décrit ici ?
harrymc
Merci pour la réponse harrymc, je n'utilise pas de tableau croisé dynamique aplati, j'ai utilisé un tableau croisé dynamique standard (voir l'image ci-dessus).
Andi Mohr
Sur votre premier point, je ne suis pas sûr de vous avoir bien compris. Vous dites que vous ne pouvez pas ajouter d'articles sans données, mais mon jeu de données inclut les ventes d'août pour les pommes. Cela signifie normalement que l'activation de "Afficher les éléments sans données" affiche la colonne d'août. Êtes-vous en train de dire que les tableaux croisés dynamiques tirant des données PowerPivot se comportent différemment de toute autre source de données?
Andi Mohr

Réponses:

5

En fait, c'est une meilleure solution. Merci à Alberto Ferrari pour celui-ci.

Vous devez créer une table Mois (c'est-à-dire une liste de noms de mois, janvier / février / mars, etc. - une table liée fonctionnera très bien) et créer une relation entre votre nouvelle table Mois et votre table de faits.

Écrivez ensuite une mesure comme celle-ci:

NeverBlankUnits:=IF( ISBLANK( SUM(FruitSales[Units]) )
                      , 0
                      , SUM(FruitSales[Units]) 
                   )

EDIT : lorsque vous ajoutez votre colonne de nouveaux mois dans votre tableau croisé dynamique, vous pouvez trouver que le tri par défaut est frustrant par ordre alphabétique; Avril, août, décembre, février ... Voici un excellent tutoriel vous montrant comment contourner ce problème.

Andi Mohr
la source
0

Une solution de contournement peut être possible pour utiliser une expression d'analyse de données (DAX) pour remplacer les blancs par des zéros.

DAX peut forcer un zéro au lieu d'un blanc lorsqu'aucune donnée n'existe dans la table de faits mais que vous souhaitez que la ligne apparaisse dans le tableau croisé dynamique.

Pour une simple feuille de calcul avec Depts, Divisions et une table de faits appelée Numbers, et avec une seule colonne "D" contenant un nombre à additionner, écrivez le code DAX de cette manière:

=IF (
    COUNTROWS (Divisions) > 0; 
    IF (ISBLANK (SUM (Numbers[D])), 0, SUM (Numbers[D]))
)

Pour plus d'informations, voir:
Comment utiliser DAX dans les expressions d'analyse de données du complément PowerPivot (DAX) d' Excel
dans PowerPivot

Cette approche a été initialement suggérée dans le fil Afficher les éléments sans données sur les lignes .

harrymc
la source
Merci - je regarde cette approche pour voir si je peux la faire fonctionner. La première chose que j'ai remarquée est une petite faute de frappe dans la formule - vous avez un point-virgule au lieu d'une virgule. (Tout comme le message original d'AlbertoFerrari sur le lien.)
Andi Mohr
Malheureusement, cela ne semble pas faire l'affaire. J'ai adapté la formule suivante: Units_2:=IF (COUNTROWS('FruitSales') > 0,IF(ISBLANK (SUM (FruitSales[Units])), 0, SUM (FruitSales[Units]))). Le tableau croisé dynamique montre uniquement les unités vendues en juillet et septembre.
Andi Mohr
Si aucune autre solution ne peut être trouvée, il reste à aplatir le tableau croisé dynamique dans une feuille de calcul locale. L' article auquel j'ai lié avant pourrait aider.
harrymc
0

Une méthode de force brute serait de créer une mesure pour chaque mois. Tant qu'une des colonnes du mois contient des données, toutes les colonnes du mois apparaissent. La création de toutes ces mesures individuelles est cependant très fastidieuse - pas idéale.

=CALCULATE(
   SUM([Units])
   ,Filter('FruitSales',[Month Name]="August")
   )
Andi Mohr
la source
0

cela fonctionne pour moi:

= if (sum (calender [Date])> 0; if (isblank (sum (Sales_SalesOrderDetail [LineTotal])); 0; sum (Sales_SalesOrderDetail [LineTotal])))

Jens
la source
D'où calendar[Date]vient-il? Ce n'est pas dans mon exemple de scénario, alors comment avez-vous ajouté cela et comment ce tableau est-il lié dans PowerPivot?
Andi Mohr