在我的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%确定有数据应该与指定的日期范围匹配。
答案 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中使用日期数据类型,因为它的内部表示是模糊/不确定的。