DAX: создать таблицу с ПОСЛЕДНИМИ записями

#iot #powerbi #dax #azure-table-storage #temperature

#iot #powerbi #dax #azure-table-storage #температура

Вопрос:

У меня дома есть несколько датчиков, и я хочу использовать PowerBI для отображения графика температур в разных комнатах, а также для измерения текущих / самых последних значений.

Мне труднее всего писать это в dax:

Данные поступают в PowerBI из таблицы Azure с именем «DeviceReadings» в форме:

  • Расположение (текст, ключ раздела)
  • Строка (числовое значение, основанное на сохраненной дате, не используется)
  • Дата (дата-время, временная метка)
  • Температура (десятичная)
  • Влажность (десятичная)

Чего бы я хотел, так это: (ПСЕВДОКОД)

 Select Location, Last(Date), Temperature, Humidity FROM DeviceReadings 
GROUP BY Location
  

Ожидаемый / желаемый результат:

 "Mediaroom", "01.10.2017 09:00", 26, 17
"Office", "01.10.2017 09:03", 28, 23
"Livingroom", "01.10.2017 09:13", 22, 32
  

Очевидно, я пытаюсь создать вычисляемую таблицу DAX на основе этих показаний. Идея состоит в том, чтобы создать вычисляемую таблицу, которая всегда содержит самую последнюю температуру / влажность, чтобы я мог отображать эти значения в виде визуальных элементов в стиле датчика.

Я пытался установить table = SUMMARIZECOLUMNS, группируя по местоположению, а затем добавляя именованные столбцы «LastSampled» как «MAX (DeviceReadings [Дата]), а затем «Температура»; LASTNONBLANK(DeviceReadings [Температура]; DeviceReadings [Температура]); но это не дает «подключенного значения температуры, но что-то еще.

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

Я просто хочу, чтобы на моей панели управления PowerBI отображались «Самые последние показания температуры» по местоположению. (Я использую PowerBI desktop для записи всех запросов и создания отчетов и еще не загружен на портал PowerBI)

Мои навыки работы с DAX довольно низки, поэтому мне нужна помощь в написании вычисляемого запроса.

Ответ №1:

Попробуйте использовать это выражение:

 Table = SELECTCOLUMNS (
    FILTER (
        CROSSJOIN (
            SELECTCOLUMNS (
                GROUPBY (
                    DeviceReadings,
                    DeviceReadings[Location],
                    "LASTDATE", MAXX ( CURRENTGROUP (), DeviceReadings[Date] )
                ),
                "Location", DeviceReadings[Location],
                "Date", [LASTDATE]
            ),
            SELECTCOLUMNS (
                DeviceReadings,
                "DateJoin", DeviceReadings[Date],
                "LocationJoin", DeviceReadings[Location],
                "Humidity", DeviceReadings[Humidity],
                "Temperature", DeviceReadings[Temperature]
            )
        ),
        [Date] = [DateJoin]
            amp;amp; [Location] = [LocationJoin]
    ),
    "Location", [Location],
    "LastDate", [Date],
    "Temperature", [Temperature],
    "Humidity", [Humidity]
)
  

Я почти уверен, что есть более простой способ добиться того, что вам нужно, но я не могу понять прямо сейчас.

Дайте мне знать, если это поможет.

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

1. Это работает! Я пока проголосовал за это, и если ничего более простого не придумается, я отмечу это как ответ — фух, это много DAX, хотя для, казалось бы, простого запроса! 🙂

2. Принимая это как ответ, это работает, и никто не придумал более простого решения. Спасибо, Алекс 🙂