Урок 20 · 8 мин чтения

What-if и disconnected-параметры

Дайте пользователю крутить число — рост, порог, N — через несвязанную таблицу-параметр и SELECTEDVALUE.

Field parameters переключают поля. А что, если пользователю нужно крутить число — «а если рост +10%?», «показать топ-N, где N я задаю», «порог отсечения»? Для этого — disconnected-таблицы (несвязанные) и их частный случай, what-if параметры.

Идея: несвязанная таблица + SELECTEDVALUE

Ключ ко всему — таблица, не связанная ни с чем в модели. Пользователь выбирает в ней значение срезом, а мера читает выбор через SELECTEDVALUE. Связь не нужна: таблица существует только чтобы «поймать» выбор.

Выбранный рост = SELECTEDVALUE ( 'Рост %'[Рост %], 0 )

SELECTEDVALUE возвращает выбранное значение, а если не выбрано (или выбрано несколько) — значение по умолчанию (второй аргумент).

What-if параметр за минуту

Power BI собирает такую таблицу сам: Modeling → New parameter → Numeric range. Задаёте мин/макс/шаг — получаете:

  • таблицу-параметр на GENERATESERIES (ряд чисел);
  • меру, читающую выбор (SELECTEDVALUE);
  • срез на странице.

Дальше пользуетесь выбором в расчётах:

Выручка прогноз =
VAR _Рост = SELECTEDVALUE ( 'Рост %'[Рост %], 0 )
RETURN
    [Выручка] * ( 1 + _Рост )

Пользователь тянет ползунок «Рост %» — прогноз пересчитывается на лету.

Зачем

What-if — это интерактивный «а что если»: сценарии роста, чувствительность, пороги. Пользователь сам подбирает число и сразу видит эффект, без правки модели.

Динамический Top-N

Классика: дать пользователю выбрать N в топ-N. Создаём числовой параметр N и используем его в ранжировании:

Топ-N продаж =
VAR _N = SELECTEDVALUE ( 'N'[N], 10 )
VAR _Rank = RANKX ( ALLSELECTED ( Товары[Товар] ), [Выручка],, DESC, DENSE )
RETURN
    IF ( _Rank <= _N, [Выручка] )

Срез «N» от 5 до 50 — и пользователь сам решает, сколько позиций показать.

Disconnected-таблица как выбор сценария

Несвязанная таблица годится не только для чисел. Можно положить туда варианты сценария (текстом) и ветвиться:

Показатель =
SWITCH (
    SELECTEDVALUE ( 'Сценарий'[Сценарий] ),
    "Оптимистичный", [Выручка] * 1.1,
    "Пессимистичный", [Выручка] * 0.9,
    [Выручка]
)

Это «ручной» родственник field parameters — иногда удобнее, когда логика веток сложная.

Почему таблица именно несвязанная

Если параметр связать с фактом, он начнёт фильтровать данные, а нам нужно лишь «поймать выбор» и использовать его в формуле. Несвязанная таблица не фильтрует — SELECTEDVALUE просто читает, что выбрал пользователь. Это и есть весь трюк.

Проверь себя на наборе

Создайте what-if параметр «Рост, %» (0–50, шаг 5) и меру Прогноз = [Выручка] * ( 1 + SELECTEDVALUE ( 'Рост'[Рост], 0 ) / 100 ). Что покажет Прогноз при выборе 10 % и без выбора?

Показать ответ

При 10 %[Выручка] × 1,10 (на наборе: 9 826 588 × 1,1 = 10 809 246,8). Без выбора срабатывает значение по умолчанию 0Прогноз = [Выручка]. Если без выбора выходит пусто/ошибка — не задан второй аргумент SELECTEDVALUE (fallback), и при множественном выборе вернётся BLANK.

Что дальше

Динамику отчёта закрыли: переключатели полей и числовые сценарии. Дальше — SVG в Power BI: инлайн-графика прямо в ячейках через DAX. Следующий урок.

Зачем таблицу what-if параметра делают НЕсвязанной с моделью?
Параметр нужен, чтобы «поймать» выбор пользователя (число/сценарий), а не фильтровать факт. Несвязанная таблица не влияет на данные; SELECTEDVALUE читает выбор, и он идёт в формулу (рост, порог, N).
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43