Как вычислить добавочные значения в Power BI с помощью DAX-запроса?

#powerbi

#powerbi

Вопрос:

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

[![Образец данных] [1]][1]

У меня 4 месяца, страна, количество случаев / смертей, количество. Я должен рассчитать приращение случаев или смертей, а затем продемонстрировать тенденцию. Мой текущий файл содержит данные на мировом уровне, в которых указаны все страны, количество дней в которых превышает несколько месяцев. Я смог выполнить задачу в Excel с небольшими данными, так как было удобно фильтровать, а затем выполнять вычисления.

И еще один момент: для дня 0, поскольку нет подсчета случаев или смертей за предыдущий день, мы рассматриваем количество дней 0 как добавочное значение для демонстрации тенденций.

Кто-нибудь может подсказать, как выполнить эту задачу в Power BI? [1]: https://i.stack.imgur.com/4xNFV.png

Комментарии:

1. Итак, вам нужен код для столбца Increment, верно?

2. любые рекомендации будут полезны…..

Ответ №1:

Вы можете выполнить некоторое преобразование Power Query для получения требуемого столбца. Ниже приведен код из расширенного редактора с учетом вашего имени таблицы Your_source_table_name

 let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bc4xDoAgDEDRu3RmoLSgHsEzEAYiJLq44P0j6UCMdPrDW36MYMHAfpcr9x651dbrVoJkIqBixCjmFGNiMVLM4ybGigUbxL4vpebn7EU7rQyi6WTQMo38iBVyHlJ6AQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [day = _t, country = _t, #"cases/death" = _t, count = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"day", Int64.Type}, {"country", type text}, {"cases/death", type text}, {"count", Int64.Type}}),
    
    //-- New transformation starts from here
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"country", Order.Ascending}, {"cases/death", Order.Ascending}, {"day", Order.Ascending}}),
    #"Added Custom" = Table.AddColumn(#"Sorted Rows", "day_prev", each [day] - 1),
    #"Reordered Columns" = Table.ReorderColumns(#"Added Custom",{"day", "day_prev", "country", "cases/death", "count"}),
    #"Merged Queries" = Table.NestedJoin(#"Reordered Columns", {"country", "cases/death", "day_prev"}, #"Reordered Columns", {"country", "cases/death", "day"}, "Reordered Columns", JoinKind.LeftOuter),
    #"Expanded Reordered Columns" = Table.ExpandTableColumn(#"Merged Queries", "Reordered Columns", {"count"}, {"Reordered Columns.count"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded Reordered Columns",{{"Reordered Columns.count", "count_prev"}}),
    #"Added Custom1" = Table.AddColumn(#"Renamed Columns", "increase", each if [count_prev] = null then [count] else [count] - [count_prev]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom1",{{"increase", Int64.Type}})
in
    #"Changed Type1"
  

Вот окончательный результат-

введите описание изображения здесь

==========

Вы также можете добиться того же, используя Measure с помощью приведенного ниже кода-

 increase_using_measure = 

VAR current_row_day = MIN(your_source_table_name[day])
VAR current_row_country = MIN(your_source_table_name[country])
VAR current_row_case_death = MIN(your_source_table_name[cases/death])
VAR current_row_count = MIN(your_source_table_name[count])

VAR previous_day_count = 
LOOKUPVALUE(
    your_source_table_name[count],
    your_source_table_name[day],current_row_day-1,
    your_source_table_name[country],current_row_country,
    your_source_table_name[cases/death],current_row_case_death
)

RETURN if(previous_day_count = BLANK(),current_row_count, current_row_count - previous_day_count)
  

Вот результат для обоих случаев-

введите описание изображения здесь

Комментарии:

1. Привет @mkRabbani …. Мне нужно еще одно разъяснение в отношении того же сценария. Я пошел дальше и создал новый столбец для Increment. Я застрял в создании показателя для скользящей средней за 3 дня. Я попытался, проверив несколько сообщений в Интернете, но не смог сделать это много. Большинство скользящих средних работают с датой (в формате даты). Поскольку у меня дни… только в числовом формате… Я не уверен, какая функция помогла бы мне получить Mov_Avg для 3-дневного временного интервала в индексе приращения.

2. это будет функция calculate, заменяющая значение поиска>>> вычислить(среднее (количество), фильтр (все (имя_таблицы),страна = var_country amp;amp; case = var_case amp;amp; day <= var_day amp;amp; day >= var_day-2))

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

4. @mkRabbani… Конечно, я опубликую еще один вопрос по этому поводу