如何将Table_1中Formula列的字符串解析为DAX Measure并计算结果?
动态执行Table_1中存储的DAX公式字符串方案
DAX本身没有原生函数直接执行字符串格式的公式,以下是几种可行的实现方案,适配不同使用场景:
方案1:DAX Studio批量生成并执行查询
适合一次性批量计算所有ParentID的公式结果:
- 执行以下DAX查询,生成每个ParentID对应的完整计算语句:
EVALUATE CONCATENATEX( Table_1, "EVALUATE ADDCOLUMNS( SUMMARIZE( UNION(SELECTCOLUMNS(Table_2, ""Date"", [Date], ""Parent_ID"", [Parent_ID]), SELECTCOLUMNS(Table_3, ""Date"", [Date], ""Parent_ID"", [Parent_ID])), [Date], [Parent_ID] ), ""CalculatedResult"", " & [Formula] & " )" & CHAR(10) & "UNION ALL", CHAR(10) )
- 复制生成的结果,删除末尾多余的
UNION ALL,在DAX Studio中执行即可得到每个Parent_ID、Date维度对应的计算结果。
方案2:Power Query动态调用DAX(需配置COM访问)
适合需要在Power BI中整合计算结果的场景:
- 在Power Query中加载Table_1,添加自定义列遍历每个公式:
let Source = Table_1, AddResultTable = Table.AddColumn(Source, "ResultTable", each let DAXQuery = "EVALUATE ADDCOLUMNS( SUMMARIZE( UNION(SELECTCOLUMNS(Table_2, ""Date"", [Date], ""Parent_ID"", [Parent_ID]), SELECTCOLUMNS(Table_3, ""Date"", [Date], ""Parent_ID"", [Parent_ID])), [Date], [Parent_ID] ), ""CalculatedResult"", " & [Formula] & " )", // 通过DAX Studio执行查询并导出到临时Excel文件,再读取结果 TempResult = Excel.Workbook(File.Contents("C:\Temp\DAXResult.xlsx"), null, true){0}[Data] in TempResult ), ExpandResults = Table.ExpandTableColumn(AddResultTable, "ResultTable", {"Date", "Parent_ID", "CalculatedResult"}, {"Date", "Parent_ID", "CalculatedResult"}) in ExpandResults
- 注意:需提前配置模型的COM访问权限,且临时文件路径需根据实际环境调整。
方案3:模型内静态映射公式(适用于少量固定公式)
如果Table_1中的公式数量不多,可手动创建计算列或度量值:
CalculatedResult = VAR CurrentPID = [Parent_ID] VAR CurrentDate = [Date] // 按ParentID映射对应的DAX计算逻辑 RETURN SWITCH( CurrentPID, 1, CALCULATE(SUM(Table_2[X]) + SUM(Table_2[Y]), Table_2[Date] = CurrentDate), 2, CALCULATE(SUM(Table_3[A]) * SUM(Table_3[B]), Table_3[Date] = CurrentDate), // 继续添加其他ParentID对应的公式逻辑 BLANK() )
缺点:需手动维护映射关系,无法自动读取Table_1的Formula字段。
内容的提问来源于stack exchange,提问作者Juli
相关产品推荐
相关产品推荐

