2

我是 MDX 的新手,我有一个简单的问题。我使用名为 Team System 的 TFS Cube。我的问题:

我有一个 IIF 表达式,我想在其中使用 AND 运算符检查我的表达式。在那里我想比较两个 DateTime 对象。报告应该只向我显示实际日期的数据。这是我的代码:

IIF(ISEMPTY(SUM(YTD(
    [Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember),
    [Measures].[EffectivelyValue])) 

AND[工作项].[PlannedWeek__HierarchyByWeek].CurrentMember < Now()

 , [Measures].[EffectivelyValue]
  , SUM(YTD(
   [Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember),
    [Measures].[EffectivelyValue]) )  

计划周是一个自行创建的字段,具有 DateTime 数据类型。Now() 函数也有一个 DateTime 数据类型,所以比较应该是正确的,但它什么也没发生。

感谢你在期待

欧根

4

2 回答 2

1

MDX 中的层次结构成员具有“成员”数据类型,并且没有日期时间、字符串或整数等“原始”数据类型。只有成员属性具有“原始”数据类型。您可以定义一个类似于datetime您的 week 属性的属性。假设您是 SQL Server Analysis Services,这将通过关系来完成。

或者您可以使用字符串操作从UniqueName属性中提取日期信息,从而避免更改多维数据集。UniqueName 包含您在多维数据集设计中定义为键的数据。假设您的周层次结构成员有一个键,您可以通过字符串函数从中提取 3013 年 8 月 20 日的 20130820 之类的内容(我将Mid(, 30, 8)在下面用作示例),您可以执行类似的操作

CLng(Mid([Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName, 30, 8))
<
CLng(Format(Now(), "yyyymmdd"))

CurrentMember.UniqueName你必须检查你的立方体中到底显示了什么来调整上面的代码。

最后,您当然也可以使用字符串方法从 UniqueName 中提取相关部分,然后使用该CDate函数与未更改的 进行比较Now(),即在 . 左侧执行所有操作<

于 2013-08-20T08:18:14.423 回答
1

您好非常感谢您的回答。我试过了:

Mid([Work Item].[xxxx_PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName,58,10)

显示例如 2013-07-21、2013-07-28(它显示一周结束)

所以我尝试了这个:

AND  CLng(Mid([Work Item].[xxxx_PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName,58,10))
<CLng(Format(Now(), "yyyy-mm-dd"))

但它什么也没发生。如果我以单一方式执行它,它会到处显示“真”。但是我有日期为例如> 2013-08-23 的数据集。所以也应该有错误的值。

编辑:好的,我解决了这个问题。这

Format(Now(), "yyyy-mm-dd") 

一定是

Format(Now(), "yyyy-MM-dd")
于 2013-08-22T09:45:35.630 回答