Power BI中的动态过滤

时间:2017-08-28 11:32:55

标签: javascript c# powerbi

我已将强力报告嵌入网页。我在报告中有一个名为'Query1'的表,其中我有StudentId列,其数据类型为text。我想通过将特定的StudentId传递到网页来呈现网页上的报告。

为此,我尝试了以下代码: -

@model PowerBIEmbedded_AppOwnsData.Models.EmbedConfig

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<script src="~/scripts/powerbi.js"></script>

@if (!string.IsNullOrEmpty(Model.ErrorMessage))
{
    <div id="errorWrapper">
        <h2>
            Error
        </h2>
        @Model.ErrorMessage
    </div>

    return;
}

<div id="reportContainer"></div>

@Html.Partial("LiveDemoLink")

<script>
    var accessToken = "@Model.EmbedToken.Token";

    // Read embed URL from Model
    var embedUrl = "@Html.Raw(Model.EmbedUrl)";

    var embedReportId = "@Model.Id";

    var models = window['powerbi-client'].models;

    const filter = {
        $schema: "http://powerbi.com/product/schema#basic",
        target: {
            table: "Query1",
            column: "StudentId"
        },
        operator: "In",
        values: ["1524"]
    };
    var config = {
        type: 'report',
        tokenType: models.TokenType.Embed,
        accessToken: accessToken,
        embedUrl: embedUrl,
        id: embedReportId,
        permissions: models.Permissions.All,
        settings: {
            filterPaneEnabled: true,
            navContentPaneEnabled: true
        }
    };

    var reportContainer = $('#reportContainer')[0];

    var report = powerbi.embed(reportContainer, config);

    if (report) {
        report.setFilters([filter])
            .then(function (result) {
                console.log(result);
            })
            .catch(function (errors) {
                console.log(errors);
            });
    }
</script>

但是,动态过滤不成功,我也在报告过滤器中设置了StudentId。

我尝试将其数据类型更改为整数,但它无效。 在这种情况下该怎么办?

2 个答案:

答案 0 :(得分:0)

  1. 您可以在加载配置中传递过滤器以避免稍后使用setFilters()。
  2. 如果您不确定过滤器格式是否正确,我可以建议您快速处理此问题:

    • 使用过滤器窗格设置您想要的过滤器(与Power BI本身一样)。
    • 调用report.getFilters()并查看返回的JSON与您的不同。
    • 剩下要做的就是根据需要修改ID。

答案 1 :(得分:0)

您的代码看起来很不错,但您错过了这一步:例如report.off(&#34;已加载&#34;)。 下面是打字稿代码,您可以将其更改为js:

report.off("loaded");
report.on("loaded", e =>{
            console.log("loaded");
            this.report.setFilters(filters)
            .then(filters=>{
                console.log("filters:" + filters);
            });
            this.report.off("error");
        } );

快乐编码