Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSAS日期在Excel筛选器中不起作用_Excel_Date_Sql Server 2008 R2_Ssas - Fatal编程技术网

SSAS日期在Excel筛选器中不起作用

SSAS日期在Excel筛选器中不起作用,excel,date,sql-server-2008-r2,ssas,Excel,Date,Sql Server 2008 R2,Ssas,在我的SSAS多维数据集中,我有一个包含6个日期字段的维度。它们都以相同的方式定义,其中键字段是日期类型,名称字段是yyyy-mm-dd格式的char10 当我在Excel数据透视表中包含这些字段时,除了一个字段外,其他字段都可以正常工作。该字段显示正确,但在过滤时行为不正确。特别是,指定一个between过滤器总是返回零行。与大于过滤器相同。从工作开始 同样,这只发生在六个日期字段中的一个。但据我所知,所有六个日期字段的配置都是相同的。什么样的错误会导致这种情况 编辑 使用SQLServerP

在我的SSAS多维数据集中,我有一个包含6个日期字段的维度。它们都以相同的方式定义,其中键字段是日期类型,名称字段是yyyy-mm-dd格式的char10

当我在Excel数据透视表中包含这些字段时,除了一个字段外,其他字段都可以正常工作。该字段显示正确,但在过滤时行为不正确。特别是,指定一个between过滤器总是返回零行。与大于过滤器相同。从工作开始

同样,这只发生在六个日期字段中的一个。但据我所知,所有六个日期字段的配置都是相同的。什么样的错误会导致这种情况

编辑

使用SQLServerProfiler,我可以看到从Excel生成的MDX在工作日期和不工作日期上是相同的,当然除了字段名发生了变化。如果我将数据透视表限制为一个日期,并添加一个中间过滤器,那么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%确定有数据应该与指定的日期范围匹配。

我在使用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";

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


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

你只是在你的过滤器中使用年数吗?当您输入月/日(如1985-03或2010-05-01)时,其行为是否有所不同?在比较之前将1985转换为int可能也是如此。我尝试过用各种格式定义Excel过滤器,包括您建议的格式。我也尝试过0到999999之间的事情。所有这些都有相同的效果:返回零行。我在SSAS多维数据集中尝试了各种格式。在Excel透视表中,不能调整显示格式。AFAIK的标准方法是定义一个维度属性,其KeyColumn为日期,NameColumn为格式化字符串。这适用于我在一维中的6个字段中的5个。所以我不认为问题在于Excel没有意识到数据是一个日期。事实上,我认为如果Excel只是将其视为文本字符串,这是非常好的。Excel可能会混淆日期,这并不能解释为什么它适用于5个字段,但不适用于第6个字段。谢谢。将KeyColumn设置为int值而不是先前的日期类型,将NameColumn设置为格式化字符串现在适用于所有属性。不知道为什么,但正如您所说,SSAS内部数据表示可能是模糊的/不确定的。