Dynamics crm 从Dynamics 365向Power BI获取审核记录详细信息

Dynamics crm 从Dynamics 365向Power BI获取审核记录详细信息,dynamics-crm,odata,powerbi,dynamics-365,Dynamics Crm,Odata,Powerbi,Dynamics 365,通过选择Get Data、选择odata选项并使用url/api/Data/v9.1/audits,我已经能够从Dynamics 365中拉出一个审计表并将其加载到Power BI中。我看到了列RetrieveAuditDetails,但我不明白为什么所有的值都表示函数。有没有一种方法可以扩展它,以与更改相同的方式显示旧值/新值,例如,要扩展到全名的用户ID?当涉及到审核数据时,由于审核数据在数据库中存储为分隔值,OData/Web API REST端点在PowerBI中不太友好 如果是java

通过选择Get Data、选择odata选项并使用
url/api/Data/v9.1/audits
,我已经能够从Dynamics 365中拉出一个审计表并将其加载到Power BI中。我看到了列
RetrieveAuditDetails
,但我不明白为什么所有的值都表示函数。有没有一种方法可以扩展它,以与更改相同的方式显示旧值/新值,例如,要扩展到全名的用户ID?

当涉及到审核数据时,由于审核数据在数据库中存储为分隔值,OData/Web API REST端点在PowerBI中不太友好

如果是javascript或.net应用程序,您可以使用
RetrieveAuditDetails
函数进行迭代调用,在使用
https://crmdev.crm.dynamics.com/api/data/v9.1/audits
。这就是为什么您在其中看到函数

例如:

var parameters = {};
var entity = {};
entity.id = "5701259e-59b8-e911-bcd0-00155d0d4a79";
entity.entityType = "audit";
parameters.entity = entity;

var retrieveAuditDetailsRequest = {
    entity: parameters.entity,

    getMetadata: function() {
        return {
            boundParameter: "entity",
            parameterTypes: {
                "entity": {
                    "typeName": "mscrm.audit",
                    "structuralProperty": 5
                }
            },
            operationType: 1,
            operationName: "RetrieveAuditDetails"
        };
    }
};

Xrm.WebApi.online.execute(retrieveAuditDetailsRequest).then(
    function success(result) {
        if (result.ok) {
            var results = JSON.parse(result.responseText);
        }
    },
    function(error) {
        Xrm.Utility.alertDialog(error.message);
    }
);
更新: 进一步分析-上述
RetrieveAuditDetails
query targeting single
audited
或以下过滤
audits
的输出模式之间没有太大差异

https://crmdev.crm.dynamics.com/api/data/v9.1/audits?$filter=_objectid_value eq 449d2fd8-58b8-e911-a839-000d3a315cfc
事实上,无论是web api还是fetchxml,resultset都无法获取包含已更改字段值的重要列
changedata
,这是由于以下限制:
Retrieve只能返回可读取的有效列。列:changedata。实体:审计

我在FetchXML builder中得到了以下信息:

还有另一种方法,但与PowerBI不兼容,使用
RetrieveRecordChangeHistory
recordid
为目标,获取所有具有新旧值的审核集合。示例如下:

https://crmdev.crm.dynamics.com/api/data/v9.0/RetrieveRecordChangeHistory(Target=@Target)?@Target={%22accountid%22:%22449d2fd8-58b8-e911-a839-000d3a315cfc%22,%22@odata.type%22:%22Microsoft.Dynamics.CRM.account%22}

你好,阿伦,我有一个问题需要理解,因为我们知道审计有RetrieveAuditDetails功能,我们可以在其中找到更多细节。但是我们如何处理w.r.t PowerBI和Webapi调用呢。我试着使用fetchxml,我们知道唯一的函数是检索到的。那么,这是否意味着不需要直接调用fecth/webapi来获取数据,而需要在两者之间多做一步呢?@AnkUser请查看我的更新。不幸的是,将所有原始数据推送到staging table并在转储到staging table之前对其进行按摩或在代码中进行按摩都是可选的—无论哪种方式,我们都必须将其放入staging table以使用,但不能像其他实体那样直接访问url:(@ArunVinoth那么,根据您上面的陈述,理论上,我可以在D365中使用一个单独的实体来获取值,然后将该实体/表拉入Power BI吗?@SQLHound这可能是一个开销,为什么不在用于复制的本地sql上使用一些暂存表(如果您已经有了这样的表的话)..@ArunVinoth客户要求数据保留在云中。我意识到我在Power BI桌面上设计时正在提取数据,但这都是开发。当我们将报告提前到生产阶段时,数据将全部保留在云中。