如何获取Power BI矩阵行中的总数

如何解决如何获取Power BI矩阵行中的总数

以下是Power BI表中的原始数据示例。

enter image description here

我想按Col B和Col C对Col D组的数目求和,并在矩阵行中将它们列出为合计数目。我怎样才能得到这样的欲望布局?看起来很简单,但无法弄清楚。 预先谢谢您

enter image description here

忘记提及C列比所列出的更多。因此,总和将与外面的切片器一起使用。

解决方法

您可以将计算出的列添加到表中,并在矩阵的行列表中使用它:

# coding:utf-8
# version 3.x python
import sys
from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox                              # Librairie des fenêtres d'alerte

# ================= ID python ============================
print("TkVersion",TkVersion)
print("TclVersion",TclVersion)
print("Python version",sys.version_info)
import sys; print('Python %s on %s' % (sys.version,sys.platform))

# ================= Liaison file py =========================
import HV_DB_BackEnd

class Main:
    def __init__(self,root):
        self.root = root
        self.root.title("--------------")
        self.root.geometry("700x660+0+0")
        self.root.config(bg="cadet blue")

  if __name__ == '__main__':
    root = Tk()
    application = Main(root)

    # --- Déclaration Variables - Tableaux
    frames = []                     # Liste Frames
    global Liste_Full
    Liste_Full = []                  # Liste d'imbrication des L_List (sélection faites depuis Treeview)


    # ========================  Frame Treeview  ====================
    MainFrame = LabelFrame(root,text="[TEST]",relief=FLAT)
    MainFrame.place(x=5,y=5,width=1300,height=700)
    # =============  Frame hébergeant les sous frame  ==============
    FrameCalc_1 = Frame(name='labels')  #,relief=SOLID,borderwidth=1)
    FrameCalc_1.place(x=15,y=300,width=800,height=300)

    # ========================  Fonctions  ========================
    # [Treeview - Heading] - Empêche le redimensionnement des entêtes
    def handle_click(event):
        if HElist.identify_region(event.x,event.y) == "separator":
            if HElist.identify_column(event.x) == '#1':
                return "break"
            if HElist.identify_column(event.x) == '#2':
                return "break"
            if HElist.identify_column(event.x) == '#3':
                return "break"
            if HElist.identify_column(event.x) == '#4':
                return "break"
            if HElist.identify_column(event.x) == '#5':
                return "break"
            if HElist.identify_column(event.x) == '#6':
                return "break"

    # [TreeView widgets] - Affiche Table
    def DisplayData():
        # Insertion Table BD dans TreeView
        a = 0
        for i in HV_DB_BackEnd.loadRecord():
            HElist.insert('','end',text=i[0],values=(i[0],i[1],i[2],i[3],i[4],i[5]))
            # print("Index",i[0])
            a = a + 1
        print(" - Nombre d'enregistrement _ lecture Table",a)
        print(" - Nombre d'enregistrement _ lecture Treeview",len(HElist.get_children()))

    # Suppression frame(s) générés dynamiquement & MàJ Liste_Full
    def removeLabel(frame,var):
        print("frames avant suppression",frames)
        print("\n","len(frames) avant",len(frames))
        frame.destroy()
        Liste_Full.__delitem__(var.get())

        ix = frames.index(var)          # lit l'indexation de la frame
        print("ix - Index de la frame à supprimer ",ix)
        frames.pop(ix)
        print("frames après suppression",frames)
        # Mise à jour de l'indexation var des frame
        # for i,v in enumerate(frames[ix:],start=ix):
        for i,v in enumerate(frames[0:],start=0):
            print("i",i)
            v.set(i)
            # print("v",i,v.get())
            # var.set(v.get())
        print("len(frames) après",len(frames))
        print("frames restantes",frames)


    # Création dynamiquement frame(s) contenant Labels selon la sélection faite depuis TreeView
    def selectItem(frame):
        var = IntVar()
        global frames

        frame = Frame(FrameCalc_1,borderwidth=0)                                                                    # frame à générer dans la frame master FramCalc_1
        frame.configure(relief=GROOVE)
        frame.grid(row=len(frames) + 1,column=5,pady=1)                                       # Nb de Colonne à générer - pady=intervale entre la prochaine
        frame.columnconfigure(0,minsize=135)                                                      # Largeur de la Colonne
        frame.columnconfigure(1,minsize=30)
        frame.columnconfigure(2,minsize=30)
        frame.columnconfigure(3,minsize=50)
        frame.columnconfigure(4,minsize=30)
        frame.columnconfigure(5,minsize=80)
        frame.columnconfigure(6,minsize=0)


        # === [Listing Table dans Widget Treeview] ===
        curItem = HElist.focus()
        Liste = HElist.item(curItem)["values"]


        # === [Génére automatiquement de nouveaux widgets Labels] ===

        var.set(len(frames))      # Compte le nombre de frame
        print(var.get())
        if var.get() < 5:
            print("\n" + "var.get()",var.get())
            L_Line = []                                                                                           # Liste temporaire pour chaque sélection
            # -- Génère Label - Affiche le Nb de Frame généré
            Label(frame,textvariable=var).grid(row=0,column=0)
            # print("frame.winfo_children()[0] - Label compteur",frame.winfo_children()[0])        # .labels.!frame.!label

            frames.append(var)  # liste des frames générée
            # print("frames",frames)
            # print("nombre de frames générée-addNewLabel",len(frames))

            # -- Génére widget Label - Nom
            if Liste[0] != "":
                Label(frame,text=Liste[1]).grid(row=0,column=1)
                L_Line.append(Liste[1])

            # -- Génére widget Label
            if Liste[0] != "":
                Label(frame,text=Liste[3]).grid(row=0,column=2)
                L_Line.append(Liste[3])

            # -- Génére widget Label
            if Liste[0] != "":
                Label(frame,text=Liste[5]).grid(row=0,column=3)
                L_Line.append(Liste[5])

            # -- Génére widget Entry
            if Liste[0] != "":
                    Input_gr = ""
                    # takefocus=True  autorise la tabulation via la touche TAB
                    l=Entry(frame,width=4,text="",takefocus=True)
                    l.grid(row=0,column=4)
                    # print("frame.winfo_children()[3]            ",frame.winfo_children()[3])
                    Input_gr = frame.winfo_children()[3]
                    L_Line.append(Liste[0])

            # -- Génére Label -
            if Liste[0] != "":
                    lb_pourcentage = ""
                    Label(frame,text="").grid(row=0,column=5)
                    lb_pourcentage = frame.winfo_children()[4]                                    # Récupère le nom du label
                    # print("frame.winfo_children()[4]            ",frame.winfo_children()[4])
                    L_Line.append(Liste[0])

            # -- Génére widget Button
            # takefocus=False  supprime la tabulation via la touche TAB
            b = Button(frame,text="Supprimer",width=10,takefocus=False,command=lambda: removeLabel(frame,var))
            b.grid(row=0,column=5)
            # print("frame.winfo_children()[5] - Button Supprimer",frame.winfo_children()[5])      # .labels.!frame.!button
            # print("")

            # print("frame.winfo_children()",frame.winfo_children())
            Liste_Full.append(L_Line[0:len(L_Line)])                                                  # Imbrique L_Line dans Liste_Full
            print("Liste_Full",Liste_Full)                                                                    # exemple  [['test_14',53,'0.142',38,38],['test_0',92,'0.138',9,9]]
            print("frames add",frames)


    # ============= Style Police : Treeview_Button_Label  ==============

    style = Style()
        # Treeview
    style.configure('.',foreground="black")                # Configuration TxT de la Frame contenant Treeview
    style.configure('TTreeview',rowheight=15,font=('verdana',8,''),foreground='white',background='dim gray')
    style.configure('TTreeview.Heading',foreground="black",cursor='none')
    style.layout('TTreeview',[])

    # ===== Treeview & Scrollbar Vertical/Horizontal [XY] 
    scrollbar_y = Scrollbar(MainFrame,orient='vertical')  # Ascenseur Vertical
    scrollbar_y.place(x=1236,y=24,height=169)
    scrollbar_x = Scrollbar(MainFrame,orient='horizontal')  # Ascenseur Horizontal
    scrollbar_x.place(x=1,y=177,width=1236)

    HElist = Treeview(MainFrame,selectmode="browse",columns=(1,2,3,4,5,6),show="headings")  #,yscrollcommand=scrollbar_y.set,xscrollcommand=scrollbar_x.set)  # style='TTreeview'
    # En-tête
    HElist.heading('#1',text="ID")
    HElist.heading('#2',text="Nom")
    HElist.heading('#3',text="C0")
    HElist.heading('#4',text="C1")
    HElist.heading('#5',text="C2")
    HElist.heading('#6',text="C3")

    HElist.column('#1',width=0,minwidth=0,stretch=False)
    HElist.column('#2',width=160,minwidth=160,stretch=OFF)
    HElist.column('#3',width=50,minwidth=50,anchor=CENTER,stretch=OFF)
    HElist.column('#4',width=57,minwidth=57,stretch=OFF)
    HElist.column('#5',width=120,minwidth=120,stretch=OFF)
    HElist.column('#6',width=200,minwidth=200,stretch=OFF)

    HElist.place(x=2,y=2,width=1236,height=175)
    # Cache colonne(s)
    exclusionlist = ['1']                                                   # Colonne [ID] exclue d'affichage
    displaycolumns = ['2','3','4','5','6']                          # Colonne [xxx] affichées
    for col in HElist["columns"]:
        if not "%s" % col in exclusionlist:
            pass
    HElist["displaycolumns"] = displaycolumns

    scrollbar_y.config(command=HElist.yview)                # Ascenseur Vertical
    scrollbar_x.config(command=HElist.xview)                # Ascenseur Horizontal

    DisplayData()
    # Affiche Entry widget,via souris,la sélection des Datas [Colonnes Treeview]
    HElist.bind('<ButtonRelease-1>',selectItem)            # Le bouton de la souris a été relâché

    # Désactive le redimensionnement des Entêtes Treeview
    HElist.bind('<Button-1>',handle_click)                 # Gauche
    HElist.bind('<Button-2>',handle_click)                 # Molette
    HElist.bind('<Button-3>',handle_click)                 # Droite

    root.mainloop()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-