1

无法在线找到此答案,因此决定发布问题然后发布答案。

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

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

我意识到我不能简单地设置,例如,来自第一个类别的图例数据,因为第一个类别来自用户拖入的第一条数据,无论位置如何。因此,例如,如果他们在 Power BI 中在线设置了一堆不同的数据,然后删除了一个,那么一切的顺序就会变得一团糟。我认为解决此问题的最佳方法是确定每列的角色并从那里开始。

当您单击显示 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,这是真的,但这没关系......

4

1 回答 1

1

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

...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 的。

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

于 2017-05-16T17:30:08.717 回答