3

所以我使用 PowerBI Desktop 直接从 OMS 日志分析查询数据,我相信查询返回的数据有 8MB 的硬限制。我遇到的问题是我需要查询大约 30 000 行,但在 18 000 行左右达到了 8MB 的限制。是否可以分解查询,例如,query1 将返回行 1 - 18 000,query2 将返回 18 001 - 28 000 等等,然后我可以在 PowerBI 中合并查询以查看所有数据?

问题是我在这个领域的经验,尤其是 DAX 非常有限,所以我不知道如何在高级编辑器中指定它。这里的任何帮助将不胜感激。

谢谢!

4

1 回答 1

1

同样的问题。解决了。

我的需求:我在 Azure LogAnalytics (LA) 中有一个表,每天可累积约 35K 行。我需要将所有行从 LA 导入 PowerBi 进行分析。

我的问题:我在 LA Logs Web UX 中制作了我想要的 KQL 查询。然后我选择了“导出 -> 导出到 PowerBI M 查询”功能。将其粘贴到 PowerBi 中的空白查询中。授权。我注意到一些奇怪的行为:

1) - 就像你说的,我得到了大约 35K 行的滚动数据,每个查询都会从我的 KQL 范围内的第一个日期剪掉一点。

2) - 另外,我发现每天,查询都会有机会地剪掉一些行 - 就像它在“猜测”我不需要符合限制的数据一样。

3) - 无论我写了什么 KQL |where TimeGenerated >= ago(xd) 子句,我显然不会得到超过它限制我的回报。

我的解决方案——效果很好。在 PowerQuery 中,我在 PowerQuery/M 中创建了一个新的空白表(不是 DAX 表!)。在该表中,我使用 DateTimeZone.UtcNow() 从今天的日期开始,然后我添加了一个名为 [Days Back] 的列,并为 -1、-2、-3...-7 添加了行。然后,使用一些 M,我添加了另一个从 Days Back 中减去 Today 的列,给了我日期的历史记录。在此处输入图像描述.

现在,我有一个表,我可以从中迭代历史中的每个 Date 并将 parm1 传递给我的 KQL 查询: | where TimeGeneratedDate == todatetime('"& Date.ToText(TimeGeneratedDateLoop) & "')

如您所见,在我编辑了我的主要 LA 查询以使用 TimeGeneratedDateLoop 作为参数后,我现在可以获得每天的记录量,而不会达到 LA 限制。请注意,就我而言,没有一天会超过 8MB 的限制。如果你这样做了,那么你可以用 12 小时的故障来解决这个问题,而不是一整天。

这是我对该函数的最终 M 查询:

注意:我还从预生成的查询中删除了这一行:"prefer"="ai.response-thinning=true"<- 我不知道它是否有帮助,但将其设置为 false 不起作用。

let
  FxDailyQuery = (TimeGeneratedDateLoop as date) => 
    let
      AnalyticsQuery = 
        let
          Source = Json.Document(Web.Contents(
            "https://api.loganalytics.io/v1/workspaces/xxxxx-202d-xxxx-a351-xxxxxxxxxxxx/query", 
            [
              Query = [#"query"
                = "YourLogAnalyticsTbl
| extend TimeGeneratedDate = bin(TimeGenerated, 1d)
| where notempty(Col1)
| where notempty(Col2) 
| where TimeGenerated >= ago(30d) 
| where TimeGeneratedDate == todatetime('"& Date.ToText(TimeGeneratedDateLoop) & "')
", #"x-ms-app" = "OmsAnalyticsPBI"], 
              Timeout = #duration(0, 0, 4, 0)
            ]
          )),
          TypeMap = #table({"AnalyticsTypes", "Type"}, {
            {"string", Text.Type}, 
            {"int", Int32.Type}, 
            {"long", Int64.Type}, 
            {"real", Double.Type}, 
            {"timespan", Duration.Type}, 
            {"datetime", DateTimeZone.Type}, 
            {"bool", Logical.Type}, 
            {"guid", Text.Type}, 
            {"dynamic", Text.Type}
          }),
          DataTable = Source[tables]{0},
          Columns = Table.FromRecords(DataTable[columns]),
          ColumnsWithType = Table.Join(Columns, {"type"}, TypeMap, {"AnalyticsTypes"}),
          Rows = Table.FromRows(DataTable[rows], Columns[name]),
          Table = Table.TransformColumnTypes(Rows, Table.ToList(
            ColumnsWithType, 
            (c) => {c{0}, c{3}}
          ))
        in
          Table
    in
      AnalyticsQuery
in
  FxDailyQuery
于 2020-04-01T20:24:56.277 回答