Детализация на основе времени в Power BI на базе хранилища данных Azure

Я разработал простое хранилище данных Azure, в котором я хочу периодически отслеживать запасы своих продуктов. Более того, я хочу иметь возможность видеть эти данные, сгруппированные по месяцам, неделям, дням и часам, с возможностью детализации сверху вниз. Я определил 3 измерения:

DimDate
DimTime 
DimProduct

Я также создал таблицу фактов для отслеживания товарных запасов:

FactStocks
- DateKey (20160510, 20160511, etc)
- TimeKey (0..23)
- ProductKey (Product1, Product2)
- StockValue (number, 1..9999)

Мой образец данных фактов приведен ниже:

20160510 20 Product1 100
20160510 20 Product2 30
20160510 21 Product1 110
20160510 21 Product2 35
20160510 22 Product1 112
20160510 22 Product2 28
20160510 23 Product1 120
20160510 23 Product2 31
20160511 00 Product1 150
20160511 00 Product2 29
20160511 01 Product1 95
20160511 01 Product2 40

Мне нужна диаграмма доступности продукта с течением времени с возможностью проверки общего количества (где ось x представляет часы), а также возможность фильтрации по конкретному продукту:

Total - 130, 145, 140, 151, 179, 135
Product1 - 100, 110, 112, 120, 150, 95;
Product2 - 30, 35, 28, 31, 29, 40;

x-> 20,21,22,23,00,01

Более того, мне нужна возможность детализировать и просматривать среднюю доступность по дням и продуктам (где ось x представляет дни, недели, месяц, годы, доступные через таблицу DimDate):

Total - 141.5, 157
Product1 - 110.5, 122.5
Product2 - 31, 34.5

x-> 20160510, 20160511

Кажется, что Power BI не может создать эту группировку по дате, потому что он пытается использовать агрегатную функцию для получения ежедневного значения, и нет возможности указать среднюю функцию, которая будет учитывать продукты (с группировкой по продуктам). Функция агрегирования здесь просто не работает, Power BI пытается суммировать все значения по всем продуктам за данный день и получить среднее значение (например, для 20160511):

150+29+95+40 / 4 = 78.5

Когда мне нужно следующее:

(150+29) + (95+40) / 2 = 157

Я просто хочу сделать его интерактивным с возможностью выбирать продукт и легко переходить по ним вверх и вниз. Пожалуйста, посоветуйте, как мне изменить структуру моего хранилища для поддержки моего сценария.


person Alexey Strakh    schedule 11.05.2016    source источник


Ответы (3)


Я не думаю, что вам нужно менять вашу структуру. Я бы создал новую меру в вашей таблице FactStocks (с помощью Power BI Desktop), чтобы рассчитать доступность по мере необходимости с помощью функций DAX.

Я немного предполагаю, поскольку вы действительно не изложили свои требования, кроме одного примера, но это, вероятно, будет выглядеть примерно так:

Availability = SUM([StockValue])/DISTINCTCOUNT([ProductKey])

Вот полное руководство по мерам в PBI Desktop:

https://powerbi.microsoft.com/en-us/documentation/powerbi-desktop-tutorial-create-measures/

person Mike Honey    schedule 11.05.2016
comment
спасибо за ваше видение. Мое требование так же просто, как отображение изменений запасов по продуктам с течением времени (час, день, неделя, месяц, квартал, год). - person Alexey Strakh; 14.05.2016

Я думаю, проблема здесь в том, что ваша мера на самом деле чрезвычайно сложна - вы пытаетесь сделать сумму за каждый день, а затем среднее за несколько дней. Чтобы получить это, вам нужно запачкать руки с DAX.

Я пишу это без редактора или данных, поэтому, пожалуйста, простите меня, если я получу синтаксические ошибки или перепутаю порядок параметров:

DailyAverage:=CALCULATE(SUMMARIZE('FactStocks', [DateKey], 'DailySum', Sum([StockValue])), AVG([DailySum]))

Принцип состоит в том, чтобы SUMMARIZE (в основном GROUP BY в SQL) вашу таблицу, группируя по DateKey, суммируя значения в каждой группе, а затем усредняя результат (теперь усредняется одна строка в день вместо каждой строки в исходной таблице).

person Jeff    schedule 31.05.2016

Не могли бы вы использовать представления базы данных для вычислений и агрегирования?

person Sonya Marshall    schedule 29.05.2016