Страницы: 1
RSS
DAX. Вычислить количество дней между событиями по дате в одном столбце, Необходимо выполнить внутри существующей меры.
 
Здравствуйте!
Прошу помочь с решением задачи. Прилично времени потратил на подбор решения, но не получается.

P.S.: Знаю, что пожалуй не стоит решать без SUMX + FILTER, SUMMARIZE + FILTER, но эти решение мне более понятны, чем CALCULATE.

Дано:
  1. Таблица "Ученики"
  2. Таблица "ДДС"
  3. Таблица "Календарь"
  4. Мера "! Баланс счёта на конец дня"
  5. Мера "! Баланс счёта на конец дня + кол-во дней"
  6. Модель данных построена
Ученики разных школ, открыли счета в банке "Гринготтс". Ученики хранят сбережения в 3-х валютах.
Иногда ученики пополняют счёт, иногда снимают деньги. Если баланс положительный, то на него начисляется процент на остаток.

Необходимо:
Вычислить кол-во дней между операциями. Полученное значение будет указывать на кол-во дней, которые баланс счёта не изменялся.

Пример:



Мера "! Баланс счёта на конец дня":
Код
! Баланс счёта на конец дня = 
var DDSMaxDate = MAX('ДДС'[Дата])

return
CALCULATE(
    SUMX(
------------------------------------------- Сборка таблицы со столбцами Дата, Клиент, Ставка %, Движение ДС -------------------------------------
            SUMMARIZE(  // Создаём таблицу
                FILTER(
                    'ДДС',
                    'ДДС'[Валюта] = "RUR" // Фильтруем таблицу по одной валюте
                ),
                'Календарь'[Date],  // Календарь из справочника
                'ДДС'[ID Ученика],  // Уникальный номер клиента
                'ДДС'[Ставка],  // Добавляем в таблицу процентную ставку по выбранной валюте
                'ДДС'[Сумма]  // Добавляем столбец со всеми движениями ДС
            ),
    [Сумма]), // Суммируем все движения ДС
------------------------------------------- Создаём конструкцию для подсчёта баланса на счёте на дату банковской операции ------------------------
    FILTER(
        ALLSELECTED('Календарь'),
        'Календарь'[Date] <= DDSMaxDate
    )
)



Мера "! Баланс счёта на конец дня + кол-во дней"
Код
! Баланс счёта на конец дня + кол-во дней = 
var DDSMaxDate = MAX('ДДС'[Дата])

return
CALCULATE(
    SUMX(
------------------------------------------- Сборка таблицы со столбцами Дата, Клиент, Ставка %, Движение ДС -------------------------------------
        SUMMARIZE(  // Создаём таблицу
             FILTER(
                'ДДС',
                'ДДС'[Валюта] = "RUR" // Фильтруем таблицу по одной валюте
            ),
            'Календарь'[Date],  // Календарь из справочника
            'ДДС'[ID Ученика],  // Уникальный номер клиента
            'ДДС'[Ставка],  // Добавляем в таблицу процентную ставку по выбранной валюте
            'ДДС'[Сумма]  // Добавляем столбец со всеми движениями ДС
        ),
            VAR DayQuantity =
                    IF(
                        ISBLANK('ДДС'[Дата]),
                        CALCULATE(
                            COUNTROWS('Календарь'),
                            FILTER(
                                'Календарь',
                                'Календарь'[Date] > 'ДДС'[Дата] && 'Календарь'[Date] <= MIN('ДДС'[Дата])
                            )
                        ),
                        1)
            RETURN DayQuantity
    DayQuantity * [Сумма]), // Суммируем все движения ДС
------------------------------------------- Создаём конструкцию для подсчёта баланса на счёте на дату банковской операции ------------------------
    FILTER(
        ALLSELECTED('Календарь'),
        'Календарь'[Date] <= DDSMaxDate
    )
)

В этой мере хотел встроить VAR внутри SUMX () (такой приём я видел).
Изменено: ivanka - 07.09.2020 10:27:12
 
Еще актуален вопрос?
Если честно, не понял, что вы пытаетесь посчитать второй (нерабочей) мерой. Только количество дней между двумя операциями?
Код
Количество дней между операциями = 
IF(NOT(ISBLANK([Сумма ДДС])),
VAR _PrevDate = CALCULATE(LASTNONBLANK('ДДС'[Дата],[Сумма ДДС]), FILTER(ALL('Календарь'), 'Календарь'[Date]< MAX('Календарь'[Date])))
VAR _CurrentDate = MAX('Календарь'[Date])
RETURN DATEDIFF(_PrevDate,_CurrentDate,DAY)
)
где
Код
Сумма ДДС = SUM('ДДС'[Сумма])
F1 творит чудеса
Страницы: 1
Наверх