2017-05-16 10 views
1

Impossible de trouver cette réponse en ligne, alors j'ai décidé de poster la question puis la réponse.Comment puis-je accéder à columns.roles dans le développement Power BI?

J'ai créé une table dans le fichier capabilities.json:

"dataRoles": [ 
    { 
     "displayName": "Stakeholders", 
     "name": "roleIwant", 
     "kind": "GroupingOrMeasure" 
    } 
... 
"dataViewMappings": [   
    { 
     "table": { 
      "rows": { 
       "select": [ 
        { 
        "for": { 
         "in": "roleIwant" 
        } 
        } 
       ] 
      } 
     } 
    } 
] 

j'ai réalisé que je ne pouvais pas simplement mettre, par exemple, les données de légende de la première catégorie, car la première catégorie vient de la première pièce des données que l'utilisateur entraîne, quelle que soit sa position. Donc, s'ils établissent un tas de données différentes dans Power BI en ligne, par exemple, puis supprimez-en un, les commandes de tout sont gâchées. Je pensais que la meilleure façon de régler cela serait d'identifier le rôle de chaque colonne et de partir de là.

Lorsque vous cliquez sur Dataview show, la hiérarchie montre clairement:

...table->columns[0]->roles: { "roleIwant": true } 

Je pensais que je pouvais y accéder comme:

...table.columns[0].roles.roleIwant 

mais ce n'est pas le cas. Je compilait en utilisant début de pbiviz à partir de l'invite de commande, ce qui me donne une erreur:

error TYPESCRIPT /src/visual.ts : (56,50) Property 'roleIwant' does not exist on type '{ [name: string]: boolean; }'. 

Pourquoi puis-je pas accéder à ce de cette façon? Je pensais parce que nativement, les rôles ne contiennent pas la propriété roleIwant, ce qui est vrai, mais cela ne devrait pas importer ...

Répondre

1

La solution est en fait assez simple. Je n'ai pas d'aide 'point' (en tapant un point après les rôles pour les suggestions), mais vous pouvez utiliser des propriétés d'objet régulières pour les rôles. La commande pour ce cas serait:

...table.columns[0].roles.hasOwnProperty("roleIwant") 

Et la partie de code fonctionnel:

... 
columns.forEach((column) =>{ 
     if(column.roles.hasOwnProperty("roleIwant")){ 
      roleIwantData = dataview.categorical.categories[columns.indexOf(column)].values; 
     }) 

Si elle a la propriété, il appartient à ce rôle. De là, les données sauvegardées contiendront les valeurs réelles de ce rôle! La seule chose que je voudrais ajouter ici est que si une colonne est utilisée pour plusieurs rôles, en fonction de la façon dont vous codez, vous voudrez peut-être faire plusieurs pour vérifier les différents rôles appartenant à une colonne au lieu de if else.

Si quelqu'un a d'autres conseils sur le sujet, ou une meilleure façon de le faire, par tous les moyens. J'ai cherché l'erreur, partout pour trouver des façons d'accéder aux rôles des colonnes, et je n'ai rien obtenu, alors j'espère que ce sujet aidera quelqu'un d'autre. Et désolé pour la verbosité - j'ai tendance à beaucoup parler.