Google sheets 展开/分解带有票证打开和关闭统计信息的Google Sheets表,以显示每个月打开的所有票证
我的工作示例/谷歌工作表示例: 我有一个关于门票信息的源表。就这个问题而言,只有三个栏是重要的:Google sheets 展开/分解带有票证打开和关闭统计信息的Google Sheets表,以显示每个月打开的所有票证,google-sheets,google-sheets-formula,transpose,array-formulas,google-sheets-query,Google Sheets,Google Sheets Formula,Transpose,Array Formulas,Google Sheets Query,我的工作示例/谷歌工作表示例: 我有一个关于门票信息的源表。就这个问题而言,只有三个栏是重要的: 票号 门票开放日期 票据关闭日期——如果已关闭 根据这些信息,我需要生成具体月份的指标/报告: 那个月开的票 那个月关闭的票 已打开的票证(之前已打开但未关闭) 而且,我需要的是原始数据,而不仅仅是月度总结。也就是说,我应该能够选择一个月并显示符合上述三个标准的所有票证ID 使用此函数(我的示例表中的E-G列)可以很容易地获取前两个: 我被卡在第三个了。我正试图弄清楚如何在每个月都有一张票开着的
- 票号
- 门票开放日期
- 票据关闭日期——如果已关闭
- 第一列是月份
- 第二栏是“开放”
- 第三列是票证ID
- ID0010
- 2018-11年开业
- 于2019-01年关闭
- 在以下位置打开:
- 2018-12
- ID0019
- 于2018-08年开业
- 2019-03年关闭
- 在以下位置打开:
- 2018-09
- 2018-10
- 2018-11
- 2018-12
- 2019-01
- 2019-02
| Month | Status | Ticket ID |
|---------|--------|-----------|
| 2018-11 | Opened | ID0010 |
| 2018-12 | Open | ID0010 |
| 2019-01 | Closed | ID0010 |
| 2018-08 | Opened | ID0019 |
| 2018-09 | Open | ID0019 |
| 2018-10 | Open | ID0019 |
| 2018-11 | Open | ID0019 |
| 2018-12 | Open | ID0019 |
| 2019-01 | Open | ID0019 |
| 2019-02 | Open | ID0019 |
| 2019-03 | Closed | ID0019 |
注意:票据打开和关闭的月份也不会显示票据的“打开”。换句话说,一张票只能在以下月份“打开”:
- 之后,不包括打开
- 之前,不包括已关闭
CONCATENATE
组合列/行,不如使用QUERY
和999^99
作为标题计数(第三个参数),因为QUERY
将组合所有行(使用空格分隔符)
最后的公式是:
=ARRAYFORMULA(
QUERY(
SPLIT(
TRANSPOSE(
SPLIT(
QUERY(
TRANSPOSE(
TRIM(
QUERY(
IF(
A2:A <> "",
A2:A & "," & EDATE(
IFERROR(
SPLIT(
REPT(
EOMONTH(B2:B, -1) + 1 & ",",
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
)
),
","
),
0
),
TRANSPOSE(
ROW(
INDIRECT(
"A1:A" & MAX(
IF(
B2:B <> "",
IFERROR(
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
),
0
),
)
)
)
)
)
) & ";",
),
,
999^99
)
)
),
,
999^99
) & " ",
"; "
)
),
","
),
"SELECT Col2, 'Open', Col1 WHERE Col2 > 4000 LABEL 'Open' '' FORMAT Col2 'YYYY-MM'",
0
)
)
=数组公式(
质疑(
分裂(
转置(
分裂(
质疑(
转置(
修剪(
质疑(
如果(
A2:A“任何人”,
A2:A&“,”和EDATE(
伊弗罗(
分裂(
报告(
EOMONTH(B2:B,-1)+1&“,”,
达特迪夫(
月(B2:B,0)+1,
月(
如果(
C2:C“,
C2:C,
EDATE(今天(),1)
),
0
),
“M”
)
),
","
),
0
),
转置(
划船(
间接的(
“A1:A”和最大值(
如果(
B2:B“,
伊弗罗(
达特迪夫(
月(B2:B,0)+1,
月(
如果(
C2:C“,
C2:C,
EDATE(今天(),1)
),
0
=ARRAYFORMULA(
QUERY(
SPLIT(
TRANSPOSE(
SPLIT(
QUERY(
TRANSPOSE(
TRIM(
QUERY(
IF(
A2:A <> "",
A2:A & "," & EDATE(
IFERROR(
SPLIT(
REPT(
EOMONTH(B2:B, -1) + 1 & ",",
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
)
),
","
),
0
),
TRANSPOSE(
ROW(
INDIRECT(
"A1:A" & MAX(
IF(
B2:B <> "",
IFERROR(
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
),
0
),
)
)
)
)
)
) & ";",
),
,
999^99
)
)
),
,
999^99
) & " ",
"; "
)
),
","
),
"SELECT Col2, 'Open', Col1 WHERE Col2 > 4000 LABEL 'Open' '' FORMAT Col2 'YYYY-MM'",
0
)
)
=ARRAYFORMULA(
QUERY(
SPLIT(
TRANSPOSE(
SPLIT(
QUERY(
TRANSPOSE(
TRIM(
QUERY(
IF(
A2:A <> "",
A2:A & "," & EDATE(
IFERROR(
SPLIT(
REPT(
EOMONTH(B2:B, -1) + 1 & ",",
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
)
),
","
),
0
),
SEQUENCE(
1,
MAX(
IF(
B2:B <> "",
IFERROR(
DATEDIF(
EOMONTH(B2:B, 0) + 1,
EOMONTH(
IF(
C2:C <> "",
C2:C,
EDATE(TODAY(), 1)
),
0
),
"M"
),
0
),
)
)
)
) & ";",
),
,
999^99
)
)
),
,
999^99
) & " ",
"; "
)
),
","
),
"SELECT Col2, 'Open', Col1 WHERE Col2 > 4000 LABEL 'Open' '' FORMAT Col2 'YYYY-MM'",
0
)
)
=ARRAYFORMULA(UNIQUE(QUERY(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
"♦"&FILTER(A2:A, B2:B<>"", C2:C<>"")&"♠"&SPLIT(REPT(FILTER(B2:B, B2:B<>"", C2:C<>"")+1&"♣",
NETWORKDAYS(FILTER(B2:B, B2:B<>"", C2:C<>"")+1, FILTER(C2:C, B2:B<>"", C2:C<>""))), "♣")+
TRANSPOSE(ROW(INDIRECT("A1:A"&MAX(
NETWORKDAYS(FILTER(B2:B, B2:B<>"", C2:C<>"")+1, FILTER(C2:C, B2:B<>"", C2:C<>"")))))-1)&"♠")
,,999^99)),,999^99), "♦")), "♠"),
"select Col2,'Open',Col1 where Col2>4000 label 'Open''' format Col2 'YYYY-MM'", 0)))
=ARRAYFORMULA(UNIQUE(QUERY(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE("♦"&
FILTER(A2:A, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C))&"♠"&EOMONTH(SPLIT(REPT(
FILTER(B2:B, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C))+1&"♣", DATEDIF(
FILTER(B2:B, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C))+1,
FILTER(C2:C, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C)), "M")-1), "♣"),
TRANSPOSE(ROW(INDIRECT("A1:A"&MAX(NETWORKDAYS(
FILTER(B2:B, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C))+1,
FILTER(C2:C, B2:B<>"", C2:C<>"", MONTH(B2:B)<>MONTH(C2:C), YEAR(B2:B)<>YEAR(C2:C))))))))&"♠")
,,999^99)),,999^99), "♦")), "♠"),
"select Col2,'Open',Col1 where Col2>4000 label 'Open''' format Col2 'YYYY-MM'", 0)))
=ARRAYFORMULA(QUERY(VLOOKUP(SEQUENCE(COUNTA(Sheet1!A2:A)*A1,1,0)/A1+2,{ROW(Sheet1!A2:A),Sheet1!A2:A,IF(EDATE(EOMONTH(Sheet1!B2:B,-1)+1,SEQUENCE(1,A1,0))>EOMONTH(IFERROR(1/(1/Sheet1!C2:C),TODAY()),-1)+1,,EDATE(EOMONTH(Sheet1!B2:B,-1)+1,SEQUENCE(1,A1,0)))},MOD(SEQUENCE(COUNTA(Sheet1!A2:A)*A1,1,0),A1)*{0,1}+{2,3}),"where Col2 is not null label Col1'Ticket',Col2'Month'"))