Расчет предыдущего периода в Azure Data Explorer \ Kusto

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

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

Мы добавили вычисляемую меру в 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 Data Explorer?

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


person H.G.    schedule 30.05.2019    source источник


Ответы (1)


Вы можете добавить столбец суммы предыдущего месяца в таблицу 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
person Avnera    schedule 30.05.2019