CALCULATE、SUM、MAX 和 <= 如何在逻辑上对累计总数起作用?

问题描述

Cumulative Total =
CALculaTE (
    SUM ( Table[Value] ),FILTER (
        ALL ( Table[Index] ),Table[Index]
            <= MAX ( Table[Index] )
    )
)

我正在尝试了解上述公式的逻辑运作方式。

首先计算第二个参数。第二个参数返回一个包含单列的过滤表。

在 FILTER 中,第一个参数从索引列中删除任何过滤器。过滤器的第二个参数检查索引应该小于或等于来自外部表的最大值。

但是 CALculaTEs SUM 是如何累积的? FILTER 是否适用于 SUM 的每条记录?

解决方法

from datetime import * import time from tkinter import * ENTER_EMP_NAME = 'Enter Employee Name' NUM_EMP_NAMES = 6 EMP_LOG_FILENAME = 'emp_log.txt' # define GUI root = Tk() root.title("Make Communication Record") root.geometry("550x775") # Time Stamp Label day = datetime.today() hour = time.strftime("%H") minute = time.strftime("%M") sec = time.strftime("%S") f_daydisplay = day.strftime("%A - %B %d,%Y ") t = f_daydisplay + " " + hour + ":" + minute + ":" + sec #Refresh clock for time stamp label def clock(): day = datetime.today() f_daydisplay = day.strftime("%A - %B %d,%Y at ") hour = time.strftime("%H") minute = time.strftime("%M") sec = time.strftime("%S") timelab.config(text=f_daydisplay+hour + ":" + minute + ":" + sec) timelab.after(1000,clock) #Time stamp label timelab = Label(root,text="") timelab.grid(row=13,columnspan=4) clock() # Button actions def onclick(args): if args == 1: # Submit clicked. names = [var.get() for var in name_vars if var.get() != ENTER_EMP_NAME] if not names: print('No names were filled in,no log file written.') return print(f'Saving {len(names)} names to file.') with open(EMP_LOG_FILENAME,'w') as log_file: for name in names: log_file.write(name+'\n') return if args == 2: # Reset button clicked. for entry in name_entries: entry.delete(0,END) # Delete entire current contents. entry.insert(0,ENTER_EMP_NAME) return # Name entry boxes name_vars = [] name_entries = [] for i in range(NUM_EMP_NAMES): name_var = StringVar(value=ENTER_EMP_NAME) name_vars.append(name_var) name_entry = Entry(root,width=30,borderwidth=5,textvariable=name_var) name_entry.grid(row=i+2,column=0,columnspan=1,padx=10,pady=10) name_entries.append(name_entry) # Buttons btn1 = Button(root,text="Submit",width=20,command=lambda: onclick(1)) btn1.grid(row=12,pady=10) btn2 = Button(root,text="Reset Fields",command=lambda: onclick(2)) btn2.grid(row=12,column=2,pady=10) root.mainloop() 是迭代器,FILTER 不是。在此公式中,CALCULATE 返回一个具有单列 FILTER 的表,其中包含小于或等于 'Table'[Index] 时存在的过滤器上下文中评估的所有索引 {{1} } 被执行。

MAX( 'Table'[Index] )CALCULATE 内被评估时,在上一步评估的过滤表被应用为过滤上下文。这会替换同一列上现有的任何过滤器上下文,但会与其他列上可能存在的其他过滤器组合。

这些过滤器应用于 SUM( 'Table'[Value] ),只有满足这些条件的行才会被 CALCULATE 迭代。

所以迭代 Table 的不是 SUM。并且 CALCULATE 迭代 Table 已经被 SUM 修改的过滤器上下文过滤。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...