0

Power BI 組み込み js ライブラリを使用して高度なフィルターをインスタンス化し、それを setFilters() 関数を介して埋め込みレポートに適用する角度 1.5 アプリケーションがあります。

reportsCtrl.js

function onEmbedded(report) {
    vm.embededReport = report;
    if (vm.activeFilter) {
        vm.embededReport.setFilters([vm.activeFilter]);
    }
}

function buildFilter() {
    var date1 = new Date(vm.selectedDate.toDateString());
    var date2 = new Date(date1);

    //add one day via mutator setDate function
    date2.setDate(date1.getDate() + 1);

    vm.activeFilter = new pbi.models.AdvancedFilter(
        {
            table: 'tblMessage',
            column: 'event_timestamp'
        },
        'And',
        [{
            operator: 'GreaterThanOrEqual',
            value: date1
        },
        {
            operator: 'LessThan',
            value: date2
        }]
    );

    if (vm.embededReport) {
        vm.embededReport.setFilters([vm.activeFilter]);
    }
}

function loadReport(reportId) {
    vm.reportConfig = null;
    reportService.getReport(reportId, facilityId).then(function (response) {
        //merge report with default configurations
        vm.reportConfig = angular.merge({}, defaultReportConfig, response);
    });
}

reports.tpl.html

<h1>{{vm.message}}</h1>
<div ng-repeat="report in vm.reports">
   <pre>{{report | json}}</pre>
   <button ng-click="vm.loadReport(report.id)">embed</button>
</div>
<button ng-click="vm.buildFilter()">
    Add Filter
</button>

<h2>Acitve Filter!</h2>
<pre>{{vm.activeFilter | json}}</pre>
<div>
   <powerbi-component ng-if="vm.reportConfig" options="vm.reportConfig" on-embedded="vm.onEmbedded($embed)" ></powerbi-component>
</div>

フィルターを適用すると、次の 3 つのエラーが発生します。

  • 「.operator が無効です。必要な制約を満たしていません」

  • 「.conditions.0.value が無効です。タイプの制約を満たしていません」

  • 「フィルターが無効です」

ドキュメントから判断すると、フィルターは正しく構造化されていると思いますが、アイデアはありますか? 私が見逃している小さな何かのように感じます..

4

1 に答える 1

1

私は最終的にこれを理解することができました。他の誰かに役立つ場合に備えて、ここに回答を投稿してください。powerbi 組み込みライブラリのフィルター オブジェクトの日付は、次のようにフォーマットする必要があります。

"2016-12-01T18:52:11.148Z"

JavaScript 日付オブジェクト .toISOString() または .toJSON() を使用すると、うまくいきます。

于 2016-12-01T19:02:17.230 に答える