Расчет предыдущего периода в Azure Data Explorer \ Kusto - PullRequest
2 голосов
/ 30 мая 2019

Мы строим отчет в Power BI на основе данных, находящихся в Azure Data Explore r. Поскольку нам нужен отчет, который должен быть полностью динамичным, мы не можем предварительно писать запросы, но должны полагаться на Power BI для генерации запросов для Data Explorer в соответствии с действия пользователя в отчете.

Одно из наших требований - показать несколько показателей по сравнению с их значением за предыдущий период (месяц). Мера также должна быть очень динамичной, поэтому правильное значение должно основываться на пользовательских фильтрах и действиях и не может быть предварительно рассчитано.

Мы добавили вычисляемый показатель в Power BI:

Prev_Month_Amt=CALCULATE(SUM(sales[Amt]),DATEADD(dates[Record_DT],-1,MONTH))

Таблица дат содержит одну строку в день и связана с таблицей продаж в Power BI с использованием отношения «многие к одному». Таблица продаж включает в себя несколько сотен миллионов записей.

Проблема заключается в том, что когда мы добавляем меру Prev_Month_Amt к объекту Power BI, такому как Matrix, мы сталкиваемся с очень длительным временем выполнения и довольно часто встречаемся с ошибками типа ge: «Накопленный массив строк получает слишком большие».

Есть ли лучший способ построения вычислений за предыдущий период в Power BI на основе обозревателя данных Azure?

Спасибо, H.G.

1 Ответ

3 голосов
/ 30 мая 2019

Вы можете добавить столбец суммы за предыдущий месяц в таблицу Kusto, представленную в PBI (либо добавив ее в реальную таблицу, используя политику обновления или поток Microsoft, либо добавив ее в хранимую функцию). PBI будет видеть его как обычный столбец, вот пример:

let T = datatable(Amount:double, Day:datetime, LineItem:string, Account:string) 
[2, datetime(2019-01-03), "revenue", "a",
2, datetime(2019-01-05), "revenue", "a",
5, datetime(2019-01-03), "revenue", "b",
5, datetime(2019-01-05), "revenue", "b",
10, datetime(2019-02-07), "revenue", "a",
2, datetime(2019-02-10), "revenue", "a",
3, datetime(2019-02-10), "revenue", "b",
4, datetime(2019-02-10), "revenue", "b"
];
T
| extend Month = startofmonth(Day)
| summarize Amount = sum(Amount) by Month, LineItem, Account
| join kind=leftouter 
 (
    T 
    | extend Month = startofmonth(endofmonth(Day) + 1d) // sets the current month to the next month
    | summarize LastMonthAmount= sum(Amount) by Month, LineItem,  Account
) on Month, LineItem, Account
| project Month, LineItem,  Account, Amount, LastMonthAmount
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...