如何根据Qlik Sense Visualization表达式中的日期获取开始值和结束值?

时间:2017-06-15 23:58:11

标签: qliksense

我是Qlik的新手,似乎无法解决我在工作中面临的挑战。任何想法????????? ????????????????????????????????????

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

GIVEN
给出下面两张表。其中有更多数据,我只是显示主键= 2的数据。

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

表B:
PrimaryKeyB | ValueB | DateB
2 | 9.87 | 2/28/2017
2 | 9.86 | 3/31/2017
2 | 9.85 | 4/31/2017
2 | 9.84 | 2017年5月31日


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


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

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

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


实施例

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

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。用户选择日期过滤器:3/1/2017到6/2/2017

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。用户选择日期过滤器:2017年2月2日至2月28日

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

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


IDEAS
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
&#13;
&#13;
&#13; 3.我正在考虑从包含可能日期的子例程中动态创建一个新的TableC,基于MIN(DateA和DateB)并且在某种程度上有ValueBs,可能是所有可能的排列,但我迷失了。

4。我认为无论如何都无法找出用户在过滤器中选择了什么,但我知道什么。

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

我已经尝试/研究的事情

由于我是Qlik的新手,我甚至不知道从哪里开始。
这是我试图无效的:

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

1 个答案:

答案 0 :(得分:1)

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

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