top of page

Measure Killer

ein externes Tool für Microsoft Power BI Desktop.

Aufräumen des Power BI Tenants

Measure Killer kann einen Power BI Tenant aufräumen und optimieren. Dies kann die Refreshdauer der Datasets reduzieren und so zu weniger Last auf der Premium Kapazität führen.

Measure Killer liest nur die Metadaten eines Dataset, nie die eigentlichen Daten. Da wir uns über XMLA verbinden, muss das Dataset nicht downgeloadet werden.

Löschen unbenutzter Measures

Measure Killer kann selbständig unbenutzte Measures löschen. Alternativ kann ein C# Skript generiert werden, mit dem man die Measures in Tabular Editor manuell entfernen kann.

Weniger Spalten in Modell verbessern auch die Performance weil weniger RAM benötigt wird.

Löschen unbenutzter Spalten

Measure Killer generiert einen voll funktionsfähigen M-Code, der dann in den "Erweiterten Editor" der bereits bestehenden Query eingefügt werden kann.

Analyse eines Berichts

Für jeden Bericht wird ein detailliertes Excel File erstellt, hier kann man einsehen, wo ein Artefakt verwendet wird. Dies kann in: Berechnungen, Visuals, Filter, Conditional Formatting, Joins in Power Query oder anderen Teilen eines Power BI Berichts wie z.B. Relationships sein.

Außerdem, gibt Measure Killer auf Wunsch auch eine Analyse in Form eines Charts aus.

Analyse_Icon_edited_edited.png
Columns_Icon_edited_edited.png
Measures_Icon_edited_edited.png

Was wird vom Measure Killer erkannt?

  • Visuals - inklusive Filter welche auf das Visual, die Seite oder den Bericht angewendet werden

  • Artefakte die nur in Custom Visuals benutzt werden (siehe compatibility matrix weiter unten)

  • Jegliche Art von Measures oder Beziehungen

  • Spalten die ausschließlich in Power Query z.B. joins, appends, references genutzt werden

  • Calculated columns

  • Calculated tables

  • Conditional Formatting (bedingte Formatierungen)

Was geht nicht?

  • Wenn man ganze Berichte kopiert und dann nur diverse Änderungen macht, kann dies zu falschen Referenzen führen.

  • Wenn man in Power Query neue Queries erstellt die auf bereits existierende Queries referenzieren, kann es sein, dass Measure Killer Spalten in der neuen Query referenziert, die in den alten Queries bereits entfernt wurden.

  • Wenn eine Query B (child) auf Query A (parent) referenziert (join, append, reference) und diese dieselben Spaltennamen haben, und wir nun einen Eintrag in M mit einer dieser Spalten haben, wird dies fälschlicherweise als benutzt in Query A geflagged.

  • Kein Löschen von Calculated Columns

  • Es können mehrere Durchläufe notwendig sein, um alle unbenutzten Measures und Spalten zu löschen. (Das können zB welche sein, die lediglich in unbenutzten Measures und Spalten referenziert werden, aber nicht im Report selbst verwendet werden.)

  • Ohne Internetverbindung kann nur die "Free" Variante genutzt werden.

  • McAfee Antivirus kann Measure Killer blockieren. Man muss die .exe deshalb manuell whitelisten, siehe hier.

Measure Killer Compatibility

legend

☑️ fully compatible

 ?   limited compatibility

 ✗  currently not working

General:

☑️ .pbix (Desktop and Desktop RS)

☑️ .pbix (Uploaded to PBI Service)

☑️ Thin file uploaded to PBI Service

☑️ DirectQuery

☑️ Composite models

Dashboards

Paginated reports

Analyze in Excel

Any type of live connection (SSAS, AAS, Datamarts) - create a local mode (DQ) to make it work!

.bim files / models stored in a folder etc.

Metrics (Goals)

Feature compatibility:

☑️ Row-level security

☑️ Calculation groups

☑️ Field parameters

✗ KPIs (created in the tabular model)

✗ Object-level security (When an artifact is only used in OLS, Measure Killer will not detect it)

Compatibility of visuals:

☑️ Standard visuals (all, unless listed below)

☑️ Icon Map

☑️ Zebra BI visuals

☑️ HTML VizCreator Cert

☑️ HTML VizCreator Flex

☑️ Balance Sheet Visual

?  Other custom visuals (We have not tested Measure Killer for all custom visuals)

Q&A visual

✗ Paginated report visual

✗ Metrics (Goals) visual

visuals.png

Wichtiges und Versionierung​

Es gibt eine Version die Adminrechte benötigt, dann wird der Measure Killer auch zu den externen Tools von Power BI hinzugefügt. Bei der "portable" Version, die keine Adminrechte benötigt, wird dies nicht gemacht.​

Da Measure Killer noch sehr neu ist, sind Bugs nicht ausgeschlossen. Hier kann man Fehler melden.

Enterprise Kunden können Support Anfragen direkt an uns stellen.

Measure Killer erstellt für jeden analysierten Report einen versteckten "temp_" Ordner im selben Verzeichnis wie das Power BI File. Dieser Ordner ist nichts anderes als das entpackte .pbix File des Reports.​

Das copy+pasten von Visuals zwischen live/thin Reports kann dazu führen, dass Artefakte fälschlicherweise als benutzt identifiziert werden, obwohl sie das evt. nicht sind.

Anleitung zur Verwendung von "Measure Killer"

Blog post oder YouTube video

Measure Killer - Download & Changelog

Aktuelle Version 0.9.7

Auch im Microsoft Store verfügbar (Admin Version)

Release Notes for 03/20/2023

Version 0.9.7

[Features]

-Added the ability to configure proxy options for API calls and Azure identity verifier.

[UI]

-Online mode now takes users back to the Workspace and Dataset window, rather than resetting the Measure Killer tool to its initial state.

-Dataset and Workspace selection window is now resizable, giving users more control over the size and layout of the window.

Older versions

Release Notes for 03/15/2023

Version 0.9.6

[Bugs]

-Improved error handling

-Smart narrative visual fixed

Release Notes for 03/08/2023

Version 0.9.5

[Features]

-Added Shared/golden Dataset online mode.

Users can now select a dataset and Measure Killer will detect all connected reports in workspaces that the user has access to. For this mode, no local files are needed anymore.
-Enhanced detection of artifacts in visuals.

-Significantly reduced number of false positives

-Strongly improved Power Query M logic

[UI]
-The user interface has been improved with rearranged buttons, reduced windows, and a menu bar has been added.

-Users can choose to either "Remove other columns" or "Remove columns" to "kill" columns.

-Added a menu for Measure Killer's main window (less buttons).
-Users now have the option to choose one of 11 color themes for the entire Measure Killer application.


[Bugs]

-False positives for substrings in visuals have been fixed.

-Fixed duplicates in where artifact are used.
-The main window no longer becomes "not responding" in bigger reports.
-Fixed multiple steps with the same name, "Columns removed by Measurekiller"
-Fixed calendar artifacts usage bug.

Release Notes for 01/05/2023

Version 0.9.2

[MISC]

-Fixed a bug with "filter on this page" and "filter on all pages"

​Release Notes for 12/07/2022
Version 0.9.1

[MISC]
- Updated the installer

- Fixed offline bug where Measure Killer was not loading

​Release Notes for 12/05/2022
Version 0.9
 

[ FEATURES ]

- Added connection to shared datasets and live/thin reports (offline and via XMLA endpoint for premium workspaces)
- Improved results table

[UI]
- rearranged buttons and added some functional buttons e.g "back button"

- changed formatting of results table

Release Notes for 10/17/2022
Version 0.8

 

[ FEATURES ]

- Added option to kill measures directly in Measure Killer without using Tabular Editor
- Added feature to sort columns 
- Added detection of columns used only by incremental refresh
- Added (DAX) expression column for Excel output
- Added new report option (row by row) when saving the results file
- Self-update after killing measures (the user doesn’t have to click on run again)


[MISC]

- Added error handling for blank file selection
- var. smaller bug fixes

Release Notes for 10/06/2022
Version 0.7


[UI]
-You can now see how costly (in terms of storage space) your unused columns are
-Table overview of unused artifacts
[MISC]
- var. bugfixes and performance improvements

Release Notes for 9/16/2022
Version 0.5


[UI]
- Rearranged Buttons.
[MISC]
- Fixed an error that caused false positives if measure names would contain " and '.

Release Notes for 9/7/2022
Version 0.4


[ FEATURES ]
- Added M code to automatically remove columns.
[UI]
- Improved UI and added colored buttons.
 

Release Notes for 8/27/2022
Version 0.3


[ FEATURES ]
- Added C# script to remove measures.
- Added option to plot results.
[ MISC ]
- Removed info page on startup.

​Security information and documentation

This section will shed some light on the API calls Measure Killer makes.

Generally, Measure Killer can run completely offline (when there is no internet connection, the offline/free version is automatically launched)

If you have an internet connection however, we will get your IP address and check if you have a license key (this is done in the KeyAuth Python API section below)

KeyAuth Python API 

This is a Python module that provides an API for interfacing with the KeyAuth authentication service. It allows developers to easily integrate KeyAuth’s user and license management functionality into their Python applications. 

API calls made

  • Session.get() - Sends a GET request to https://google.com to check if the requests module is working. 

URLs used 

The API calls are made using the requests module’s Session.get() and Session.post() methods.

The Session object is initialized at the top of the code with requests.Session(), which creates a new session that can be used to send multiple requests to the same server. 

  • The Session.get() method is used to send a GET request to https://google.com, which is only used to check if the requests module is working. This is not a KeyAuth API call. 

  • The Session.post() method is used to send POST requests to https://keyauth.win/api/1.0/ to communicate with the KeyAuth API. 

  • The __do_request() method is used to make these requests, and it takes a dictionary of data to send as the request body. 

How to use it

To use this module, you must first import it into your Python project using import keyauth. Then you can create a new api object by calling keyauth.api(name, ownerid, secret, version, hash_to_check, proxy_url=None), where name, ownerid, secret, version, and hash_to_check are all required parameters that correspond to your KeyAuth application’s settings. proxy_url is an optional parameter that can be used to specify a proxy server to use for requests. 

 

Once you have created an api object, you can call its register(user, password, license, hwid=None) and login(user, password, hwid=None) methods to authenticate users and manage licenses. 

Requirements 

This module requires the following Python modules to be installed: 

  • requests 

  • Crypto.Cipher 

  • Crypto.Hash 

  • Crypto.Util.Padding 

  • On Windows, it also requires the win32security module to be installed. 

If any of these modules are not installed, they will be automatically installed when the module is imported. 

For the paid version of Measure Killer, we run various Power BI Rest API calls

Power BI REST APIs  

This Python code uses the Power BI REST APIs to interact with Power BI data. The code provides several methods for accessing information, including accessible workspaces, datasets in a particular workspace, reports in a particular workspace, and the layout of a particular report. 

API calls made 

  • authenticate(): Uses the Azure identity package to authenticate with the Power BI API and retrieve an access token. 

  • workspaces(): Gets all accessible workspaces using a GET request to https://api.powerbi.com/v1.0/myorg/groups. 

The API calls are made using the requests package in Python, which sends HTTP requests to the Power BI API. The requests.get() method is used to make GET requests to the API endpoints. The access token is passed in the headers of the request, and the response is returned as a JSON object.

 

URLs used 

 

Note: {wk_id} and {re_id} are placeholders for the workspace ID and report ID, respectively. 

​Dokumentation

Installation

Es gibt zwei verschiedene Versionen. Eine "Admin" Version und eine "Non-Admin" Version (portable). Um die Admin Version installieren zu können, muss der User im Windows Administrator Rechte besitzen. Die beiden Versionen funktionieren jedoch gleich. Der einzige Nachteil der "Non-Admin" Version ist, dass Measure Killer nicht automatisch zu den "External Tools" in Power BI Desktop hinzugefügt wird.

 

Um die XMLA Verbindung für das Basic und Enterprise Abo zu ermöglichen wird das MSOLAP Paket benötigt. Dies muss evt. von Microsoft heruntergeladen und installiert werden.

Verwendete Python libraries

sys, pyadomd, pandas, numpy, tkinter, os, json, shutil, re, subprocess, psutil, pyperclip, webbrowser, matplotlib
 

Anleitung

Measure Killer kann ganz einfach über die "External Tools" in Power BI geöffnet werden.
Falls die "portable" Version verwendet wird, muss das Tool über die .exe Datei ausgeführt werden, oder manuell zu den "External Tools" hinzugefügt werden.​​​ Der Port wird automatisch vom geöffneten .pbix-file ermittlelt. Außerdem wird als Dateipfad die zuletzt geöffnete .pbix  Datei vorselektiert.

Ausführen von Measure Killer

  • Beim Start von Measure Killer gibt es drei Auswahlmöglichkeiten:

    • Start

      • Single report and dataset: Das ist die grundlegendste Art Measure Killer zu verwenden. Hier kann pro Durchlauf nur ein Bericht/Dataset analysiert werden.

      • Shared Dataset on local machine: Hierfür muss das Dataset heruntergeladen werden.

      • Shared dataset via XMLA: Bei dieser Option muss das Dataset nicht heruntergeladen werden. Aber PPU oder PPC sowie XMLA Leserechte im Tenant werden vorausgesetzt.

Single report and dataset

  • Analyse eines einzelnen Bericht​s

Hier kommt man zur Hauptseite von Measure Killer. Oben links im Dropwdown-Feld wir der PBI Bericht ausgewählt (sofern nicht schon die richtige Datei vorselektiert wurde). Measure Killer wählt automatisch die zuletzt geöffnete PBI Datei aus.​

Ist der richtige Bericht ausgewählt, kann der Execute Button betätigt werden. Dieser führt den User noch einmal zu einer Dateiauswahl. Ist das richtige File gewählt - klicken Sie Run.

Dann analysiert Measure Killer die PBI Datei und man kann im Popup-Fenster sehen welche Elemente überprüft werden.

In der Tabelle werden die Ergebnisse der Analyse angezeigt - die benutzten/unbenutzten Measures und Spalten des Berichts.

Außerdem können diese Ergebnisse genauer angezeigt werden mittels Document results.

Die Funktionsweise der jeweiligen Buttons wird weiter unten in dieser Doku näher erklärt.

Shared dataset on local machine

  • Analyse von mehreren live/thin reports, die mit einem Dataset verbunden sind.

Zuerst muss das Dataset heruntergeladen und geöffnet werden. Dann kann man im Drop-Down Menü den dazugehörigen Port selektieren. Im nächsten Schritt muss zuerst noch einmal das Dataset ausgewählt werden, am besten über "Add new file". Jetzt können wir die dazugehörigen Berichte selektieren. Entweder einzeln mit "Add new file" oder auch ein ganzer Ordner voller .pbix Dateien mit "Live/thin reports from a folder". Wenn alle Dateien ausgewählt wurden, klicken Sie Submit.

Danach gelangen sie zum Hauptfenster von Measure Killer. Klicken Sie auf Execute um ihre Berichte zu analysieren.

Dann analysiert Measure Killer die Dateien und man kann im Popup-Fenster sehen welche Elemente überprüft werden.

In der Tabelle werden die Ergebnisse der Analyse angezeigt - die benutzten/unbenutzten Measures und Spalten des Datasets bzw. der live Berichte. Bei den shared Datasets macht es auch Sinn immer zu sehen in welchem Report ein Artefakt benutzt wird.

Um eine volle Dokumentation mit allen Details zu bekommen, klicken Sie auf Document results.

Die Funktionsweise der jeweiligen Buttons wird unten in "Verschiedene Buttons" näher erklärt.

Shared dataset via XMLA

  • Analyse von mehreren live/thin reports welche mit einem Dataset verbunden sind (mittels XMLA Endpoint). Diese Option ist hilfreich wenn das Dataset zB nicht heruntergeladen werden kann

Vorraussetzungen:​

  • Basic oder Enterprise Version von Measure Killer

  • Premium Workspace

  • XMLA Endpoint aktiviert mindestens mit Leserechten

  • XMLA Endpoint im Power BI Admin Portal zugelassen

  • MSOLAP Paket installiert

Geben Sie den Namen des Workspace ein, in dem sich das Dataset befindet. Der Name muss genau übereinstimmen (case sensitive). Wählen Sie dann darunter im Drop-Down Menü das richtige Dataset aus und klicken Sie Next.​

Im nächsten Schritt können die dazugehörigen Berichte ausgewählt werden. Entweder einzeln mit "Add new file" oder auch ein ganzer Ordner voller .pbix Dateien mit "Live/thin reports from a folder". Wenn alle Dateien ausgewählt wurden, klicken Sie Submit.

Danach gelangen sie zum Hauptfenster von Measure Killer. Klicken Sie auf Execute um ihre Berichte zu analysieren.

Dann analysiert Measure Killer die Dateien und man kann im Popup-Fenster sehen welche Elemente überprüft werden.

In der Tabelle werden die Ergebnisse der Analyse angezeigt - die benutzten/unbenutzten Measures und Spalten des Datasets bzw. der live Berichte. Bei den shared Datasets macht es auch Sinn immer zu sehen in welchem Report ein Artefakt benutzt wird.

Um eine volle Dokumentation mit allen Details zu bekommen, klicken Sie auf Document results.

Die Funktionsweise der jeweiligen Buttons wird unten in "Verschiedene Buttons" näher erklärt.

Verschiedene Buttons​

  • Back (Icon oben links): Führt den Benutzer zur vorherigen Seite.

  • Refresh (Icon oben links): Aktualisiert Measure Killer und holt sich den Port aus dem aktuell geöffneten Bericht.

  • Copy: kopiert den Text aus dem Textfeld auf der linken Seite.

  • No Idea what to do?: Weiterleitung zu unserem YouTube Kanal.

  • Execute: Analysiert den Bericht und gibt als Ergebnis die unbenutzten Spalten und Measures zurück.

  • Feedback: Hiermit wird der Benutzer zu unseren Feedback Blog Post weitergeleitet.

  • Plot unused vs. used: Stellt die Ergebnisse grafisch dar.

  • Document Results: Generiert eine detaillierte Dokumentation als xls/txt oder csv Datei.

  • Kill unused measures: Hiermit können entweder ausgewählte oder alle unbenutzten Measures gelöscht werden (weitere Infos zum Ablauf finden Sie unter Features).

  • Kill unused Columns: Öffnet ein eigenes Fenster, wo man alle Tabellen, in denen es unbenutzte Spalten gibt, auswählen kann. Die Tabellen sind nach der Gesamtsumme an Speicherplatz geordnet, die eingespart werden kann, wenn die unbenutzten Spalten gelöscht werden. Es wird für jede Tabelle ein M code generiert. Dieser Code muss dann in den Advanced Editor der jeweiligen Query/Tabelle kopiert werden.

  • Reset Table: Setzt die Tabelle in die Standardansicht zurück.

  • Filter mit Dropdownmenu: Hier kann in Verbindung mit dem Textfeld nach Artefakten nach Name/Table oder Report gefiltert werden.

  • GO: aktiviert den Filter vom Textfeld links.

  • Measure Killer's official website: Weiterleitung zur Measure Killer Website.

  • Delete table content: Löscht den Inhalt der Tabelle.

Features

  • Löschen von unbenutzten Measures: Measure Killer scannt den Bericht und teilt Measures in benutzt oder unbenutzt ein. Das Löschen von Measures sollte immer mit Vorsicht gemacht werden, da dieser Schritt unumkehrlich ist. Measure Killer kann entweder ausgewählte oder alle Measures selbst löschen, oder ein C# Skript zum Löschen im Tabular Editor erstellen.

  • Löschen von unbenutzten Spalten: Measure Killer scannt den Bericht und teilt Spalten benutzt oder unbenutzt ein. Mithilfe eines M codes (Power Query Script) können mehrere Spalten pro Tabelle gelöscht werden. Jedoch muss dieses Script für jede Tabelle einzeln ausgeführt werden.

  • Analyse des Berichts in Excel: Für jeden Output von Measure Killer wird ein detailliertes Excel File erstellt, hier kann man einsehen, wo ein Artefakt verwendet wird. Dies kann in: Berechnungen, Visuals, Filter, Conditional Formatting, Joins in Power Query oder anderen Teilen eines Power BI Berichts wie z.B. Relationships oder calculation groups sein. Außerdem, gibt Measure Killer auf Wunsch auch einen Chart aus, bei der man die Anzahl der unbenutzten Spalten und Measures sieht, dies geht über den Button Plot unused vs. used im UI.

  • Analyse des Berichts im Chart: Außerdem gibt es auch eine grafische Analyse in Form eines Charts. Hier werden die benutzten und unbenutzten Measures und Spalten in Form eines Balkendiagramms dargestellt. Diese Funktion kann über den Button "Plot Results" aufgerufen werden.

  • Measure Killer 0.9 macht es möglich Datasets und live/thin Reports zu analysieren.

  • Shared datasets und live reports: 

    • Online: Bei dieser Option muss das Dataset nicht heruntergeladen werden. Aber PPU oder PPC und XMLA Leserechte werden benötigt.

    • Offline: Hierfür muss das Dataset heruntergeladen werden.

  • Single report and dataset: Das ist die einfachste Art Measure Killer zu verwenden. Hier kann pro Durchlauf nur ein Bericht/Dataset analysiert werden. 

  • Tabular Killer wird ausgeführt wenn man die Measures direkt in Measure Killer löscht. Hier wird ein C# Script in einem CMD Pop-up Fenster ausgeführt.

bottom of page