Страницы: 1
RSS
DAX. Изменение вычисления по контексту фильтра, Если внешний контекст содержит определённый текст, то для него необходимо изменить вычисление
 
Здравствуйте!
У меня есть модель данных из 3-х таблиц:
  1. Таблица "волшебники": ID Волшебника, Волшебник.
  2. Таблица "пары" (дисциплины): ID предмета, предмет
  3. Таблица "факты": ID Волшебника, ID предмета, Часы


Столбец "Часы" в таблице "Табель" суммируется.
По столбцу "ID Волшебника" происходит фильтрация суммы часов.
В результате получается график:



Необходимо, чтобы строки, где "ID предмета" = 30, суммировались и прибавлялись к результатам "Гермиона Грейнджер".
Пример того, как есть и как должно быть отображен в файле Excel "Данные для примера".
Прикладываю файл "Пример.pbix." - в нём есть мера "Кол-во часов":
Код
Кол-во часов = 
var Bez30 = CALCULATE(
                    SUM('Табель'[Часы]),
                    'Табель'[ID предмета] <> 30)

var Tolko30 = CALCULATE(
                    SUM('Табель'[Часы]),
                    'Табель'[ID предмета] = 30)

return
SWITCH(
    TRUE(),
    "Гермиона Грейнджер", Bez30 + Tolko30,
    Bez30)

Каждая переменная считает корректно. Но при использовании SWITCH, мере перестаёт работать.

Сейчас, сумма часов по предметам = 135 ч., т.е. по каждому волшебнику 45 ч.
Необходимо, чтобы по "Гермиона Грейнджер" было 75 ч., а по другим волшебникам 30 ч.
 
Изменено: ivanka - 02.07.2020 00:15:55
 
Решил:


Код
Кол-во часов = 
var Bez30 = CALCULATE(
                    SUM('Табель'[Часы]),
                    'Табель'[ID предмета] <> 30)

var Tolko30 = SUM('Табель'[Часы])

var SumH = SUM('Табель'[Часы])

return
IF(
    HASONEVALUE('Волшебники'[Волшебник]),
    SWITCH(
        TRUE(),
        VALUES('Волшебники'[Волшебник]) = "Гермиона Грейнджер", Tolko30 + Bez30,
        Bez30),
    SumH)
 
Изменено: ivanka - 02.07.2020 00:21:04
 

Мера выдаёт корректный результат когда переменная Tolko30 записана без фильтра, по типу:

var Tolko30 = SUM('Табель'[Часы])

Мне кажется это не совсем корректно.

Считаю необходимым вычислить сумму часов, где ID предмета = 30 и полученную сумму прибавлять к результату Гермионы.

Т.е. должно быть примерно вот так:

var Tolko30 = CALCULATE(

                   SUM('Табель'[Часы]),

                   'Табель'[ID предмета] = 30)

Но в этом случае, мера работает не корректно.

Изменено: ivanka - 02.07.2020 08:17:54
 
Решил:
Код
Кол-во часов = 
var Bez30 = 
    SUMX(
        FILTER(
            'Табель',
            'Табель'[ID предмета] <> 30),
        'Табель'[Часы])


var Tolko30c =
    CALCULATE(
        SUM('Табель'[Часы]),
        ALL('Волшебники'[Волшебник]),
        'Табель'[ID предмета] = 30)


return
IF(
    HASONEVALUE('Волшебники'[Волшебник]),
    SWITCH(
        TRUE(),
        VALUES('Волшебники'[Волшебник]) = "Гермиона Грейнджер", Bez30 + Tolko30c,
        Bez30),
    SUM('Табель'[Часы]))

Изменено: ivanka - 02.07.2020 09:33:14
 
Немного перемудрили:
Код
Кол-во часов =
VAR Bez30 =
    CALCULATE( SUM( 'Табель'[Часы] ), 'Дисциплины'[ID предмета] <> 30 )
VAR Tolko30 =
    CALCULATE(
        SUM( 'Табель'[Часы] ),
        'Дисциплины'[ID предмета] = 30,
        ALL( 'Волшебники' )
    )
RETURN
    IF(
        HASONEVALUE( 'Волшебники'[Волшебник] ),
        IF(
            SELECTEDVALUE( 'Волшебники'[Волшебник] ) = "Гермиона Грейнджер",
            Bez30 + Tolko30,
            Bez30
        ),
        SUM( 'Табель'[Часы] )
    )
F1 творит чудеса
Страницы: 1
Наверх