Расчет Dax с ​​логикой в ​​мощной би-аналитики данных

Нужна помощь в расчетах аналитики данных. В настоящее время я получаю исторические данные для потребления следующим образом:

Данные

На приведенных выше данных я добавляю пользовательские столбцы для расчета точного потребления (галлонов) в нет. дней. лайк:

расчетные данные

Теперь я должен построить месячную гистограмму потребления соответствующего идентификатора счетчика в 2016 году. Но проблема здесь в том, что мне придется рассчитывать потребление в каждом месяце путем деления его на дни в каждом соответствующем месяце 2016 года, и только тогда я буду в состоянии изобразить их ежемесячно, например: ось у = потребление в каждом месяце ось х = январь февраль март Апр май июнь июль авг сен окт ноя ноя дек

Итак, в январе месяце потребление должно быть = 10 + 100 + ((115/38) * 7) галлонов. Примечания: здесь, в ((115/38) * 7): мы рассчитываем среднее потребление одного дня 7 дней в Январь и весь март, а затем получим последние 7 дней потребления января, чтобы мы могли добавить его в расчете общего потребления в январе месяце

но как добавить показатель / пользовательский столбец / новую таблицу для этих вычислений?

Спасибо

1 ответ

Решение

Что вам нужно сделать, это относительно сложно, но краткое изложение моего решения:

  1. Рассчитать потребление в день
  2. Рассчитать дату начала и окончания каждого чтения (например, предыдущая дата чтения плюс один день и дата чтения)
  3. Расширьте свои данные, чтобы иметь 1 строку в день, а не 1 строку на чтение

Вы хотите выполнить эти шаги перед загрузкой данных в модель данных (т. Е. В исходную систему или при загрузке данных с помощью редактора запросов /Power Query).

Ниже я предполагаю, что вы используете редактор запросов /Power Query. Однако, если вы можете использовать вашу исходную систему, это часто лучший выбор (поскольку исходная система может быть базой данных, которая значительно быстрее вашего рабочего стола).

Обратите внимание, что ваш расчет количества дней не имеет смысла для меня. Между 24 января 2016 года и 31 марта 2016 года существует более 38 дней. Между 10 января и 24 января также более 13 дней. По этой причине было трудно определить, хотите ли вы, чтобы новое чтение учитывалось в день, когда предыдущее чтение было принято, или на следующий полный день. Я предполагаю, что первое. Также обратите внимание, я исходил из того, что ваш расчет количества дней правильный

Рассчитать потребление в день

Это самый простой шаг, учитывая, что вы уже рассчитали потребление и количество дней. Просто разделите одно на другое. В редакторе запросов можно щелкнуть столбец "Потребление (галлоны)" и выбрать " Добавить столбец" > " Стандарт" > " Разделить". В разделе " Значение" выберите " Использовать значения в столбце", а затем выберите столбец "Количество дней".

Разделите на количество дней

Рассчитайте дату начала и окончания каждого чтения

Датой чтения является дата окончания, поэтому вы можете переименовать "Дата" в " Дата окончания" (поскольку чтение применяется задним числом).

Для даты начала в редакторе запросов вам нужно будет добавить столбец индекса (Добавить столбец > Столбец индекса). Вы должны убедиться, что ваши данные отсортированы по идентификатору счетчика и дате возрастания, прежде чем делать это. Назовите столбец Индекс.

Затем добавьте столбец > Пользовательский столбец и извлеките дату чтения из предыдущего ряда. Позвоните в новый столбец " Предыдущая дата окончания".

// A try is necessary because we can't get the previous row if there is no previous row (we'll get an error, which we can handle in the 'otherwise' block)
try 
  if 
    // See if the previous row is for the same Meter ID
    [Meter ID] = #"Reordered Columns"{[Index] - 1}[Meter ID] 
  then 
    // If it is, grab the Reading Date from the previous row
    #"Reordered Columns"{[Index]-1}[End Date] 
  else 
    // If this is the first reading for a meter, calculate the Start Date by subtracting the No. of Days from the End Date
    Date.AddDays([End Date], -[No. of Days])
otherwise
  // If this is the first row in the table, also calculate the Start Date by subtracting the No. of Days from the End Date
  Date.AddDays([End Date], -[No. of Days])

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

Date.AddDays ([Предыдущая дата окончания], 1

Обратите внимание: если вы хотите, чтобы считываемая дата считалась в предыдущем периоде, вычтите 1 из конечной даты, а не добавляйте 1 к начальной дате (предыдущей конечной дате).

Расширьте свои данные, чтобы иметь 1 строку в день

На этом этапе у вас должен быть столбец "Идентификатор счетчика", "Дата начала", "Дата окончания" и "Потребление за день", который отражает то, что вы ожидаете (т. Е. Потребление за день является правильным для диапазона дат).

Данные на данный момент (при условии, что ваши столбцы

Последний шаг - дублирование каждой строки для каждой даты в диапазоне дат. Есть несколько решений для этого, изложенных в этой теме ( https://community.powerbi.com/t5/Desktop/Convert-date-ranges-into-list-of-dates/td-p/129418), но лично я рекомендую технику (и видео), размещенную MarcelBeug ( https://youtu.be/QSXzhb-EwHM).

Вы должны получить что-то более похожее на это (после некоторого удаления и переименования столбцов):

Конечная модель данных

в заключение

Теперь, когда у вас есть одна строка на метр и дату, а подсчет потребления в день уже рассчитан, вы можете создать визуал. Например, вы можете сделать столбчатую диаграмму с датой на оси и потреблением в день в качестве значения. По умолчанию Power BI распознает, что Дата является датой, и сворачивает ее по году-кварталу-месяцу-дню. Нажмите маленькую букву "х" по годам и кварталам, и вы получите график, который суммирует потребление за день по месяцам. Вы также можете перейти к отдельной дате.

Финальный график

Дальнейшее чтение

  1. Чтение значения из предыдущей строки в Power Query
  2. Если утверждения в Power Query
  3. Функция AddDays в Power Query
  4. Добавление комментариев в Power Query
  5. Перехват ошибок в Power Query
  6. Преобразование диапазона дат в список дат (решение Марселя Буга)
  7. Подобная проблема, на которую я ранее ответил
Другие вопросы по тегам