OMS Log Analytics 8MB PowerBI查询限制解决方法?

时间:2017-09-19 07:36:23

标签: azure powerbi powerbi-datasource oms azure-log-analytics

所以我使用PowerBI Desktop直接从OMS Log分析查询数据,我相信查询返回的数据有8MB硬限制。我遇到的问题是我需要查询大约30 000行,但是大约18 000行达到了8MB的限制。有可能打破查询,例如,query1将返回行1 - 18 000,query2将返回18 001 - 28 000等等,然后我可以合并PowerBI中的查询以给我一个所有数据的视图?

问题是我在这个领域的经验,特别是DAX是非常有限的,所以我不知道如何在高级编辑器中指定它。任何帮助都将受到高度赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

同一期。解决了。​​

我的需要: 我在Azure LogAnalytics(LA)中有一个表,该表每天大约累积35,000行。我需要将LA中的所有行放入PowerBi中进行分析。

我的问题: 我在LA Logs Web UX中设计了所需的KQL查询。然后,我选择了“导出->导出到PowerBI M查询”功能。将其粘贴到PowerBi中的BLANK查询中。已授权。我注意到了一些奇怪的行为:

1)-就像您说的那样,我正在滚动获取约35K的数据行,每个查询会比我的KQL范围内的第一个日期少一点点。

2)-另外,我发现每天查询都会随机地删掉一些行-就像是在“猜测”我不需要将哪些数据放入限制内。

3)-不管我写的是什么KQL | TimeGenerated> = ago(xd)子句,我显然都不会获得超过它的限制。

我的解决方案-效果很好。 在PowerQuery中,我在PowerQuery / M中创建了一个新的空白表(不是DAX表!)。在该表中,我使用DateTimeZone.UtcNow()从今天的日期开始,然后添加了一个名为[Days Back]的列,并为-1,-2,-3 ...- 7添加了行。然后,用一些M,我又加上了一个列,从Days Back中减去Today,给了我日期的历史。enter image description here

现在,我有了一个表,可以从中循环访问历史记录中的每个日期,并将| where TimeGeneratedDate == todatetime('"& Date.ToText(TimeGeneratedDateLoop) & "')

传递给我的KQL查询parm1

正如您所看到的,在我编辑了主要的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