SSAS如何获取有效的日期值

0
做一个查询报告,使用了日期进行筛选,数据集返回的日期也不连续。现在对日期设为默认值,如何避免设置到数据集没有日期的那一天呢,比如我想统计一个月的,一般开始日期默认设置为12月1日,但12月1日不在日期列表里,如果我用MDX函数直接算出12月1日是无效的,这时就要动态获取12月2日作为统计起始时间。但这个12月2日如何从数据集获取出来呢。
QQ截图20131213143819.png
已邀请:
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-13 回答

你就正常的写 MDX 查询就可以了,和维度,度量值关联之后是什么日期就是什么日期,不匹配的日期不会显示出来。

比如说,你的报表里会显示产品,产品分类,还有地域,然后是销售额 ,这里三个维度,一个度量值,然后根据时间筛选。

那么在你的 MDX 查询中,这几个维度和度量值都要体现出来,写在一个MDX 查询里面。也就是说在你的时间列表里,所有的时间其实已经是与所有维度和度量值匹配过后的日期,那么反过来这个日期在查询集里也一定有对应的维度和度量值。

关于时间传参数的我的例子是 - http://www.cnblogs.com/biwork/p/3447768.html
0

zhoujimin - 80后IT男 2013-12-13 回答

看了你的帖子,我的基本属于你后边提到的问题,不知道有什么方法可以解决吗,日期级联效果要怎么处理,另外我做成下拉框的形式后,想对日期设置一个默认值,但我怎么知道这个默认值有没有在下拉框中,也就是我帖子中提出来的问题
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-13 回答

  1. 尽量不适用 Date Picker 就是我博客里面提到的,因为它这样就是时间类型了,这样处理起来就要看你Cube里面的时间参数格式,还不如下拉框。
  2. 下拉框的时间如果是从 Cube 里面使用 MDX 查询出来的话,那么默认值也肯定可以包含在下拉框的选项里的,因为你下拉框里面的值和默认值都可以选择同一个数据集 - Dataset.

1.PNG

你所有的有效的下拉框的时间集是从 Avaliable Values 有效值 里面取的,那么你的默认值就可以在 Default Values 里面设置,你打开看看就明白是怎么回事了。

比如你可以在 Default Values 那里写死一个时间看看你就明白了。

  1. 我看你的最上面问题里的截图应该不涉及到级联,所以不太清楚你的级联是指什么。比如选择了某一个时间引起另外一个参数集合发生改变?
0

zhoujimin - 80后IT男 2013-12-13 回答

嗯,这里我设置了,但这个默认值是写死的,比如..&,默认值就是12月2日,如果要修改这个日期就要去报表设置。现在想做的是每天报表通过邮件发出来后,这个起止时间是动态的,比如今天早上发出来,岂止时间就应该是2013-12-02至2013-12-13.这个我尝试用=Today()来实现,但是如果今天没有产生数据,数据集是不会有12月13日这个日期的,整个报表就无法呈现出来。看看有没有什么方法可以动态获取到这个日期。
我尝试用=Last(Fields!ParameterValue.Value, "ToWorkItemMicrosoftVSTSCommonClosedDate")获取数据集中的最后一天作为结束日期,但这么做又会报错,应该是SSAS不允许这样做
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-13 回答

你的意思是不是获取当月的有数据的第一天,到今天之前最后一天有数据的日期,是这个意思吗?

比如12月份,今天是13号。但是12月1日没有数据,12月13号也没有数据,其它日期都有数据。因此在12号和13号发送邮件的时候,取的数据的日期范围都是从 12月2日到12月12日的对吗?
0

zhoujimin - 80后IT男 2013-12-13 回答

是的,就是把默认值设置为每个月有数据的第一天和最后一天,因为从图里面看没有数据的时候下拉列表里是没有这个日期的,比如12月1日是星期日,这天不生成数据,所以不会返回12月1日这个日期,我觉得这个应该是数据集返回的,要到数据集里面去查,但是好像没有提供相应的函数。
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-13 回答

可以参考我的这个例子

WITH
MEMBER .
AS
MIN( EXISTING {...MEMBERS},
IIF(
(.) = 0,
NULL,
..CurrentMember.MemberValue
)
)
MEMBER .
AS
MAX( EXISTING {...MEMBERS},
IIF(
(.) = 0,
NULL,
..CurrentMember.MemberValue
)
)
SELECT
{
.,
.,
.} ON 0,
{..MEMBERS} ON 1
FROM

你可以看到怎么求有值的第一天和最后一天,这个查询你可以参考一下。

1.PNG
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-13 回答

很简单,MDX没写过。
不过用SQL实现的话,就类似BIWork那样。
在 SSRS的这个 parameter编辑界面里, avaiable 选择 From Query.
然后写一个查询 从你这个目标表里查询出有哪些日期。
绑定到你这个 下拉里。
0

zhoujimin - 80后IT男 2013-12-13 回答

嗯,看着挺复杂的,对MDX了结不多,都是通过视图拖拽出来的,好好研究下 ,谢谢啦
0

zhoujimin - 80后IT男 2013-12-13 回答

我也考虑过在默认指这里写个查询语句,不过SSAS不让写,不知道为什么
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-16 回答

默认值是没有查询的, 你可以给它一个 数据集。
它直接从你的 数据集里得到数据。
有没有试一试?
默认是你这个查询的第一行数据。

比如我查询的是 SELECT DISTINCT YEAR(DateColumn) AS Year FROM Table1

如果数据是
1991
1992
1993
2001
2013

那么 绑定在这个文本框里的值 就是 1991, 没事多试试。

要回复问题请先登录注册