如何在Power BI开发中访问columns.roles?

时间:2017-05-16 17:30:09

标签: roles powerbi dataview hasownproperty

无法在线找到这个答案,所以决定发布问题然后回答。

我在capabilities.json文件中创建了一个表:

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

我意识到我不能简单地设置第一类的图例数据,因为第一类来自用户拖入的第一条数据,无论位置如何。因此,如果他们在Power BI在线设置了大量不同的数据,那么删除一个,一切的订单都搞砸了。我认为解决这个问题的最佳方法是确定每个栏目的作用并从那里开始。

单击show Dataview时,层次结构清晰显示:

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

所以我认为我可以像以下一样访问它:

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

但事实并非如此。我正在使用命令提示符下的pbiviz start编译,这给了我一个错误:

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

为什么我不能以这种方式访问​​它?我在想,因为本地角色不包含属性roleIwant,这是真的,但这不应该......

1 个答案:

答案 0 :(得分:1)

解决方案实际上非常简单。我没有'dot'帮助(在建议的角色后键入一个点),但您可以使用常规对象属性作为角色。这种情况的命令是:

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

功能代码部分:

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

如果它具有该属性,则属于该角色。从这里,保存的数据将包含该角色的实际值!我要在这里添加的唯一内容是,如果一个列用于多个角色,具体取决于您的编码方式,您可能需要执行多个if来检查属于列的不同角色而不是if else。

如果有人对这个主题有任何进一步的建议,或者通过各种方式更好的方法。我搜索了错误,一直在寻找访问列角色的方法,什么都没有,所以希望这个主题可以帮助别人。抱歉这个讽刺 - 我倾向于谈论很多。