Краткое описание отчета:
Параметр, задаваемый пользователем - дата.
Данные должны отображаться в разрезе РФ, округов, субъектов РФ.
Показатели - количество граждан льготной категории.
Каждая запись в таблице фактов имеет 4 даты - дата включения, дата исключения, дата получения, дата отмены.
Цель:
Выбрать из таблицы фактов записи, удовлетворяющие следующим условиям:
Дата включения меньше или равна дате, заданной в параметрах
И Дата исключения больше или равна дате, заданной в параметрах
И Дата получения меньше или равна дате, заданной в параметрах
И Дата отмены больше или равна дате, заданной в параметрах.
Настройки OLAP-представления:
Создано тестовое OLAP-представление с одной мерой. Размерностью по РФ, субъектам на оси строк.
На ось фильтров добавляется:
- Иерархия по дате включения с формулой
[frllo_include_date].[frllo_include_date_ier].Levels(1).Members
и с фильтром:
При этом время ожидания получения результата несколько секунд.
- Добавляем иерархия по дате исключения с формулой
[frllo_exclude_date].[frllo_exclude_date_ier].Levels(1).Members
и с фильтром:
При этом время ожидания - бесконечно долгое, в итоге ошибка по тайм-ауту. До добавления фильтрации по датам получения и отмены дело не доходит.
Вопрос:
Как корректно обработать указанные условия?
Дополнительная информация:
-
Схема - https://alpha.rt-eu.ru/
-
Путь к OLAP-представлению - Администрирование/OLAP/ФРЛЛО_03_тест
-
Объем данных на тестовой схеме:
Таблица фактов - 2,5 млн записей
Хранилище с датами - 31 тыс. записейОбъем данных на продуктовой схеме:
Таблица фактов - 26-30 млн записей
Хранилище с датами - 70 тыс. записей -
Для даты включения, даты исключения, даты получения и даты отмены созданы отдельные размерности, но все на одном хранилище.
-
mdx-запрос:
WITH
SET [default_dimRegion_region_rf] AS {[dimRegion].[region_rf].DefaultMember}
SET [default_frllo_include_date_frllo_include_date_ier] AS FILTER([frllo_include_date].[frllo_include_date_ier].Levels(1).Members, IIF([frllo_include_date].[frllo_include_date_ier].CurrentMember.properties(“member_type”) = 2, 1 < 0, (DateValue([frllo_include_date].[frllo_include_date_ier].CurrentMember.properties(“frllo_include_date_atr”)) = DateSerial(2021,3,23) OR DateValue([frllo_include_date].[frllo_include_date_ier].CurrentMember.properties(“frllo_include_date_atr”)) < DateSerial(2021,3,23))))
SET [default_frllo_exclude_date_frllo_exclude_date_ier] AS FILTER([frllo_exclude_date].[frllo_exclude_date_ier].Levels(1).Members, IIF([frllo_exclude_date].[frllo_exclude_date_ier].CurrentMember.properties(“member_type”) = 2, 1 < 0, (DateValue([frllo_exclude_date].[frllo_exclude_date_ier].CurrentMember.properties(“frllo_exclude_date_atr”)) = DateSerial(2021,3,23) OR DateValue([frllo_exclude_date].[frllo_exclude_date_ier].CurrentMember.properties(“frllo_exclude_date_atr”)) > DateSerial(2021,3,23))))
SELECT
{
[Measures].[count_invalidy]
} DIMENSION PROPERTIES [CHILDREN_CARDINALITY],[MEMBER_TYPE] ON COLUMNS,
NON EMPTY {
HIERARCHIZE(union([default_dimRegion_region_rf],
{{[dimRegion].[region_rf].children}}))
} DIMENSION PROPERTIES [CHILDREN_CARDINALITY],[MEMBER_TYPE] ON ROWS
from [frllo_cube_report_03]
WHERE FILTER([default_frllo_include_date_frllo_include_date_ier], COUNT(INTERSECT([default_frllo_include_date_frllo_include_date_ier], DESCENDANTS([frllo_include_date].[frllo_include_date_ier].CurrentMember))) = 1)*FILTER([default_frllo_exclude_date_frllo_exclude_date_ier], COUNT(INTERSECT([default_frllo_exclude_date_frllo_exclude_date_ier], DESCENDANTS([frllo_exclude_date].[frllo_exclude_date_ier].CurrentMember))) = 1)
CELL PROPERTIES VALUE,FORMATTED_VALUE,FORMAT_STRING[/details]