如何在 obiee 中显示一个月中所有日期的一个值?
Posted
技术标签:
【中文标题】如何在 obiee 中显示一个月中所有日期的一个值?【英文标题】:How to show one value for all days of month in obiee? 【发布时间】:2018-09-27 10:40:52 【问题描述】:这可能看起来很奇怪,但我需要在一个月的所有日子里显示一个值。
在数据库中,只有月份第一天的记录。当我在带有日期提示的 BI 中创建分析时,显然除了一个月的第一天之外,我每天都会得到空值。我如何才能整天解决这个问题(01.01.2018、01.02.2018 等)?当然,当月份更改时,列应该显示下个月第一天的值。 有没有办法做到这一点?
【问题讨论】:
【参考方案1】:将聚合规则设置为 FIRST 用于 Time 维度、级别 Month 的度量,并将所有其他聚合规则设置为 SUM。
【讨论】:
我将事实表的日期列设置为FIRST,然后将表源级别设置为MONTH。我的日历维度表的级别设置为 DAY,因此在上传 rpd 度量后,它在一致性检查中显示警告变为空。所有其他度量都设置为 SUM。我做错了什么?【参考方案2】:这样的查询有什么好处吗?
the_whole_month
CTE 创建每个月的所有日期;表函数调用是为了避免重复
SQL> with test (first_day, value) as
2 (select date '2018-01-01', 100 from dual union all
3 select date '2018-02-01', 200 from dual union all
4 select date '2018-03-01', 300 from dual
5 ),
6 the_whole_month as
7 (select (first_day + column_value - 1) datum, value
8 from test,
9 table(cast(multiset(select level from dual
10 connect by level <= last_day(first_day) - first_day + 1
11 ) as sys.odcinumberlist))
12 )
13 select * from the_whole_month
14 order by datum;
DATUM VALUE
-------- ----------
01.01.18 100 -- January begins here
02.01.18 100
<snip>
29.01.18 100
30.01.18 100
31.01.18 100
01.02.18 200 -- February begins here
02.02.18 200
<snip>
27.02.18 200
28.02.18 200
01.03.18 300 -- March begins here
02.03.18 300
<snip>
29.03.18 300
30.03.18 300
31.03.18 300
90 rows selected.
SQL>
关于重复项(你会得到没有表功能):查询看起来像这样;我把这几个月缩短到每个只有 3 天。您预计 3 monts x 3 天 = 9 行,但您将获得 39 行。如果您有足够的耐心运行它整个月,并且在您拥有的所有月份中,您可能会得到......我不知道,数百万行。不要那样做。
SQL> with test (first_day, value) as
2 (select date '2018-01-01', 100 from dual union all
3 select date '2018-02-01', 200 from dual union all
4 select date '2018-03-01', 300 from dual
5 ),
6 the_whole_month as
7 (select (first_day + level - 1) datum, value
8 from test
9 connect by level <= 3 --> Presuming there are only 3 days in every month.
10 --> You'd expect 3 x 3 = 9 rows, but you'll get 39.
11 )
12 select * from the_whole_month
13 order by datum;
DATUM VALUE
-------- ----------
01.01.18 100
02.01.18 100
02.01.18 100
02.01.18 100
03.01.18 100
03.01.18 100
03.01.18 100
<snip>
03.03.18 300
03.03.18 300
39 rows selected.
SQL>
【讨论】:
谢谢,这就是我要找的。所以你的建议是使用相应的值将你的查询结果插入到我的表中,对吧?这似乎是一个好方法,但是在不更改表格内容的情况下有什么选择吗?也许在 BI 或 rpd 中? 不客气。我的 CTE 在这里只是为了“模拟”您的表格,该表格已经包含有关第一天的数据。我没有,所以我捏造了一个。您需要从第 6 行开始的代码,将 TEST 替换为实际的表名。但是,可能需要进行额外的调整,但是是的 - 这是一般的想法。附言我不使用 BI 也不使用“rpd”(不管它是什么),所以我无法对此发表评论。 你的问题一开始就很模糊——尤其是在 OBIEE 的背景下。你想达到什么目的?你能解释一下吗? @Chris,我的意思是有两个度量 F1 和 F2,F1 仅具有当月第一天的值,F2 具有每天的值。我想要的是,在分析中,我使用这两种度量来显示所选日期和当天月份的 F1 和 F2 (来自 F1 并且仅具有第一天的值)。因为当我们选择像 02.09.2018 这样的日期时,F1 没有其他日期的值,所以它有空值,而 F2 有自己的值。我希望 F1 在 2018 年 9 月 1 日显示价值,即使在 9 月的其他日子也是如此。 @Littlefoot,谢谢,我明白了。真的很有帮助以上是关于如何在 obiee 中显示一个月中所有日期的一个值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月