Forum Discussion

Nojustice's avatar
Nojustice
Advocate I
4 years ago

SelectAll is not firing dataSelectedEvent in first instance

Hello,

 

We have a report with a multi-select slicer which has the "Select All" attribute added,

 

When the report is rendered the slicer value is of a set value "Value1", if we change that value to "Select All", the dataSelected Event is not fired.

 

It seems like you have to select another options first and then "Select All" for it to eventually decide that the event should be fired

 

Unfortunately I cannot provide an example of this as the sample report on the sandbox does not have the select all option on the multi-select slicers

 

Can this be fixed?

3 Replies

  • the code snippet has been supplied.

     

    I have contacted MS directly and they have classified this issue as a bug and it is being worked on currently.

    I will update this post when I have information to share

  • I have an example of it here, it is not necessarily the "Select All", on a multiselect and you untick elements it does not fire.

    Here is a code example, here I am setting the slicer dynamically to "Abbas MA-01" with SetSlicerState.

    If i was to untick "Abbas MA-01" so everything was considered, the dataSelected event does not fire.

     

    let loadedResolve, reportLoaded = new Promise((res, rej) => { loadedResolve = res; });
    let renderedResolve, reportRendered = new Promise((res, rej) => { renderedResolve = res; });
    
    // Get models. models contains enums that can be used.
    models = window['powerbi-client'].models;
    
    // Embed a Power BI report in the given HTML element with the given configurations
    // Read more about how to embed a Power BI report in your application here: https://go.microsoft.com/fwlink/?linkid=2153590
    function embedPowerBIReport() {
        /*-----------------------------------------------------------------------------------+
        |    Don't change these values here: access token, embed URL and report ID.          | 
        |    To make changes to these values:                                                | 
        |    1. Save any other code changes to a text editor, as these will be lost.         |
        |    2. Select 'Start over' from the ribbon.                                         |
        |    3. Select a report or use an embed token.                                       |
        +-----------------------------------------------------------------------------------*/
        // Read embed application token
        let accessToken = EMBED_ACCESS_TOKEN;
    
        // Read embed URL
        let embedUrl = EMBED_URL;
    
        // Read report Id
        let embedReportId = REPORT_ID;
    
        // Read embed type from radio
        let tokenType = TOKEN_TYPE;
    
        // We give All permissions to demonstrate switching between View and Edit mode and saving report.
        let permissions = models.Permissions.All;
    
        // Create the embed configuration object for the report
        // For more information see https://go.microsoft.com/fwlink/?linkid=2153590
        let config = {
            type: 'report',
            tokenType: tokenType == '0' ? models.TokenType.Aad : models.TokenType.Embed,
            accessToken: accessToken,
            embedUrl: embedUrl,
            id: embedReportId,
            permissions: permissions,
            settings: {
                panes: {
                    filters: {
                        visible: true
                    },
                    pageNavigation: {
                        visible: true
                    }
                }
            }
        };
    
        // Get a reference to the embedded report HTML element
        let embedContainer = $('#embedContainer')[0];
    
        // Embed the report and display it within the div container.
        report = powerbi.embed(embedContainer, config);
    
        // report.off removes all event handlers for a specific event
        report.off("loaded");
    
        // report.on will add an event handler
        report.on("loaded", function () {
            loadedResolve();
            report.off("loaded");
        });
    
        // report.off removes all event handlers for a specific event
        report.off("error");
    
        report.on("error", function (event) {
            console.log(event.detail);
        });
    
        // report.off removes all event handlers for a specific event
        report.off("rendered");
    
        // report.on will add an event handler
        report.on("rendered", function () {
            renderedResolve();
            report.off("rendered");
        });
    }
    
    embedPowerBIReport();
    await reportLoaded;
    
    // Insert here the code you want to run after the report is loaded
    // report.off removes all event handlers for a specific event
    report.off("dataSelected");
    
    // report.on will add an event listener.
    report.on("dataSelected", function (event) {
        let data = event.detail;
        console.log("Event - dataSelected:\n", data);
    });
    
    
    
    // Create the filter object. For more information see https://go.microsoft.com/fwlink/?linkid=2153364
    const filter = {
        $schema: "http://powerbi.com/product/schema#basic",
        target: {
            table: "Product",
            column: "Product"
        },
        filterType: models.FilterType.BasicFilter,
        operator: "In",
        values: ["Abbas MA-01"],
        requireSingleSelection: true
    };
    
    // Retrieve the page collection and get the visuals for the active page.
    try {
        const pages = await report.getPages();
    
        // Retrieve the active page.
        let page = pages.filter(function (page) {
            return page.isActive;
        })[0];
    
        const visuals = await page.getVisuals();
    
        // Retrieve the target visual.
        let slicer = visuals.filter(function (visual) {
            return visual.type === "slicer" && visual.name === "93f1e286b34bd2112237";
        })[0];
    
        // Set the slicer state which contains the slicer filters.
        await slicer.setSlicerState({ filters: [filter] });
        console.log("slicer was set.");
    }
    catch (errors) {
        console.log(errors);
    }
    
    
    await reportRendered;
    
    // Insert here the code you want to run after the report is rendered