type
Post
status
Published
date
Oct 28, 2024
slug
summary
Direct Lake 基于直接从数据湖加载 parquet 格式文件,无需查询湖屋或仓库端点,也无需将数据导入或复制到 Power BI 模型。 通过 Direct Lake 可快速地将数据湖中的数据直接加载到 Power BI 引擎,将其准备好进行分析。
tags
Direct Lake
Power Bi
Fabric
category
技术分享
icon
作者:刘琳
Direct Lake 基于直接从数据湖加载 parquet 格式文件,无需查询湖屋或仓库端点,也无需将数据导入或复制到 Power BI 模型。 通过 Direct Lake 可快速地将数据湖中的数据直接加载到 Power BI 引擎,将其准备好进行分析。
一、创建湖屋
注意:本文章中的Fabric工作区为AGMFNP(开发测试)/AGMFPD(生产环境)

1.打开AGMFNP(开发测试)工作区,选择“新建”>“更多选项”,然后在“存储数据”中选择“湖屋”磁贴。

2.在“新建湖屋”对话框中,输入名称,然后选择“创建”。 名称仅包含字母数字字符和下划线。在这里,我们输入名称DirectLake。

二、在湖屋中创建 Delta 表
1.在新创建的湖屋中,选择“打开笔记本”,然后选择“新建笔记本”。

2.将以下代码片段复制粘贴到第一个代码单元格,让 SPARK 访问打开的模型,然后按 Shift + Enter 运行代码。
3.此时代码成功输出远程 Blob 路径。

4.将以下代码复制粘贴到下一个单元格,然后按 Shift + Enter。
# 读取Parquet文件到一个DataFrame中 df = spark.read.parquet(wasbs_path) # 使用Spark的read方法加载Parquet格式的文件,路径由前面定义的wasbs_path指定 # 打印DataFrame的schema(结构) print(df.printSchema()) # 输出DataFrame的schema信息,展示列名、数据类型等
5.成功输出数据帧架构

6.验证所有 SPARK 作业是否已成功完成。 展开 SPARK 作业列表以查看更多详细信息。
7.点击湖屋,请在左上角的“Table”旁边,选择省略号 (...),选择“刷新”,然后展开“表”节点。即可看到加载进来的Delta表。

8.可在 Azure 开放数据集中按照以上操作添加数据,选择pyspark代码放进notebook中运行即可。


三、为湖屋创建基本的 Direct Lake 模型
1.在工作区选择湖屋DirectLake。

2.在湖屋中选择“新建语义模型”,命名语义模型名称,然后在对话框中选择要包含的表,点击确认。

四、新建列
💡 注意:Direct Lake 模式下无法在模型中直接添加新列或新表。如需添加新列(例如合并两列为一个新列),必须在笔记本中修改代码来实现。下面的示例展示了如何在查询中合并两列。

五、新建参数字段
在模型中无法直接新建参数。要创建字段参数,需要在 Tabular Editor 中编写和执行代码。

1.在 Tabular Editor 中,点击"连接模型",将刚才复制的链接粘贴在"Server"栏中,然后点击"OK"。
2.在模型中选择我们刚刚创建的销售分析模型,点击ok。

3.选择C# Script,将以下代码粘贴进去,点击运行,运行成功后保存。
/*=============================================自定义参数开始*/ /*字段参数表名称 list*/ var tableNameList = new string[] { "MG_PRD_IPT" }; /*字段参数名称 list*/ var parameterNameList = new string[] { "GROUP" }; /* 自定义参数元素 {"销售金额","[0001_销售金额]"} ,其中 销售金额 为参数列名称, [0001_销售金额] 为度量值名称. {"大区","'D00_大区表'[F_02_大区]"} ,其中 大区 参数列名称, 'D00_大区表'[F_02_大区] 为表的列名称. 注意:度量值可以不需要前缀表名称,列名称必须要有表名称。 */ var nameList = new string[][,] { new string[,] { { "ACT" ,"[@资材投入_ACT]" }, { "YAG" ,"[@资材投入_YAG]" }, { "vs." ,"[@资材投入_vs.]" }, { "vs.%" ,"[@资材投入_vs.%]" } } }; /*是否隐藏字段参数表的其它列, true:不显示; false:显示*/ var tf = true; /*=============================================自定义参数结束*/ /*=============================================以下代码勿修改*/ var listDaxRow = new List<string>{}; var count = 0; var daxItem = ""; var dax =""; for(int dim0 = 0; dim0 < tableNameList.GetLength(0); dim0++) { listDaxRow = new List<string>{}; count = 0; for(int dim1 = 0; dim1 < nameList[dim0].GetLength(0); dim1++) { count += 1; daxItem = ""; daxItem += "( \""; daxItem += nameList[dim0][dim1,0]; daxItem += "\" "; daxItem += ", NAMEOF ( "; daxItem += nameList[dim0][dim1,1]; daxItem += " ) , "; daxItem += count; daxItem += " )"; listDaxRow.Add(daxItem); } dax =""; dax += "{\n"; dax += string.Join(",\n",listDaxRow); dax += "\n}"; var tableParameter = Model.AddCalculatedTable(tableNameList[dim0],dax); var columnName = tableParameter.AddCalculatedTableColumn("GROUP", "[Value1]"); var columnField = tableParameter.AddCalculatedTableColumn("VALUES", "[Value2]"); var columnOrder = tableParameter.AddCalculatedTableColumn("ORDER" , "[Value3]"); columnName.SortByColumn = columnOrder; columnName.GroupByColumns.Add(columnField); columnField.SetExtendedProperty("ParameterMetadata", "{\"version\":3,\"kind\":2}", ExtendedPropertyType.Json); columnField.IsHidden = tf; columnOrder.IsHidden = tf; }


4.修改完成后,点击新建报告。

5.在弹出的新界面,可以进行视觉对象创建。

6.开发完成后,点击保存。
7.在保存报表窗格中命名报表保存即可。

六、行级别安全性
一种选择是赋予用户工作区中的查看者角色,以使用工作区中的所有项,包括湖屋(如果在此工作区中)、语义模型和报表。 或者,可以向用户授予管理员、成员或参与者角色,以完全访问数据,并能够创建和编辑项目(如湖屋、语义模型和报表)。
- 打开模型,点击"角色",然后选择"管理角色"。

2.点击"新建",选择相应的表,添加筛选条件,然后点击"保存"。

3.在工作区中,点击"管理访问权限",然后在展开的菜单中选择"添加人员或组"。
4.在弹出的菜单中输入邮箱,选择"查看器"角色,然后点击"添加"。


5.找到销售分析的语义模型,点击(。。。),选择安全性。

6.输入用户的电子邮箱地址,点击"添加",然后点击"保存"。

七、Direct Lake回退
Direct Lake 模式下的 Power BI 语义模型直接从 OneLake 读取增量表。 但是,如果 Direct Lake 模型上的 DAX 查询超出了 SKU 的限制,或者使用不支持 Direct Lake 模式的功能(例如仓库中的 SQL 视图),则查询可能会回退到 DirectQuery 模式。 在 DirectQuery 模式下,查询使用 SQL 从仓库或湖屋 SQL 分析终结点检索结果,这可能会影响查询性能。 如果只想在纯 Direct Lake 模式下处理 DAX 查询,则可以禁用回退到 DirectQuery 模式。 如果不需要回退到 DirectQuery,建议禁用回退功能。

回退行为
Direct Lake 模型包括 DirectLakeBehavior 属性,该属性有三个选项:
DirectQueryOnly - 指定所有查询仅使用 DirectQuery 模式。 使用此设置测试回退性能。
可在模型中,点击语义模型,在Direct Lake行为中设置

如果需要查看查询是否回退至Direct query模式,请参考此文档https://learn.microsoft.com/zh-cn/fabric/get-started/direct-lake-analyze-query-processing
另需注意Direct lake模式下已知问题及限制

参考文档:
- Fabric入门:https://learn.microsoft.com/zh-cn/training/modules/get-started-lakehouses/?source=recommendations
本文作者:@刘琳
- 作者:博
- 链接:https://www.zyb88.top/article/12d8d818-45cc-8076-b956-e8e5a8d213b3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。