【问题标题】:Variance column in QlikViewQlikView 中的差异列
【发布时间】:2015-06-30 15:15:32
【问题描述】:

我需要在 qlikview 中创建一个“差异”列:

             2013         2014       Variance
Measure 1    100          110        10%
Measure 2    105          100        -4.8%
...

这是否可以在 Qlikview 中仅使用一个“计算维度”列来完成,该列显示如下内容:

[Value for Column2]/[Value for Column 1] - 1

所以它适用于我在表格中添加的任何新度量,而不管第 1 列和第 2 列是什么?

编辑: 样本数据:

 Year     Measure1    Measure2
 2012     9750        197
 2013     10000       200
 2014     11000       210
 2015     11500       215

我需要将输出的结构如下所示,其中方差列作为 2 个选定年份维度值之间的计算。

【问题讨论】:

    标签: qlikview


    【解决方案1】:

    您可以使用 Column() 函数来执行此操作。

    Column(2) / Column(1)
    

    数字指的是表达式列——第一个表达式是#1,等等。不计算维度列。

    一种对列位置不敏感的替代方法,您可以在表达式中使用列标签。假设带有“Sales”和“Margin”标签的表达式。方差表达式可以写成:

    [Margin] / [Sales]
    

    【讨论】:

    • 除非我误解了你的建议.. 这对我来说真的不起作用.. 如果我有 2 个表达式作为列并且我想要在它们之间进行计算,那么你的建议会起作用。因此,由于在其他 2 个表达式之间进行计算,您正在添加一个新的“表达式”。我想要做的是添加一个新的维度值,它是表中所有表达式的其他二维值(无论维度值可能是什么)之间的计算。
    • 您使用什么机制来更改尺寸?这将决定您如何做到这一点,但无论您使用什么方法更改维度,我都认为将方差作为维度没有任何好处。告诉我们怎么做,我会告诉你怎么做
    【解决方案2】:

    我 99% 确定没有内置函数可以做到这一点。

    我尝试了一些我认为可能有用的选项,但只有这证明了它的任何用途。

    我已将 2 个计算维度定义为变量 Year1 和 Year2,我通过输入框对其进行更改。然后简单计算的维度=[$(Year2)]-[$(Year1)] 给了我一个新的方差维度。

    这假设 Measure 是来自数据的东西,就像这样,现在您只想在不同的年份显示它。如果度量都是表达式,我还没考虑怎么办。

    【讨论】:

    • 嗯.. 那么=[$(Year2)]-[$(Year1)] 是一个新的计算维度吗?在您的示例中,2013 年和 2014 年等是单独的维度吗?在我的数据中,年份是单一维度的值。所以我需要的是一个新的计算维度 value,它对其他 2 个值(在本例中为 2013 和 2014)进行操作。
    • 是的,这是一个新维度,在我的示例中,每年都是它自己的维度。你能给我们一些示例数据和预期的工作成果吗?因为在我看来,您正在非常努力地在维度上复制 QlikView 在表达式中自然所做的事情。但显然我不知道您的具体要求是什么。
    • 我添加了示例数据作为对我的问题的编辑。感谢您的帮助!
    • 这很容易在带有 vmaxyear 和 vminyear 概念的表达式中实现。然后 Rob 的 column(1)/column(2) 概念将起作用。我会为此添加一个答案。我仍然不清楚为什么需要使用维度?
    【解决方案3】:

    这是使用变量和表达式的方法。这将创建 2 个新列,它们看起来像一个新维度,但实际上是通过使用 if() 语句来定义的。

    在脚本的第一步,我们需要创建一个包含度量的维度。这不应与数据中已有的任何列相关联。 (UDR 代表用户定义的报告)。对偶只允许我们定义一个非字母的排序顺序。

    UDR:
    load dual(UDR,Sort) as Rows inline [
    UDR, Sort
    Measure1, 1
    Measure2, 2];
    

    结果应该是这样的。

    下一步是为年份创建 2 个变量。

    我在脚本中执行此操作,但您可以使用任何变量创建方法。

    set vMaxYear="=max(Year)";
    set vMinYear="=min(Year)";
    

    现在我们使用字段 Rows 作为维度。

    我们需要为最大选定年份创建一个表达式。请注意,第一个if() 正在测试表达式所在的UDR 的哪些行,然后提供该行的表达式定义。第二个if() 正在针对变量 vMaxYear 测试年份维度,该变量会随着选择的进行而改变。最小年份相同,只需将 vMaxYear 替换为 vM​​inYear。

    if(Rows='Measure1',sum(if(Year=vMaxYear,Measure1)),
    if(Rows='Measure2',sum(if(Year=vMaxYear,Measure2))))
    

    最后我们使用 column() 函数计算第三个表达式中的方差。

    column(1)/column(2)
    

    为了使表达式标签动态化,我只需将=vMinYear 添加到标签中。

    结果就是这张表,它将响应我在年份列表框中的选择。

    2013 年与 2014 年

    2014 年对比 2015 年

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 2022-10-14
      • 2017-10-30
      相关资源
      最近更新 更多