如何在 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。
如果有人对这个话题有任何进一步的建议,或者有更好的方法,请务必。我搜索了错误,到处寻找访问列角色的方法,但一无所获,所以希望这个主题对其他人有所帮助。抱歉啰嗦——我话多。
无法在线找到此答案,因此决定 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。
如果有人对这个话题有任何进一步的建议,或者有更好的方法,请务必。我搜索了错误,到处寻找访问列角色的方法,但一无所获,所以希望这个主题对其他人有所帮助。抱歉啰嗦——我话多。