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

How can I access columns.roles in Power BI development?

无法在线找到此答案,因此决定 post 先问问题再回答。

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

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

我意识到我不能简单地设置,例如,第一类的图例数据,因为第一类来自用户拖入的第一条数据,而不考虑位置。因此,如果他们在 Power BI 在线设置了一堆不同的数据,例如,然后删除了一个,那么一切的顺序都会变得混乱。我认为解决这个问题的最好方法是确定每一列的作用并从那里开始。

当您点击显示数据视图时,层次结构清楚地显示:

...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; }'.

为什么我无法通过这种方式访问​​它?我在想,因为 roles 本身不包含 属性 roleIwant,这是真的,但这不重要......

解决方法其实很简单。我没有得到 '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。

如果有人对这个话题有任何进一步的建议,或者有更好的方法,请务必。我搜索了错误,到处寻找访问列角色的方法,但一无所获,所以希望这个主题对其他人有所帮助。抱歉啰嗦——我话多。