[英]How can I create a calculated measure based on a filtered dimension?
我是MDX的新手(目前正在訂購一本書),並且在創建計算量度時會遇到一些困難,該量度應基於設定的日期范圍(從我的時間維度),該屬性應由另一個維度的屬性過濾。 不幸的是,我似乎陷入了某種困境,看不到明確的出路。 我瀏覽了其他類似的問題,但沒有發現嘗試做同一件事的任何嘗試,只是單維度測量。
我有一個度量值組,其中包含物理度量SourceMeasure
。
我有一個名為[Time]
的Time維度,我想使用它指定我的計算范圍。 這與我的“日期密鑰”與上述度量標准組有關。
我有一個名為[Dim Account]
的Account維度,其中包含兩個日期屬性: [Account Start Date]
和[Account End Date]
。 這通過帳戶ID與上述度量值組相關。
我想做的是,根據[Account Start Date]
和[Account End Date]
將[Time]
維度過濾到一個范圍,然后為該帳戶指定的時間段返回[SourceMeasure]
的總和。
顯然,這對每個帳戶來說都是不同的,因此,除[Dim Account]
維(除非返回未使用的值,可能返回0或null)外,不應該進行匯總。
以下示例測試表達式,由於FORMAT_STRING語法錯誤(根據MDX Studio),當前無法使用。
WITH
MEMBER [Measures].[LifetimeMeasure] AS
Sum
(
{
StrToMember
(
"[Time].[Date].&["
+ Format([Dim Account].[Account Start Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
+ "]"
)
:
StrToMember
(
"[Time].[Date].&["
+ Format([Dim Account].[Account End Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
+ "]"
)
}
,[Measures].[SourceMeasure]
)
SELECT
{
[Measures].[LifetimeMeasure]
,[Measures].[SourceMeasure]
}
ON COLUMNS
,{
[Dim Account].[Account].[AccountName]
}
ON ROWS
FROM
[MyCube]
我嘗試了幾種不同的方法(SCOPE,過濾器,IIF),但是每次我似乎回到相同的症結時,如何根據[Dim Account]開始和結束的值過濾[Time]維度日期。
現在,可能是我完全誤解了維度之間的關系如何工作和/或SSAS如何計算計算的度量,但是我還沒有確定要尋找的水平,所以我我轉了一圈。
我正在嘗試做的事情是否可能,如果可能,是否有任何指向哪里的指針可以幫助我弄清楚我要去哪里錯了? 我是否應該改為使用“計算維數”?
我希望這一切都是有道理的,如果我錯過了任何事情或需要更多詳細信息,請告訴我。 我正在使用MDX Studio進行測試。
我通過向StrToMember函數添加CONSTRAINED標志來發現錯誤。
似乎我的[時間]維度的日期條目默認為時間“ 00:00:00”,而我的[假賬戶]維度的日期條目默認為“ 12:00:00”。 看來24小時制和12小時制之間不匹配。 由於該維度不是自然時間維度,因此[Dim Account]維度上的我的日期字段被標記為“常規”,而不是“日期”。 我認為這可能是導致不匹配的原因。
要暫時解決此問題,我從“格式”表達式中刪除了“時間”格式,並在搜索根本原因時將“ 00:00:00”附加到了字符串上。 解決后,我會更新。
更新:不匹配的原因不在維度上,而是在我在StrToMember
表達式中使用的格式字符串中。 它沒有在MSDN上記錄,但是以下字符串輸出12小時時間格式:
"yyyy-mm-ddThh:mm:ss"
雖然此字符串輸出24小時時間格式:
"yyyy-mm-ddTHH:mm:ss"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.