У меня проблема с визуализацией среднего значения с начала года.

У меня есть база данных в Excel, которая связана с Power BI. База данных имеет следующий формат: структура базы данных Что необходимо для построения графика, так это среднее значение за месяц и среднее значение с начала года на основе данных. В отчете Power BI есть несколько срезов, поэтому нужно выбрать 5–6 разных регионов и 5–6 разных типов моделей.

Среднее за месяц работает с отображением среднего времени выполнения заказа за каждый период. Период в основном представляет собой месяц, но не в той же системе, что и календарный месяц. P01 — октябрь, P02 — ноябрь, P03 — декабрь… P12 — сентябрь.

Итак, что необходимо рассчитать, так это среднее значение с начала года, когда слайсеры все еще работают:

Для P01 среднемесячное значение и среднее значение с начала года одинаковы. Для P02 среднемесячное значение основано на всех позициях, зарегистрированных для P02, но среднее значение с начала года является следующим: YTD P02 = сумма времени выполнения, деленная на сумму количества в периодах P01 и P02 вместе.

Для P03 YTD будет представлять собой сумму времени выполнения заказа в периоде P01-P03, деленную на количество товаров за тот же период.

И т. д. для P04-P12 выполняется та же настройка.

Я использую Power Bi для визуализации среднемесячного значения, а также можно рассчитать ежемесячное количество (количество).

Как я могу управлять графиком, где ytd будет использовать расчетные значения мощности bi? мощный биграф

Среднемесячное и месячное количество существуют, поэтому задача написать функцию, используя следующие значения:

  • YTD P01 = AVG Время выполнения P01/ количество времени выполнения P01
  • YTD P02 = (AVG P01 * количество P01 + AVG P02 * количество P02) / (счет P01 + количество P02)
  • YTD P03 = (AVG P01 * количество P01 + AVG P02 * количество P02 + AVG P03 * количество P03) / (счет P01 + количество P02 + количество P03)

.... и т. д. до P12.

У кого-нибудь есть идея для решения? Заранее спасибо.

Gabor

0
Gábor Somogyi 8 Ноя 2019 в 14:48
1
Это может быть хорошей отправной точкой для вас: daxpatterns.com/time-patterns
 – 
BarneyL
8 Ноя 2019 в 15:04

1 ответ

Хотя вы не используете фактические даты, у вас есть значения в порядке возрастания, поэтому вы должны иметь возможность использовать шаблоны, аналогичные стандартным показателям с начала года до даты в DAX и Power BI. Здесь следует отдать должное команде SQLBI, стоящей за веб-сайтом шаблонов DAX. Я просто настраиваю их работать здесь.

Чтобы все было ясно, я бы предложил разбить все на этапы, построить годовые показатели как для общего времени выполнения заказа, так и для количества измерений, а затем третий, чтобы дать фактическое среднее значение, которое вам нужно. Отдельные меры также помогают при отладке, если есть проблема.

Я предполагаю, что ваша таблица данных называется MyTable.

[TotalLeadTimeYTD] := 
CALCULATE (
    SUM('MyTable'[Leadtime]), 
    FILTER (
        ALL ( 'MyTable' ), 
        'MyTable'[FY] = MAX ( 'MyTable'[FY] )
            && 'MyTable'[Period] <= MAX ( 'MyTable'[Period] )
    )
)

А также:

[CountOfMeasuresYTD] := 
CALCULATE (
    COUNTROWS('MyTable'), 
    FILTER (
        ALL ( 'MyTable' ), 
        'MyTable'[FY] = MAX ( 'MyTable'[FY] )
            && 'MyTable'[Period] <= MAX ( 'MyTable'[Period] )
    )
)

И наконец

AverageLeadTimeYTS := DIVIDE([TotalLeadTimeYTD],[CountOfMeasuresYTD])

Имейте в виду, что, поскольку у вас нет отдельной таблицы дат, ВСЕ («MyTable») вычислений также удалят любые другие примененные вами фильтры. Если это не желаемый результат, вам нужно изменить так, чтобы фильтры по периоду и году удалялись, но не по другим. ALL('MyTable'[FY],'MyTable'[Period] ) может работать, но мы находимся в той точке, где трудно кодировать без демонстрационных данных.

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

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcos0tFDSUQowBBKGSrE6CBEjIGGEImIMJIxhIuYYusyRdMUCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", Int64.Type}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "FY"}, {"Column2", "Period"}, {"Column3", "Leadtime"}})
in
    #"Renamed Columns"
0
BarneyL 8 Ноя 2019 в 20:24
Привет, BarneyL, спасибо за быстрый ответ, но в измерении общего времени с начала года в && я не могу выбрать правильный столбец. Его просто нет в списке. Я мог бы включить образцы данных в электронную таблицу Excel, если это может помочь
 – 
Gábor Somogyi
8 Ноя 2019 в 16:47
Примеры данных могут помочь, но не могли бы вы пояснить, что вы имеете в виду, говоря, что не можете выбрать правильный столбец? Что произойдет, если вы просто наберете то, что нужно?
 – 
BarneyL
8 Ноя 2019 в 16:54
Я обновил код запроса мощности для жестко закодированного набора данных. Копирование и вставка показателей дает то, что я считаю точными результатами.
 – 
BarneyL
8 Ноя 2019 в 20:25