首页 > 解决方案 > 使用 REST 或 JSON 查询 powerbi 站点(来自 Linux)

问题描述

我需要从非 MS 系统 (Linux) 查询远程 PowerBI 服务器。

我发现查询可以通过 JSON 发送,但我很难理解格式。例如,如何在给定 WHERE 和 LIKE 条件的情况下检索所有表列的内容?

这就是我想出的(不起作用):

{
  "queries" : [
   {
     "ApplicationContext" : {
      "Sources" : [
        {
         "ReportId" : "ZZZ"
        }
      ],
      "DatasetId" : "YYY"
     },
     "Query" : {
      "Commands" : [
        {
         "SemanticQueryDataShapeCommand" : {
           "Query" : {
            "Where" : [
              {
               "Condition" : {
                 "In" : {
                  "Values" : [
                    [
                     {
                       "Like" : {
                        "Value" : "'%abc%'"
                       }
                     }
                    ],
                    null
                  ],
                  "Expressions" : [
                    {
                     "Column" : {
                       "Property" : "APROPERTY",
                       "Expression" : {
                        "SourceRef" : {
                          "Source" : "A"
                        }
                       }
                     }
                    }
                  ]
                 }
               }
              }
            ],
            "Select" : [
              {
               "Name" : "AVIEW.APROPERTY",
               "Column" : {
                 "Expression" : {
                  "SourceRef" : {
                    "Source" : "A"
                  }
                 },
                 "Property" : "APROPERTY"
               }
              }
            ],
            "Version" : "2",
            "From" : [
              {
               "Name" : "A",
               "Entity" : "AVIEW"
              }
            ]
           },
           "Binding" : {
            "Primary" : {
              "Groupings" : [
               {
                 "Projections" : [
                  "0",
                  "1"
                 ]
               }
              ]
            },
            "Version" : "1",
            "DataReduction" : {
              "DataVolume" : "3",
              "Primary" : {
               "Top" : {}
              }
            }
           }
         }
        }
      ]
     },
     "QueryId" : ""
   }
  ],
  "cancelQueries" : [],
  "modelId" : "XXX",
  "version" : "1.0.0"
}

这是等效的 YAML,也许它更具可读性:

---
cancelQueries: []
modelId: XXX
queries:
  - ApplicationContext:
      DatasetId: YYY
      Sources:
        - ReportId: ZZZ
    Query:
      Commands:
        - SemanticQueryDataShapeCommand:
            Binding:
              DataReduction:
                DataVolume: 3
                Primary:
                  Top: {}
              Primary:
                Groupings:
                  - Projections:
                      - 0
                      - 1
              Version: 1
            Query:
              From:
                - Entity: AVIEW
                  Name: A
              Select:
                - Column:
                    Expression:
                      SourceRef:
                        Source: A
                    Property: APROPERTY
                  Name: AVIEW.APROPERTY
              Version: 2
              Where:
                - Condition:
                    In:
                      Expressions:
                        - Column:
                            Expression:
                              SourceRef:
                                Source: A
                            Property: APROPERTY
                      Values:
                        -
                          - Like:
                              Value: "'%abc%'"
                        -
    QueryId: ''
version: 1.0.0

然后我使用curl将带有适当标头的上述 JSON 数据发布到公共 url(不需要凭据),类似于<URL>/public/reports/querydata. 这种查询方法通常有效,我成功完成了原始查询。但是现在我想创建更复杂的查询并碰壁,因为大多数文档都没有讨论这种查询语言,但它要么是基于 GUI 的,要么是需要安装专有软件的 command-let 和 DAX 功能。

我需要的是有关上述 JSON 的一些帮助和/或一些指向有关上述查询语言的文档的指针,我似乎无法找到,谢谢。

标签: sqljsonrestpowerbidax

解决方案


我自己一直在对一些 PowerBI 查询进行逆向工程......在查询结构本身上没有给你一个确切的答案,但是结果中的“R”数据是一个位字段,它是某种压缩功能。它指示结果“C”数组中缺少哪些描述的字段。

我的方法可能正确也可能不正确,首先在给定位字段值的“C”数组中的相应位置插入空数组值,然后您有时可以使用相同的索引填充“缺失”字段前一行的“C”数组中的字段(通常当缺失的字符串值与前一行的重复时),并将缺失的数值保留为空。


推荐阅读