2016-04-29 66 views
0

任何人都可以告訴我如何在MDX查詢中格式化日期嗎?我們不使用SSRS生成報告,我們有我們自己定製的報告工具,它建立在SSAS.Date篩選器上,以yyyy/mm/dd格式發送日期。截至目前,我們沒有日期維度。我的日期成員看起來像:MDX日期格式化

[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 
); 

回答

0

還有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] 
0

您的日期成員

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

看起來像一個壞的候選用戶日期參數,因爲它是精確到分鐘(也許是第二個)。除非用戶完全匹配時間,否則他們什麼也得不到。但是也許你正在通過在UI中使用LimitToList選擇列表來強制執行完全匹配。

爲了得到這個成員的名字,你可以格式化輸入字符串是這樣的:

的格式([你輸入參數], 'YYYY-MM-DDTHH:MM:SS')

0

我曾嘗試出使用濾波器如下

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 

FROM Cube002