【问题标题】:How to get start and end values based on date(s) in a Qlik Sense Visualization expression?如何根据 Qlik Sense Visualization 表达式中的日期获取开始和结束值?
【发布时间】:2017-06-15 23:58:11
【问题描述】:

我是 Qlik 的新手,我似乎无法解决我在工作中遇到的这个挑战。有什么想法吗?????????!???!?!?!?!?!

在可视化(在标准中心)中,我需要根据两个表中的数据和用户从过滤器窗格中的 DateAs 列表中选择的日期执行计算。

给定
给定以下两个表格。其中有更多数据,我只是显示主键 = 2 的数据。

表 A:
PrimaryKeyA |值A |日期A
2 | 300.00 | 2017 年 2 月 1 日
2 | 100.00 | 2017 年 2 月 28 日
2 | 123.45 | 2017 年 3 月 1 日
2 | 0.02 | 2017 年 3 月 15 日
2 | 0.03 | 2017 年 3 月 31 日
2 | 0.01 | 2017 年 5 月 1 日
2 | 67.89 | 2017 年 6 月 2 日

表 B:
PrimaryKeyB |价值B |日期B
2 | 9.87 | 2017 年 2 月 28 日
2 | 9.86 | 2017 年 3 月 31 日
2 | 9.85 | 2017 年 4 月 31 日
2 | 9.84 | 2017 年 5 月 31 日


基于过滤日期的计算
结果 = FirstValue + Sum(ValueA) - SecondValue


计算规则,其中 PrimaryKeyA = PrimaryKeyB
1.如果在“日期”过滤器中只选择了一个日期,则 SecondValue 为 DateB 为 on 的 ValueB 或最接近过滤日期之前的日期。
2.如果在 Date 过滤器中选择了多个日期,则 SecondValue 是 DateB 为 on 的 ValueB 或最接近最新过滤日期的日期。

3。如果在日期过滤器中仅选择了一个日期,则 FirstValue 为 ValueB,其 DateB 与 SecondValue 的 DateB 最接近。
4.如果在 Date 过滤器中选择了多个日期,则 FirstValue 是 ValueB,其 DateB 是最早过滤日期之前最接近的。

5。未找到匹配项时,将值(FirstValue 或 SecondValue)设置为零。


示例

1。用户选择日期过滤器:2017 年 6 月 2 日

SecondValue 是 9.84(匹配规则 1 的 5/31/2017)
FirstValue 是 9.85(匹配规则 3 的 4/31/2017)

结果 = 9.85 + 67.89 - 9.84 = 67.9

2。用户选择日期过滤器:5/1/2017

SecondValue 是 9.85(匹配规则 1 的 4/31/2017)
FirstValue 是 9.86(匹配规则 3 的 3/31/2017)

结果 = 9.86 + 0.01 - 9.85 = 0.02

3。用户选择日期过滤器:3/1/2017

SecondValue 为 9.87(与规则 1 匹配 2/28/2017)
FirstValue 为 0(与规则 5 不匹配)

结果 = 0 + 123.45 - 9.87 = 113.58

4。用户选择的日期过滤器为:2017 年 3 月 1 日至 2017 年 3 月 31 日

SecondValue 是 9.86(匹配规则 2 的 3/31/2017)
FirstValue 是 9.87(匹配规则 4 的 2/28/2017)

结果 = 9.87 + (123.45 + 0.02 + 0.03 ) - 9.86 = 123.51

5。用户选择的日期过滤器为:2017 年 3 月 1 日至 2017 年 6 月 2 日

SecondValue 是 9.84(匹配规则 2 的 5/31/2017)
FirstValue 是 9.87(匹配规则 4 的 2/28/2017)

结果 = 9.87 + (123.45 + 0.02 + 0.03 + 0.01 + 67.89) - 9.84 = 191.43

6。用户选择的日期过滤器为:2/1/2017 到 2/28/2017

SecondValue 为 9.87(与规则 2 匹配 2/28/2017)
FirstValue 为 0(与规则 5 不匹配)

结果 = 0 + (300.00 + 100.00) - 9.87 = 390.13


想法
1.我认为 Qlik Sense 没有用户定义的函数,所以这个想法已经过时了。

2。我在想一个可以执行以下伪代码的表达式,但我不知道如何实现。

   Set MaxDateFilter = MAX(Filtered dates)
   Set MinDateFilter = MIN(Filtered dates)
   If MaxDateFilter = MinDateFilter
   Then   (One date selected)
          Set SecondValue = Lookup first match in TableB where DateB =< MaxDateFilter (If no match found, set to 0)
          Set FirstValue = Lookup first match in TableB where DateB < SecondValue's DateB (If no match found, set to 0)
   Else   (Date range selected)
          Set SecondValue = Lookup first match in TableB where DateB =< MaxDateFilter (If no match found, set to 0)
          Set FirstValue = Lookup first match in TableB where DateB < MinDateFilter(If no match found, set to 0)
   Result is FirstValue + SUM(ValueA) - SecondValue
3. 我正在考虑从一个包含可能日期的子例程动态创建一个新的 TableC,它基于 MIN(DateA 和 DateB),并且以某种方式在其中包含 ValueB,也许是所有可能的排列,但我迷路了。

4。我在想无论如何不可能找出用户在过滤器中选择的内容,但我知道什么。

5。我看了这个(https://community.qlik.com/thread/16998),但我认为它只是 QlikView,而不是 Qlik Sense。

我尝试过/研究过的事情

由于我是 Qlik 的新手,我什至不知道从哪里开始。
这是我尝试过但无济于事的:

更新:我做了更多的工作。给定我的表,当用户在 [交易日期] 上进行过滤时,我如何查找要在数据透视表的表达式中使用的值?请在http://clairenstreb.brinkster.net/temp/InventoryValues.png查看我的最新数据和图表

【问题讨论】:

    标签: qliksense


    【解决方案1】:

    答案是使用firstsortedvalue chart function。例如:

    firstsortedvalue ([Beginning Inventory Amount], -[Beginning Inventory Date])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多