我有一个非常大的Tableau工作簿,需要很长时间才能加载。我已经确定,这是由于一些非常大的计算字段,我想替换以提高加载时间。
我的计划是在数据库级别复制这个计算字段,但是,我不确定最好的方法是什么,希望有人能帮助我。
计算的字段本质上是一个大的映射表,它将一个区域(比如区域2)分配到一个更高级别的名为区域1的区域。这是几行代码,不幸的是,由于工作原因,我无法分享。
。
IF [area_2] = "abc" THEN [area_2]
ELIF [area_2"] = "def" THEN "xyz"
ELIF [area_2"] = "ghi" THEN "mno"
....
....
END
我最初的想法是在数据库表上创建一个视图,这些属性来自IF语句。然而,我已经明白了不能用PL/SQL If语句创建视图。我试着开始学习PL/SQL元素(即过程,包,函数),但发现很难确定我应该选择什么是正确的选项。
任何指导将非常感激。由于
我认为你有三种方法来解决你的问题
如果一个记录在计算后总是有相同的值
-
你可以存储计算值:添加到你的表列来存储计算结果,并在你的表中创建一个
TRIGGER
,在每次插入后计算值。 -
创建一个物化视图:如果你的表没有高频率的插入,你可以创建一个
MATERIALIZED VIEW
,存储每次插入后的视图结果。
物化视图文档:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm
如果记录在计算后可以改变值
- 使用
CASE WHEN
或DECODE
创建视图,如果计算像您的示例一样简单,如果它们不是,使用FUNCTION
返回值传递您的值和参数来计算值。