Сумма, где версия является самой высокой по другой переменной (без максимальной версии во всех данных) - PullRequest
1 голос
/ 23 апреля 2020

Я изо всех сил стараюсь, чтобы эта мера работала.

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

Итак, следуя этому примеру таблица:

|---------------------|------------------|------------------|
|      House_Id       |     Version_Id   |     Value        |
|---------------------|------------------|------------------|
|          1          |         1        |       1000       |
|---------------------|------------------|------------------|
|          1          |         2        |       2000       |
|---------------------|------------------|------------------|
|          2          |         1        |       3000       |
|---------------------|------------------|------------------|
|          3          |         1        |       5000       |
|---------------------|------------------|------------------|

Результат этой меры должен быть: 10.000 , потому что house_id 1 версия 1 игнорируется, так как есть другая версия выше.

По House_id результат должно быть:

|---------------------|------------------|
|      House_Id       |     Value        |
|---------------------|------------------|
|          1          |       2000       |
|---------------------|------------------|
|          1          |       3000       |
|---------------------|------------------|
|          2          |       5000       |
|---------------------|------------------|

Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

Учитывая правильный ответ @RADO дал, теперь я хочу дальше увеличьте эту меру:

Теперь моя главная таблица данных в действительности имеет больше столбцов. Что делать, если я хочу добавить эту меру в визуал таблицы, который разделяет меру на другой столбец из таблицы данных (или относится к ней).

Например (упрощенная таблица данных):

|---------------------|------------------|------------------|------------------|
|      House_Id       |     Version_Id   |     Color_Id     |       Value      |
|---------------------|------------------|------------------|------------------|
|          1          |         1        |    1 (Green)     |       1000       |
|---------------------|------------------|------------------|------------------|
|          1          |         2        |    2 (Red)       |       2000       |
|---------------------|------------------|------------------|------------------|
|          2          |         1        |    1 (Green)     |       3000       |
|---------------------|------------------|------------------|------------------|
|          3          |         1        |    1 (Green)     |       5000       |
|---------------------|------------------|------------------|------------------|

В основной таблице есть Color_Id, который связан с таблицей цветов. Затем я добавляю визуальную таблицу с ColorName (из ColorTable) и меру (ColorId 1 - зеленый, 2 - красный).

При данном ответе результат неверен при фильтрации по ColorName. Хотя строка Итого действительно верна:

|---------------------|------------------|
|      ColorName      |      Value       |
|---------------------|------------------|
|        Green        |       9000       |
|---------------------|------------------|
|        Red          |       2000       |
|---------------------|------------------|
|        Total        |       10000      |
|---------------------|------------------|

Этот результат неверен для ColorName, поскольку 9000 + 2000 равно 11000, а не 10000. Мера должна игнорировать строки со старой версией. В приведенном выше примере это строка для House_Id 1 и Color_Id Green, потому что версия старая (есть более новая версия для этого House_Id).

Итак:

  1. Как мне обратиться в этой ситуации?
  2. Что если я хочу отфильтровать по другому столбцу (или связанному) с таблицей данных, такой как Location_Id? Можно определить меру таким образом, чтобы она работала для любых заданных числовых разбиений для столбцов в основной таблице данных?

1 Ответ

2 голосов
/ 23 апреля 2020

Я использую «Данные» в качестве имени вашей таблицы.

Sum of Latest Values =
VAR Latest_Versions =
    SUMMARIZE ( Data, Data[House_id], "Latest_Version", MAX ( Data[Version_Id] ) )

VAR Latest_Values =
    TREATAS ( Latest_Versions, Data[House_id], Data[Version_Id] )

VAR Result =
    CALCULATE ( SUM ( Data[Value] ), Latest_Values )

RETURN Result

Измерение вывода:

enter image description here

Как это работает:

  1. Мы вычисляем виртуальный таблица house_ids и их максимальных версий, и сохранить ее в переменной «Latest_Versions»
  2. Мы используем таблицу с первого шага для фильтрации данных только для последних версий и устанавливаем sh правильную линию данных (https://www.sqlbi.com/articles/understanding-data-lineage-in-dax/)
  3. Мы вычисляем сумму последних значений путем фильтрации данных только по самым последним значениям.

Подробнее об этом шаблоне можно узнать здесь: https://www.sqlbi.com/articles/propagate-filters-using-treatas-in-dax/

...