MDX Date Formatting

Кто-нибудь может подсказать, пожалуйста, как форматировать дату в запросах MDX? Мы не используем SSRS для генерации отчетов, у нас есть собственный инструмент отчетности, построенный на SSAS. Фильтр даты отправляет дату в формате гггг / мм / дд. На данный момент у нас нет измерения даты. Моя дата-член выглядит так:

[CNB_DimSampleInfo].[COAReleasedON].&[2013-01-02T03:20:00]. 

Как я могу отформатировать дату в STRTOmemeber? Я пытался сделать это. Мой вопрос заключается в том, как значение, полученное от пользователя, будет соответствовать формату моего члена, как показано ниже. Я знаю, что ssrs делает это легко, но мы не используем SSRS. Ниже мой код

мой код

 SELECT 
  [Measures].[Result] ON COLUMNS
 ,NON EMPTY 
    {
        [CNB_DimProduct].[ProductUcode].[ProductUcode].ALLMEMBERS*
        [CNB_DimProduct].[ProductDesc].[ProductDesc].ALLMEMBERS*
        [CNB_DimTest].[TestUcode].[TestUcode].ALLMEMBERS*
        [CNB_DimTest].[TestName].[TestName].ALLMEMBERS*
        [CNB_DimSampleInfo].[LotNo].[LotNo].ALLMEMBERS*
        [CNB_DimSampleInfo].[BatchNo].[BatchNo].ALLMEMBERS*
        [CNB_DimSampleInfo].[COAReleasedBy].[COAReleasedBy].ALLMEMBERS*
        [CNB_DimSampleInfo].[COAReleasedON].[COAReleasedON].ALLMEMBERS*
        [CNB_DimSampleInfo].[SampleReferenceNo].[SampleReferenceNo].ALLMEMBERS*
        [CNB_DimSampleInfo].[AnalysedBy].[AnalysedBy].ALLMEMBERS*
        [CNB_DimSampleInfo].[AnalysedOn].[AnalysedOn].ALLMEMBERS
    } ON ROWS
FROM 
(
  SELECT 
    StrToMember
    (
            "[CNB_DimSampleInfo].[COAReleasedON].[" + Format("2013-01-02","yyyy MM")
          + "]:STRTOMember([CNB_DimSampleInfo].[COAReleasedON].["
        + 
          Format
          ("2013-01-02"
           ,"yyyy MM"
          )
      + "]"
    ) ON COLUMNS
  FROM Cube001
);

3 ответа

Ваше свидание

[CNB_DimSampleInfo].[COAReleasedON].&[2013-01-02T03:20:00]

выглядит как плохой кандидат на параметр даты пользователя, так как он точен с точностью до минуты (возможно, второй). Если пользователь точно не соответствует времени, он ничего не получит. Но, возможно, вы вводите точные совпадения, используя список выбора LimitToList в пользовательском интерфейсе.

Чтобы получить это имя члена, вы можете отформатировать входную строку следующим образом:

формат ([Ваш входной параметр],'гггг-мм-ддчч: мм: сс')

Я попытался с помощью фильтра, как показано ниже

SELECT
[Measures].[Result] ON COLUMNS
,NON EMPTY
 {
  filter([CNB_DimSampleInfo].[COAReleasedON].members,instr([CNB_DimSampleInfo].[COAReleasedON].currentmember.member_caption,"2013-01-02")>0 or instr([CNB_DimSampleInfo].[COAReleasedON].currentmember.member_caption, "2013-04-01")>0)

   *[CNB_DimProduct].[ProductUcode].[ProductUcode].ALLMEMBERS*
    [CNB_DimProduct].[ProductDesc].[ProductDesc].ALLMEMBERS*
    [CNB_DimTest].[TestUcode].[TestUcode].ALLMEMBERS*
    [CNB_DimTest].[TestName].[TestName].ALLMEMBERS
} ON ROWS

ОТ Cube002

Существует также StrToSet что лучше в ваших обстоятельствах, когда вы используете : оператор, который возвращает набор:

...
...
FROM 
(
  SELECT 
    StrToSet
    (
            "[CNB_DimSampleInfo].[COAReleasedON].[" + Format("2013-01-02","yyyy MM")
          + "]:[CNB_DimSampleInfo].[COAReleasedON].["
        + 
          Format
          ("2013-01-02"
           ,"yyyy MM"
          )
      + "]"
     ,CONSTRAINED
    ) ON COLUMNS
  FROM Cube001
);

следующее определенно возвращает дату, отформатированную так же, как ваши ключевые значения?

Format("2013-01-02","yyyy MM")

Ваши ключевые значения для дат выглядят так?...

[CNB_DimSampleInfo].[COAReleasedON].[2013 01]
Другие вопросы по тегам