Страницы: 1
RSS
DAX. Фильтрация предыдущих кварталов по количеству дней в текущем квартале., сравнить текущий квартал (X дней) с предыдущими двумя за аналогичное количество дней.
 
Здравствуйте!
Прошу подсказать решение задачи.
Прикладываю файл с готовой моделью данных. В "!Меры" подготовлена мера "Сумма по кварталам".

Допустим сегодня 5 октября. Уже 5 дней на дворе 4-й квартал. Необходимо фильтровать сумму значений по кварталу 2 и 3 за 5 дней.
Т.е. берём во 2-м квартале 6 дней и суммируем. Аналогично с 3-м.
Т.о. сравниваем 4-й квартал за 5 дней, 3-й квартал за 5 дней, 2-й квартал за 5 дней.

Результат:
II кв. = 120'159 за 5 дней
III кв. = 113'650 за 5 дней
IV кв. = 145'537 за 5 дней
Количество вычисляемых дней определяется мерой "Дата".
 
Решил. Но если есть предложения - я с радостью ознакомлюсь.  
 
Предложение есть.
Создали тему - поделитесь решением
 
Доброе время суток.
Цитата
vikttur написал:
поделитесь решением
Эта улица с односторонним движением Вру, Тут решение приложено.  Да там, вроде, ничего сложного. Данные за аналогичный период на два квартала ранее, естественно, на измерениях: год, квартал.
Код
= Var items = CALCULATETABLE(DATEADD('Календарь'[Date], -2, QUARTER), 'Таблица фактов')
Return CALCULATE(SUM('Таблица фактов'[value]), items)
Изменено: Андрей VG - 06.10.2020 20:31:08
 
Андрей VG, благодарю! Протестирую!
Обычно я прикладываю решения если я их нашёл и ответов более нет. Я адаптирую решение для примера и добавлю описание решения.
у Андрей VG решение изящнее (нов ещё не тестировал).
Изменено: ivanka - 06.10.2020 22:13:17
 
Решение:
Я пошёл по пути фильтрации, для этого создал 2 столбца в таблице ТОП3 (это обусловлено моей моделью данных).

По условиям задачи, крайняя дата = 05.10.2020,
где:
05 - пятый день месяца
10 = первый месяц IV квартала
2020 - не должен влиять на фильтрацию.

Создаю ID "для" 05.10.2020:

Первое:
Код
Номер месяца в квартале = MOD(MONTH([Дата])-1,3)+1
Второе:
Код
ID дня в квартале = [Номер месяца в квартале] * 100 + DAY([Дата])

В итоге получаю число 105, где:
1 - первый месяц квартала,
5 - пятый день месяца.

Далее пишу меру:
Код
Сумма по кварталам = 
var D = CALCULATE([Дата], ALLSELECTED('Календарь')) // находим текущую дату без воздействия фильтров

var QDayID =                                        // находим ID дня квартала, что послужит границей для вычислений
    CALCULATE(
        VALUES('ТОП3'[ID дня в квартале]),
        ALL('ТОП3'),
        'ТОП3'[Дата] = D
    )

var QSum =                                          // находим сумму значений с установленной границей 
    CALCULATE(
        SUM('Таблица фактов'[value]),
        'ТОП3'[ID дня в квартале] <= QDayID
    )

return QSum


 
Изменено: ivanka - 07.10.2020 11:20:59
 
Цитата
Андрей VG написал:
= Var items = CALCULATETABLE(DATEADD('Календарь'[Date], -2, QUARTER), 'Таблица фактов')Return CALCULATE(SUM('Таблица фактов'[value]), items)
Выдаёт результат за 2 кв., не за 3. И результат вычислений не сильно похож на правду. Возможно я не очень хорошо адаптировал вашу меру под файл примера.
Изменено: ivanka - 07.10.2020 12:57:36
 
Что-то я не понял, зачем вы там наворотили таблицу TOP3...
если поставить в ось номера кварталов из календаря, всё прекрасно работает вот так:
Код
Сумма по кварталам =
VAR _MaxDate = CALCULATE ( MAX ( 'Таблица фактов'[date] ), ALL ( 'Календарь' ) )
VAR _MaxDateStartOfQuarter = CALCULATE ( STARTOFQUARTER ( 'Календарь'[Date] ), 'Календарь'[Date] = _MaxDate )
VAR _DaysCount = _MaxDate - _MaxDateStartOfQuarter + 1
RETURN
    CALCULATE (
        SUM ( 'Таблица фактов'[value] ),
        DATESINPERIOD (
            'Календарь'[Date],
            STARTOFQUARTER ( 'Календарь'[Date] ),
            _DaysCount,
            DAY
        )
    )
Но в принципе можно и из ТОП3 поставить номер квартала, в вашей модели сработает
F1 творит чудеса
 
Максим Зеленский, благодарю за код. Буду знакомиться. Таблицу TOP3 наворотил, чтобы в оси можно было менять периоды: квартал, год.
Изменено: ivanka - 07.10.2020 20:38:26
Страницы: 1
Наверх