如何使用Invoke-ASCmd更新Power BI语义模型的度量值表达式
使用Invoke-ASCmd修改Power BI语义模型度量值的正确实现
我尝试用PowerShell的Invoke-ASCmd修改Power BI语义模型中的现有度量值,但编写的TSML命令执行后无报错,返回空XML响应,却未实际更新度量值表达式。已确认XMLA读写功能已启用,现有代码如下:
$connectionString = "Data Source=powerbi://api.powerbi.com/v1.0/myorg/Workspace1" $statement = [ordered]@{ alter = [ordered]@{ object= [ordered]@{ database = "test-database" table = "Table1" } table = [ordered]@{ name = "Table1" measures = @( [ordered]@{ name = "Measure1" expression = "1 // new expression" }) } } } $query = $statement | ConvertTo-Json -Depth 5 Invoke-ASCmd -ConnectionString $connectionString -Query $query
返回结果:
问题原因
原有代码通过ALTER TABLE指定measures数组的方式,会替换目标表的所有度量值集合为你指定的单个度量,而非修改现有度量。若表中存在其他度量,这种操作还会导致它们丢失,且因结构未精准定位到目标度量,可能导致更新未生效。
正确实现示例
方式1:直接ALTER目标度量对象
精准定位到要修改的度量,直接更新其表达式:
$connectionString = "Data Source=powerbi://api.powerbi.com/v1.0/myorg/Workspace1" $statement = [ordered]@{ alter = [ordered]@{ # 精准定位到目标度量 object = [ordered]@{ database = "test-database" table = "Table1" measure = "Measure1" } # 指定度量的新属性 measure = [ordered]@{ name = "Measure1" expression = "1 // new expression" # 可选:若需要保留原有格式等属性,可添加formatString等字段 # formatString = "General Number" } } } $query = $statement | ConvertTo-Json -Depth 5 Invoke-ASCmd -ConnectionString $connectionString -Query $query
方式2:通过ALTER TABLE更新指定度量
若需同时修改多个度量,可使用ALTER TABLE并通过update属性指定仅更新目标度量(而非替换整个集合):
$connectionString = "Data Source=powerbi://api.powerbi.com/v1.0/myorg/Workspace1" $statement = [ordered]@{ alter = [ordered]@{ object = [ordered]@{ database = "test-database" table = "Table1" } table = [ordered]@{ name = "Table1" # 使用update指定要更新的度量 update = [ordered]@{ measures = @( [ordered]@{ name = "Measure1" expression = "1 // new expression" } # 可添加更多要修改的度量 ) } } } } $query = $statement | ConvertTo-Json -Depth 5 Invoke-ASCmd -ConnectionString $connectionString -Query $query
验证说明
执行成功后仍会返回空XML响应(<return><root/></return>),这是XMLA操作成功的标准返回。可通过Power BI Desktop或服务端直接查看度量值表达式确认是否更新。
内容的提问来源于stack exchange,提问作者saviourofdp
相关产品推荐
相关产品推荐

