当从Tableau 8.1访问OData feed时,错误的OData格式



我有问题连接到OData feed,因为我得到这个错误消息:"糟糕的OData格式。确保您使用的URL指向有效的OData数据源"

我可以在浏览器中访问url(并且我得到预期的JSON响应),并且我可以通过Excel (Power Query)连接到OData提要。

有人有类似的问题吗?你认为问题出在哪里?

我正在使用Tableau 8.1与Windows 8,我正在通过ASP开发我的OData服务。. NET Web API 2.

Tableau Version 9.0在使用Web API OData时仍然有这个问题,它这样做是因为Tableau要求数据是XML格式的,但没有发送Accept头让服务器知道它。

这是对我有用的。我修改了这段代码(替换了YourDatabaseEntities和YourTable),并将其添加到Microsoft scaffolding创建的每个控制器中:

/// <summary>
/// Class YourTableController.
/// </summary>
public class YourTableController : ODataController
{
    /// <summary>
    /// The database
    /// </summary>
    private YourDatabaseEntities db = new YourDatabaseEntities();
    /// <summary>
    /// Adds Accept header for Tableau which requires XML data but doesn't send a header requesting it
    /// </summary>
    protected void FTLP()
    {
        try
        {
            Request.Headers.Remove("Accept");
        }
        catch { }
        try
        {
            Request.Headers.Add("Accept", "application/atom+xml");
        }
        catch { }
    }
    // GET: odata/YourTable
    /// <summary>
    /// Gets the Your Table.
    /// </summary>
    /// <returns>IQueryable&lt;YourTable&gt;.</returns>
    [EnableQuery]
    public IQueryable<YourTable> GetYourTable()
    {
        FTLP();//Add this to Fix Tableau XML requirement 
        return db.YourTable;
    }
    // GET: odata/YourTable(5)
    /// <summary>
    /// Gets the YourTable.
    /// </summary>
    /// <param name="key">The key.</param>
    /// <returns>SingleResult&lt;YourTable&gt;.</returns>
    [EnableQuery]
    public SingleResult<YourTable> GetYourTable([FromODataUri] DateTime key)
    {
        FTLP();//Add this to Fix Tableau XML requirement 
        return SingleResult.Create(db.YourTable.Where(YourTable => YourTable.Date == key));
    }

///////

检查Tableau日志中的错误信息:My Documents>My Tableau Repository> Logs> log.txt

在我们的例子中,我们看到Tableau将$inlinecount=allpages附加到OData URL,这在OData v4中失败了:

{"error":{"code":null,"message":"系统查询选项'$ inlinaccount '没有定义。

"}}

Tableau只支持OData v2。Denodo可以支持这两个版本。我们安装了v2,并且能够成功连接。以下是来自Tableau Support的反馈:

根据微软的这篇文章,内联帐户功能是没有包含在OData版本4中:https://msdn.microsoft.com/en-us/library/dd942040.aspx。这是其中之一Tableau Desktop无法连接到该版本的原因OData。

我能找到的关于OData V2需求的唯一Tableau文档是这样的:

Tableau连接到OData V2,不支持浏览OData服务文档。http://onlinehelp.tableau.com/current/pro/online/windows/en-us/help.htm examples_odata.html

基于这里的其他答案,我们最初关心json和atom格式,但这对我们来说不是问题。一旦连接正常,我们意识到Tableau不能使用与OData的实时连接,所以我们还是回到了ODBC !

请确保您使用的是OData V2,而不是OData服务文档(从2016年8月起,Tableau v 9.3.5及以下版本)。

有两个选项可以解决这个问题:

  1. 在Accept头文件中添加'application/json'。
  2. 将$格式附加到原始URL,例如,~/Employees?application/json格式美元=

现在在最新的ODL(6.3)中,除了元数据文档之外,只有json支持有效负载

最新更新