如何在Power BI语义模型中通过DAX Query整合生成数据表?
将DAX查询结果无缝整合到Power BI语义模型
问题背景
我有一段DEFINE/EVALUATE结构的DAX查询,在Power BI Desktop和在线服务中运行都能得到预期的语义模型元数据结果。当前只能手动复制查询结果到数据表,希望找到无需手动操作的无缝整合方式,直接用该DAX查询的结果填充语义模型中的数据表。
我的DAX查询代码如下:
VAR _tables = SELECTCOLUMNS( FILTER( INFO.TABLES(), // 排除隐藏表 [IsHidden] = FALSE() ), "TableID",[ID], "TableName",[Name] ) VAR _columns = FILTER( INFO.COLUMNS(), // 排除行号列 [Type] <> 3 ) VAR _result = SELECTCOLUMNS( NATURALINNERJOIN( _columns, _tables ), "Table",[TableName], "Column",[ExplicitName], "Description",[Description], "Column in Data Source",[SourceColumn], "Data Category", [DataCategory], "Column Type", SWITCH( [Type], 1,"数据列", 2, "计算列", [Type] ), "DAX公式", [Expression] ) EVALUATE _result
可行解决方案
方法1:通过Power Query调用DAX查询(推荐)
这种方法能直接将DAX查询结果作为数据源加载到模型,无需手动复制,支持刷新更新:
- 打开Power BI Desktop,进入数据加载界面,点击获取数据 > 空白查询
- 在Power Query编辑器中,点击高级编辑器,替换默认M代码为以下内容(本地模型可省略
你的模型名称参数,在线服务需填写对应工作区模型名称):
let Source = AnalysisServices.Database("localhost:55555", "你的模型名称", [Query="DEFINE VAR _tables = SELECTCOLUMNS(FILTER(INFO.TABLES(),[IsHidden] = FALSE()),""TableID"",[ID],""TableName"",[Name]) VAR _columns = FILTER(INFO.COLUMNS(),[Type] <> 3) VAR _result = SELECTCOLUMNS(NATURALINNERJOIN(_columns,_tables),""Table"",[TableName],""Column"",[ExplicitName],""Description"",[Description],""Column in Data Source"",[SourceColumn],""Data Category"", [DataCategory],""Column Type"", SWITCH([Type],1,""数据列"", 2, ""计算列"",[Type]),""DAX公式"", [Expression]) EVALUATE _result"]) in Source
- 点击完成后,即可将DAX查询结果加载为模型中的数据表,后续可通过常规刷新操作更新数据。
方法2:转换为计算表(注意局限性)
由于INFO.TABLES()和INFO.COLUMNS()属于DAX查询函数,需变通后才能用于计算表(仅适用于Desktop,在线服务可能有权限限制):
- 在Power BI Desktop中,点击建模 > 新建表
- 将原DAX查询的
DEFINE部分合并为计算表表达式(去掉DEFINE和EVALUATE,直接返回结果逻辑):
SELECTCOLUMNS( NATURALINNERJOIN( FILTER(INFO.COLUMNS(),[Type] <> 3), SELECTCOLUMNS(FILTER(INFO.TABLES(),[IsHidden] = FALSE()),"TableID",[ID],"TableName",[Name]) ), "Table",[TableName], "Column",[ExplicitName], "Description",[Description], "Column in Data Source",[SourceColumn], "Data Category", [DataCategory], "Column Type", SWITCH( [Type], 1,"数据列", 2, "计算列", [Type] ), "DAX公式", [Expression] )
- 注意:该计算表会随模型结构变更自动更新,但Power BI Premium等环境可能限制
INFO系列函数的使用权限。
方法3:自动化脚本(适用于定期更新)
如果需要定期自动更新数据表,可采用以下方式:
- 使用DAX Studio执行目标DAX查询,将结果导出为CSV,再通过Power BI的CSV数据源加载并设置自动刷新
- 利用Power Automate的Power BI连接器,调用DAX查询并将结果写入模型数据表(需配置Premium容量权限)
内容的提问来源于stack exchange,提问作者SomekindaRazzmatazz
相关产品推荐
相关产品推荐

