Forum Discussion
How to define Table DataViewMappings
- 10 years ago
Basically, if your dataRoles array is defined as follows:
dataRoles: [ { displayName: 'Title', name: 'title', kind: powerbi.VisualDataRoleKind.Grouping }, { displayName: 'Url', name: 'url', kind: powerbi.VisualDataRoleKind.Grouping } ]Then your dataViewMappings array should look like this(I omitted the conditions[] array for clarity):
dataViewMappings: [{ table: { rows: { select: [{for: { in: 'title' }},{for: { in: 'url' }}] } } }]The above will result in:
1. There will be two field wells displayed in Power BI, titled "Title" and "Url".
2. Your dataViews[index] object will have the following properties(among others...):
- dataViews[index].table.columns[] array, which will contain that will contain some metadata about each column.
- dataViews[index].table.rows[] array, which will contain arrays with values corresponding to the column indices.
- dataViews[index].table.identities[] array, which will contain DataViewScopeIdentity objects corresponding to row numbers.
- dataViews[index].table.identityFields[] array, which will contain the identityFields for each column.
Note that while the "columns" property is belongs to the table object, the other three are actually in its prototype.
A personal recommendation would be to log the dataView to the console and go through it yourself, and maybe play with the different mapping options. It's currently the best way I know to understand how these things work(Due to lack of documentation).
Also, note that you cannot have link buttons inside Power BI visuals. This is a security measure(called Sandboxing) taken by Microsoft, since it can be used to perform various malicious actions, such as Clickjacking and Cross-Site Scripting attacks, which is not something you want to be possible anywhere near your precious confidential corporate data.
I am not aware of a way to have a link button in a visual currently.
Greg_Deckler I could create a link button using SVG and on click it was redirecting.
this.htmlContents = d3.select(options.element.get(0)).append("svg")
.attr("width",400)
.attr("height", 200);
this.htmlContents.append("a").attr("xlink:href", "http://en.wikipedia.org/wiki/")
.append("rect")
.attr("x", 100)
.attr("y", 50)
.attr("height", 100)
.attr("width", 200)
.style("fill", "lightgreen")
.attr("rx", 10)
.attr("ry", 10);
this.htmlContents.append("text")
.attr("x", 200)
.attr("y", 100)
.style("fill", "black")
.style("font-size", "20px")
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.style("pointer-events", "none")
.text("Resolve");
But when I added the same to a table cell, errror occurs "Refused to display "https://app/powerbi.com/www/wiki.org" in a frame because it set X-Frame-Opttions to deny
"