PowerBI Javascript-设置页面过滤器而无需先设置报告过滤器

时间:2018-09-05 11:46:28

标签: javascript powerbi powerbi-embedded

从上周开始,当我尝试应用页面过滤器而不先设置报告过滤器时,我在控制台上收到错误:未处理的承诺拒绝:无法在“窗口”上执行“ postMessage”:TypeError:无法读取属性“ instanceOfIVisualLevel”的undefined无法克隆...

使用演示,可以对此进行测试:https://microsoft.github.io/PowerBI-JavaScript/demo/v2-demo/index.html#

  1. 样品报告
  2. 点击“运行”
  3. 点击“互动”
  4. 转到“过滤器和切片器”,然后单击“设置页面过滤器”
  5. 点击运行以应用页面过滤器
  6. 检查浏览器控制台

出什么问题了?演示中是否缺少某些内容?

1 个答案:

答案 0 :(得分:0)

事实证明,这是Power BI Embedded后端存在的问题...

https://github.com/firebase/functions-samples/blob/master/quickstarts/thumbnails/functions/index.js

  

使用Power BI嵌入式javascript API设置或获取页面级过滤器或视觉级过滤器时,客户可能会收到错误消息。解决方法是,客户可以在负载配置中传入任何过滤器对象。工程师正在调查此问题。下次更新时间:太平洋标准时间(PDT)上午9/10/18。

但是,截至本回答之时,此问题尚未解决,Power BI支持页面指出下一次更新将在9月14日(2018)PDT 10:00。

但是,有一个非常简单的解决方法。确保将一个空的过滤器数组传递到embed配置对象中,一切正常。

<?php

session_start(); 

// Define an array with pass as key and the value is the url to redirect
$passToUrl = [
    '1234p' => 'http://www.google.com',
    '5678n' => 'http://yahoo.com'
];

if (isset($_POST['btn_go'])) {
    if ($_SESSION['count'] >= 3) {
        $msg['msg'] = "max_count";
    } else if(array_key_exists('pwd', $_POST)) { // Test if the user submitted a pass before using it
        $pwd = trim($_POST['pwd']);
        // The pass is defined in the array 
        if (array_key_exists($pwd, $passToUrl)) {
            $_SESSION['count'] = 0;
            $_SESSION['user_auth'] = 1;
            // let's redirect to the good url
            header('Location: ' . $passToUrl[$pwd]);
            exit();
        } else {
            $_SESSION['count'] = $_SESSION['count'] + 1;
            $msg['msg'] = "wrong";
        }
    }

    echo json_encode($msg);

} else {
    echo json_encode(["msg" => "wrong"]);
}

然后,您应该可以按照自己喜欢的顺序显式设置报告/页面/视觉过滤器。