Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Sreejith
Frequent Visitor

How to define Table DataViewMappings

Hi,

I want to make a custom visual with just two columns, one for text and other for a link button.

Ho can I define the dataview model.? I couldnot find any doc that defines a dataview for Table like one for Categorical

 

dataViewMappings: [{
                             categorical(Table?): {
                                            categories: {
                                                              for: { in: 'Category' },
                                                                          dataReductionAlgorithm: { top: {} }
                                                                        },
                                                             values: {
                                                           select: [{ bind: { to: 'Message' } }]
                                                                },
                                              }
                                  }],

 

How can I achieve this?

Thank you.

1 ACCEPTED SOLUTION
itayrom
Resolver II
Resolver II

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.

View solution in original post

3 REPLIES 3
itayrom
Resolver II
Resolver II

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.

Greg_Deckler
Super User
Super User

I am not aware of a way to have a link button in a visual currently.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...

@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

XFrame error.png"

 

 

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.