Dashboard Embeding

Hi all, I’m having a bit of an issue with the embedding dashboard. I’ve been able to get embed dashboard to load in my app, however the individual tiles will not load any data. I get the following message in each of the tiles… “There was a problem displaying this chart.”.

I took a look at the network traffic and can see the API calls for each tile. The response I’m getting back from the Metabase API is “Unknown parameter :$type.”. I’ve tried different dashboards, some with parameters and others with no parameters with the same result.

Has anybody else encounter the same issue?

Cheers

Hi @lmeta
Which version of Metabase? Please post “Diagnostic Info” from Admin > Troubleshooting.
What errors do you see in the Metabase log, when the cards are not loading? Admin > Troubleshooting > Logs
And which language are you embedding with?

Hi @flamber,

Version: v0.33.6
Language: C# .net MVC (followed this example JWT embedding with .Net )

[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE 200 56.0 ms (11 DB calls) Jetty threads: 4/50 (3 idle, 0 queued) (77 total active threads) Queries in flight: 0
[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/session/properties 200 108.0 ms (1 DB calls) Jetty threads: 3/50 (4 idle, 0 queued) (77 total active threads) Queries in flight: 0
[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE/dashcard/39/card/23 400 7.3 ms (2 DB calls)
“Unknown parameter :$type.”

[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE/dashcard/40/card/21 400 4.8 ms (2 DB calls)
“Unknown parameter :$type.”

[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE/dashcard/41/card/16 400 11.6 ms (2 DB calls)
“Unknown parameter :$type.”

[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE/dashcard/42/card/25 400 6.9 ms (2 DB calls)
“Unknown parameter :$type.”

[9a8354b7-47fa-436c-a968-542ae66f75ce] 2019-12-05T11:18:51+13:00 DEBUG metabase.middleware.log GET /api/embed/dashboard/eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0SGVhZGVyLCBTeXN0ZW0uSWRlbnRpdHlNb2RlbC5Ub2tlbnMuSnd0IiwiYWxnIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjaG1hYy1zaGEyNTYiLCJ0eXAiOiJKV1QifQ.eyIkdHlwZSI6IlN5c3RlbS5JZGVudGl0eU1vZGVsLlRva2Vucy5Kd3QuSnd0UGF5bG9hZCwgU3lzdGVtLklkZW50aXR5TW9kZWwuVG9rZW5zLkp3dCIsInJlc291cmNlIjp7IiR0eXBlIjoiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYl0sW1N5c3RlbS5JbnQxNiwgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJkYXNoYm9hcmQiOjJ9LCJwYXJhbXMiOnsiJHR5cGUiOiJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliXSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWJdXSwgbXNjb3JsaWIiLCJDYXRlZ29yeSI6IjU5ZWZhOGQ1OGUyYmYzMDQ3Yzg1MzZjNCJ9fQ.SJInjsYnmv_1eAe0uK2HKU3AmLg64iXeAjUUIxWDkXE/dashcard/43/card/9 400 3.8 ms (2 DB calls)
“Unknown parameter :$type.”

{
“browser-info”: {
“language”: “en-US”,
“platform”: “Win32”,
“userAgent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36”,
“vendor”: “Google Inc.”
},
“system-info”: {
“java.runtime.name”: “OpenJDK Runtime Environment”,
“java.runtime.version”: “11.0.3+7”,
“java.vendor”: “AdoptOpenJDK”,
“java.vendor.url”: “https://adoptopenjdk.net/”,
“java.version”: “11.0.3”,
“java.vm.name”: “OpenJDK 64-Bit Server VM”,
“java.vm.version”: “11.0.3+7”,
“os.name”: “Linux”,
“os.version”: “4.14.152-98.182.amzn1.x86_64”,
“user.language”: “en”,
“user.timezone”: “GMT”
},
“metabase-info”: {
“databases”: [
“bigquery”,
“h2”,
“googleanalytics”
],
“hosting-env”: “elastic-beanstalk”,
“application-database”: “postgres”,
“run-mode”: “prod”,
“version”: {
“date”: “2019-11-19”,
“tag”: “v0.33.6”,
“branch”: “release-0.33.x”,
“hash”: “be1e0e1”
},
“settings”: {
“report-timezone”: null
}
}
}

@lmeta You should probably post your embed code.
Are you using locked parameters? Do you have the locked parameters defined?
I know there’s no .Net example, when publishing dashboard/question for embedding, but the code examples for the other languages should give you a hint to what you need to input.

Thanks @flamber, I’ve tried dashboards with parameters and some with no parameters and I get the same error, that is the confusing part.

@lmeta Okay, but post your code. It’s easier to see potential errors.

Thanks!

    public string GetDashboardURL()
    {

        return "https://meta.MyDomain.com/" + "embed/dashboard/" + getToken(2) + "#bordered=true&titled=true";
    }


    private string getToken(Int16 dashboardId)
    {
        //key is the METABASE_SECRET_KEY shown in the sample. It’s the same for all dashboards on the server. Should really be in web.config. Put your value here.
        string key = "MY KEY";
        //some gubbins to setup the credential generation
        var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
        var credentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
        var header = new JwtHeader(credentials);
        //the awkward bit. Looks simpler in the sample code, but .Net JWT needs dictionaries to pass the values as it doesn’t handle any complexity very well…
        //dash contains the information about the resource. It could be ‘question’ if that’s all you’re embedding.
        var dash = new Dictionary<string, Int16>();
        dash.Add("dashboard", dashboardId);

        //Empty dictionary for the params. Anything else gives odd results
        var pars = new Dictionary<string, string>();
       // pars.Add("type", accountId);
        //create the payload
        JwtPayload payload = new JwtPayload
        {
            //resource paramater works (if I change it, I get a different error message
            {"resource",dash } ,
            //params, I've tried a new things, even hardcoding a string value of  "{}",  "{ }",  "",  " ", and  "[ ]".  Different values results in different error messages or the dashboard not loading at all...
            {"params" , pars},
            //exp paramater works (if I change it, I get a token expires message
            {"exp",  Math.Round(ConvertToUnixTimestamp(DateTime.UtcNow)) + (10 * 60)}
        };
        //Finally some more gubbins before the token string is passed back
        var secToken = new JwtSecurityToken(header, payload);
        var handler = new JwtSecurityTokenHandler();
        var tokenString = handler.WriteToken(secToken);
        return tokenString;
    }

@lmeta
Have you tried using the debugger at https://jwt.io/ to validate what you are generating?

When I debug your embed string (that’s the first line from your log, GET /api/embed/dashboard/...the interesting part... 200 56.0 ms), then it’s showing a bunch of System.Collections.Generic.Dictionary stuff instead of a clean object.

Looks like it’s something to do with deserialization:
https://stackoverflow.com/questions/33347148/unable-to-deserialize-string-to-dictionarystring-string