Получить расписания конкретной даты из диапазонов дат с помощью запроса MDX - PullRequest
1 голос
/ 24 апреля 2019

Я уже публиковал эту проблему много раз, но, к сожалению, никто не мог понять, извините за плохой английский: (* ​​1001 * Я переформулирую ...

У меня есть следующая таблица фактов enter image description here

Я хочу получить записи, которые соответствуют определенной дате и дню недели (JOUR) во всем диапазоне дат (DATE_DEB, DATE_FIN)

Я могу сделать это в SQL какthis:

SELECT  DATE_DEB, 
DATE_FIN,
ID_HOR,
to_char(HR_DEB,'hh24:mi:ss') as HR_DEB,
to_char(HR_FIN,'hh24:mi:ss') as HR_FIN,
JOUR
FROM  GRP_HOR HOR, GRP
WHERE GRP.ID_ACTIV_GRP = HOR.ID_ACTIV_GRP
AND TO_DATE('1998-01-08', 'YYYY-MM-DD') between DATE_DEB and DATE_FIN
AND 1 + TRUNC(TO_DATE('1998-01-08', 'YYYY-MM-DD')) - TRUNC(TO_DATE('1998-01-08', 'YYYY-MM-DD'), 'IW') = JOUR

Итак, я получу 29 записей (см. ниже), которые включены в каждый диапазон и соответствуют дню недели (JOUR), после чего я хочу увеличить их на часы (HR_DEB), HR_FIN).

Проблема в том, как лучше всего это сделать?

  • Создать 2 измерения даты и связать их с DATE_DEB, DATE_FIN.

  • Создать измерение 2 Time и связать их с HR_DEB, HR_FIN.

Как я могу реализовать предложение Между SQL в MDX? Или больше или меньше чем?

Заранее спасибо.

ВЫХОД:
enter image description here

1 Ответ

1 голос
/ 25 апреля 2019

Чтобы указать диапазон дат в MDX, вы просто используете оператор двоеточия :

Вот документация по MSDN: https://docs.microsoft.com/en-us/sql/mdx/range-mdx?view=sql-server-2017

Вот пример, который они дают:

With Member [Measures].[Freight Per Customer] as  
 (  
     [Measures].[Internet Freight Cost]  
     /   
     [Measures].[Customer Count]  
)  
SELECT   
    {[Ship Date].[Calendar].[Month].&[2004]&[1] : [Ship Date].[Calendar].[Month].&[2004]&[3]} ON 0,  
    [Product].[Category].[Category].Members ON 1  
FROM  
    [Adventure Works]  
WHERE  
    ([Measures].[Freight Per Customer])  
...