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(生产环境)
notion image
1.打开AGMFNP(开发测试)工作区,选择“新建”>“更多选项”,然后在“存储数据”中选择“湖屋”磁贴。
 
notion image
 
2.在“新建湖屋”对话框中,输入名称,然后选择“创建”。 名称仅包含字母数字字符和下划线。在这里,我们输入名称DirectLake。
notion image
 

二、在湖屋中创建 Delta 表

1.在新创建的湖屋中,选择“打开笔记本”,然后选择“新建笔记本”。
notion image
2.将以下代码片段复制粘贴到第一个代码单元格,让 SPARK 访问打开的模型,然后按 Shift + Enter 运行代码。
3.此时代码成功输出远程 Blob 路径。
notion image
4.将以下代码复制粘贴到下一个单元格,然后按 Shift + Enter。
# 读取Parquet文件到一个DataFrame中 df = spark.read.parquet(wasbs_path) # 使用Spark的read方法加载Parquet格式的文件,路径由前面定义的wasbs_path指定 # 打印DataFrame的schema(结构) print(df.printSchema()) # 输出DataFrame的schema信息,展示列名、数据类型等
5.成功输出数据帧架构
notion image
6.验证所有 SPARK 作业是否已成功完成。 展开 SPARK 作业列表以查看更多详细信息。
7.点击湖屋,请在左上角的“Table”旁边,选择省略号 (...),选择“刷新”,然后展开“表”节点。即可看到加载进来的Delta表。
notion image
8.可在 Azure 开放数据集中按照以上操作添加数据,选择pyspark代码放进notebook中运行即可。
notion image
notion image

三、为湖屋创建基本的 Direct Lake 模型

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

四、新建列

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

五、新建参数字段

在模型中无法直接新建参数。要创建字段参数,需要在 Tabular Editor 中编写和执行代码。
notion image
1.在 Tabular Editor 中,点击"连接模型",将刚才复制的链接粘贴在"Server"栏中,然后点击"OK"。
2.在模型中选择我们刚刚创建的销售分析模型,点击ok。
notion image
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; }
notion image
notion image
4.修改完成后,点击新建报告。
notion image
5.在弹出的新界面,可以进行视觉对象创建。
notion image
6.开发完成后,点击保存。
7.在保存报表窗格中命名报表保存即可。
notion image

六、行级别安全性

💡
一种选择是赋予用户工作区中的查看者角色,以使用工作区中的所有项,包括湖屋(如果在此工作区中)、语义模型和报表。 或者,可以向用户授予管理员、成员或参与者角色,以完全访问数据,并能够创建和编辑项目(如湖屋、语义模型和报表)。
此外,非默认语义模型可以利用固定标识从湖屋读取数据,而无需向报表用户授予对湖屋的任何访问权限,并且用户有权通过应用访问报表。 此外,通过固定标识,Direct Lake 模式下的非默认语义模型可以在语义模型中定义行级安全性,以限制报表用户看到的数据,同时保持 Direct Lake 模式。 还可以使用 SQL 分析终结上基于 SQL 的安全性,但 Direct Lake 模式将回退到 DirectQuery,因此应避免这种情况以保持 Direct Lake 的性能。
 
  1. 打开模型,点击"角色",然后选择"管理角色"。
notion image
 
2.点击"新建",选择相应的表,添加筛选条件,然后点击"保存"。
notion image
3.在工作区中,点击"管理访问权限",然后在展开的菜单中选择"添加人员或组"。
4.在弹出的菜单中输入邮箱,选择"查看器"角色,然后点击"添加"。
notion image
notion image
5.找到销售分析的语义模型,点击(。。。),选择安全性。
notion image
6.输入用户的电子邮箱地址,点击"添加",然后点击"保存"。
notion image

七、Direct Lake回退

Direct Lake 模式下的 Power BI 语义模型直接从 OneLake 读取增量表。 但是,如果 Direct Lake 模型上的 DAX 查询超出了 SKU 的限制,或者使用不支持 Direct Lake 模式的功能(例如仓库中的 SQL 视图),则查询可能会回退到 DirectQuery 模式。 在 DirectQuery 模式下,查询使用 SQL 从仓库或湖屋 SQL 分析终结点检索结果,这可能会影响查询性能。 如果只想在纯 Direct Lake 模式下处理 DAX 查询,则可以禁用回退到 DirectQuery 模式。 如果不需要回退到 DirectQuery,建议禁用回退功能。
notion image
回退行为
Direct Lake 模型包括 DirectLakeBehavior 属性,该属性有三个选项:
DirectQueryOnly - 指定所有查询仅使用 DirectQuery 模式。 使用此设置测试回退性能。
可在模型中,点击语义模型,在Direct Lake行为中设置
notion image
 
如果需要查看查询是否回退至Direct query模式,请参考此文档https://learn.microsoft.com/zh-cn/fabric/get-started/direct-lake-analyze-query-processing
 
💡
另需注意Direct lake模式下已知问题及限制
notion image
 
参考文档:
 
💬
本文作者:@刘琳
 
创建一个域名邮箱 注册Power BI管理员账号低成本建站(Notion 自定义域名)

  • Twikoo
  • Giscus
  • Utterance