Последнее непустое значение в MDX для фильтрации событий между двумя датами и статусом - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть события в процессе.Каждое событие имеет дату, сумму и статус.Мне нужен вычисляющий член, который возвращает последнюю сумму по событию, состоянию и между первым днем ​​января и до выбранной даты в том же году

Я пробовал полуаддитивную LastChildNonEmpty, но возвращает только одну строку для события, которое имеетпоследняя дата

С этими данными я ожидаю:


|События |Дата |Сумма |Статус |

|Event1 |20180301 |05 |открыть |

|Event1 |20180311 |12 |открыть |

|Event2 |20180406 |02 |открыть |

|Event1 |20180523 |60 |закрыть |

|Event2 |20180809 |07 |закрыть |

|Event1 |20190104 |27 |open |

Вопросы и результаты

- События с 20180101 по 20180331 статус открыт:
EVENT1 20180311 12 открыт

- события между 20180101 и 20180430 статусами открыты
EVENT1 20180311 12 открыты

EVENT2 20180406 2 открыты

- события между 20180101 и 20180531 статусами открыты
EVENT2 20180406 2 открыто

- события между 20180101 и 20180531 статусом закрываются
EVENT1 20180523 60 закрываются

Извините, если форматплохо, но у меня есть чтение, и я не знаю, как создать таблицу с данными

Спасибо

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете решить вышеуказанную проблему с помощью вычисленной меры.Функция MDX BottomCount решит вашу проблему.Вот пример, основанный на AdventureWorks.Приведенный ниже запрос содержит список даты, объема продаж и количества клиентов.

select [Measures].[Customer Count] on columns,
nonempty(
{(
{[Date].[Date].&[20130101]:[Date].[Date].&[20130713]},
[Sales Reason].[Sales Reason].[Sales Reason])}
,[Measures].[Customer Count]
)
on rows
from [Adventure Works]
where 
([Date].[Calendar Year].&[2013])

Результат enter image description here

Теперь давайте создадим вычисленную меру и протестируем ее для случая с выборкой.

with member measures.t 
as 
(bottomcount(
nonempty(
existing
{([Date].[Date].[Date].members,[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])

select measures.t on columns 
from [Adventure Works]
where 
([Date].[Date].&[20130101]:[Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])

enter image description here

Идея состоит в том, что вы можете передать диапазон дат и причину продаж, где и показатель будет содержать последнее значение.

Редактировать: следующий запрос будет обработанситуация, когда пользователь пропускает одну дату, а атрибуты передаются.Если пользовательская иерархия пройдена, жесткое кодирование начала года может быть предотвращено

with member measures.t 
as 
(bottomcount(
nonempty(
{({[Date].[Date].&[20130101]:[Date].[Date].currentmember},[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])
select measures.t on columns 
from [Adventure Works]
where 
([Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])
...