1、使用官方连接方式加载
具体连接方式参照官网文档:
将 Power BI 与 Microsoft Dynamics 365 结合使用 | Microsoft Docs
优点:这种加载方式没有数据大小的限制。
缺点:慢,非常慢。因为使用的传统OData的方式,使用HTTP的方式请求数据,数据加载非常缓慢。
2、使用Dataverse连接方式加载数据
具体连接方式参照官网文档:
使用 Dataverse 连接器创建 Power BI 报表 - Power Apps | Microsoft Docs
这种方式数据加载对比第一种明显快很多。
但是如果使用
- Dataverse:此连接器是最新版本,使用表格数据流 (TDS) 协议。
将会有数据80M的限制。
如果使用
- Common Data Service(旧):这是连接器的早期版本。 此连接器用于大于 80 MB 的大型数据集。 此版本还支持查询结果的分页和生成使用图像数据类型的报表。
将基本满足要求。
3、使用SQL Server连接方式加载数据
Dynamics 365是能直接连接数据库的
但是Power BI连接SQL Server数据库和 Dataverse一样,底层都是走的TDS连接,所有也有80M限制。
但是使用SQL Server数据库连接方式加载数据比较灵活,将需要的数据使用SQL查询处理好了再加载到Power BI里面来,可以直接进行分析了。
至于80M的限制,可以通过切分时间段控制返回的数据不超过80Mb的方式实现了绕过这个限制,
具体思路如下:
1.创建2个参数来分别控制开始时间和时间切分大小;
2.使用语句生成表;
let
Source = List.Dates(StartDate, Number.RoundUp(Duration.Days(Date.From(DateTime.LocalNow())-StartDate)/(#"Interval (Month)"*30)),#duration(30*#"Interval (Month)",0,0,0)),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Temp"}}),
#"Added Custom" = Table.AddColumn(#"Renamed Columns", "EndDate", each Date.ToText([Temp]+#duration(30*#"Interval (Month)",0,0,0),"yyyy-M-d")),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "StartDate", each Date.ToText([Temp],"yyyy-M-d")),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"EndDate", "StartDate"})
in
#"Removed Other Columns"
计算使用 今天的日期减去起始日期, 计算出了 间隔, 再看有多少个 间隔, 并向上取整。
3.通过时间循环获取数据;
Table.AddColumn(#"Removed Other Columns", "自定义", each Sql.Database("xxxx.crm.dynamics.com", "xxxx", [Query="select createdon from contact where createdon > '"&[StartDate]&"' and createdon < '"&[EndDate]&"';"])),
4.删除其他列,并将自定义列展开,就得到了所有的数据。
这种方式比较灵活,加载速度也快,但是受到80M的限制。