SSAS日期不适用于Excel过滤器

时间:2014-06-23 08:45:00

标签: excel date sql-server-2008-r2 ssas

在我的SSAS多维数据集中,我有一个包含6个日期字段的维度。它们都以相同的方式定义,Key字段是日期类型,Name字段是char(10),格式为yyyy-mm-dd。

当我在Excel数据透视表中包含这些字段时,它们都可以正常工作,除了一个。一个字段显示正确,但在过滤时行为不正确。特别是,指定between过滤器始终返回零行。与greater than过滤器相同。 Begins with工作正常。

再次,这只发生在六个日期字段之一。但据我所知,所有六个日期字段的配置完全相同。什么类型的错误可能导致这种情况?

修改

使用SQLServer Profiler我可以看到从Excel生成的MDX对于有效的日期和没有生成的日期是相同的(当然,字段名称更改除外)。如果我将数据透视表限制为单个日期并添加between过滤器,则MDX为:

SELECT NON EMPTY Hierarchize({DrilldownLevel({[Participation Program].[Participation Start Date].[All]},,,INCLUDE_CALC_MEMBERS)}) 
    DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME ON COLUMNS  
FROM (SELECT Filter([Participation Program].[Participation Start Date].[Participation Start Date].AllMembers, 
                   ([Participation Program].[Participation Start Date].CurrentMember.member_caption>="1985" 
                    AND [Participation Program].[Participation Start Date].CurrentMember.member_caption<="1990")) ON COLUMNS  
        FROM [Compass3]) 
WHERE ([Child].[Child is Handicapped].&[T],[Measures].[Child Count]) CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS

返回[Participation Start Date]的正确结果,但如果我对[Participation Stop Date]执行相同操作,则返回0结果。所以这是SSAS方面而不是Excel方面的问题。但我仍然可以看到在多维数据集中配置两个日期的方式没有区别,我100%确定有数据应该与指定的日期范围匹配。

2 个答案:

答案 0 :(得分:1)

我遇到过使用epplus的类似问题。如果您没有明确定义日期,Excel可能没有意识到数据是日期。这会导致排序和过滤问题。 (请注意,下面的代码是C#,但关于excel公式/格式的背后的想法应该是相同的。)

生成excel单元格时,请在单元格中明确定义日期公式:

ws.Cells[rowCount, columnCount].Formula = "=DATE(" + myDate.ToString("yyyy,M,d") + ")";

然后,设置单元格格式以按照您希望的方式显示日期:

ws.Cells[rowCounter, columnCount].Style.Numberformat.Format = "d-mmm-yyyy";

答案 1 :(得分:1)

我会将这些属性的Key更改为YYYYMMDD格式的日期的数字表示。我会通过SQL视图实现这一点,我将使用CONVERT函数。

我不会在SSAS中使用日期数据类型,因为它的内部表示是模糊/不确定的。