Browse our archives by topic…
Blog
Browse our blogs activity over the years…
Testing Power BI Dataflows using SpecFlow and the Common Data Model
Ensure reliable insights with endjin's automated quality gates for validating Power BI Dataflows in complex solutions.
Effectively managing mental capacity
We are currently living in extremely uncertain times. As we try to process these changes, many of us have found that we do not have the same mental capacity we once did. Some of that might be due to extra constraints on our time, but a lot of our brain-power is also spent trying to process the huge worldwide changes which are currently taking place. In this blog, Carmel talks about some techniques for managing that mental capacity, and how those apply in an ever-changing world.
C# 8.0 nullable references: embrace the expressiveness
Beyond catching null bugs at compile time, C# 8.0 nullable references record null intent directly in source, so future readers don't have to guess the design.
Learning DAX and Power BI – Table Functions
This is the fifth blog in a series on DAX and Power BI. This post focuses on table functions. In DAX, table functions return a table which can then be used for future processing. This can be useful if, for example, you want to perform an operation over a filtered dataset. Table functions, like most functions in DAX, operate under the filter context in which they are applied.
Azure Analysis Services - how to save money with automatic shutdown
Explore Azure Analysis Services for scalable analytics. Control costs via automation with Powershell & Azure DevOps in multi-environment setups.
Building a proximity detection pipeline
Endjin's blog post details their project with OceanMind, using a serverless architecture and machine learning to detect illegal fishing.
Using complex objects in BDD Scenarios with SpecFlow
Explore Behavior Driven Development using SpecFlow. Learn to create complex test data objects in Gherkin feature files with Corvus.NET project.
C# 8.0 nullable references: non-nullable is the new default
Explore C# 8.0's nullable references feature, as Ian discusses its impact on default nullability assumptions in this informative post.
Learning DAX and Power BI - Aggregators
This is the fourth blog in a series about DAX and Power BI. We have so far covered filter and row contexts, and the difference between calculated columns and measures. This post focuses on aggregators. We cover the limitations of the classic aggregators, and demonstrate the power of the iterative versions. We also highlight some of the less intuitive features around how these functions interact with both filter and row contexts.
Power BI Dataflow refresh polling
There's no obvious API endpoint for Power BI Dataflow refresh history, unlike Datasets. Here's how to get it programmatically.
Azure Analysis Services: update calculated column expression from .NET
Learn how to update Azure Analysis Services model schemas in .NET apps using AMO SDK for user-driven analysis.
C# teamwork: share project config with NuGet Build Asset Packages
See how to manage consistent default configuration across all your .NET projects by using NuGet build assets.
Wardley Maps: How OceanMind use Azure & AI to fight illegal fishing
Wardley Maps are a fantastic tool to help provide situational awareness, in order to help you make better decisions. We use Wardley Maps to help our customers think about the various benefits and trade-offs that can be made when migrating to the Cloud. In this blog post, Jess Panni demonstrates how we used Wardley Maps to plan the migration of OceanMind to Microsoft Azure, and how the maps highlighted where the core value of their platform was, and how PaaS and Serverless services offered the most value for money for the organisation.
Learning DAX and Power BI – Calculated Columns and Measures
Dive into DAX and Power BI in our blog. Learn about calculated columns, measures, and their use in complex visuals.
Office 365 Wardley Mapping Templates
Utilize our Wardley Mapping Templates for PowerPoint & Visio; and enhance your situational awareness and technical decisions with this technique.
Optimising C# for a serverless environment
Tour our OceanMind project using Azure Functions for real-time marine telemetry processing. Learn optimization techniques for serverless environments.
High-performance C#: a test pattern for ref structs
Explore C# 7.2's ref structs, use in high-performance scenarios, their constraints, and techniques for overcoming challenges in unit testing the Ais.Net parser.
An experimental approach to software development
Endjin applies scientific experimentation to software development for validated solutions, using hypotheses for confident designs.
Learning DAX and Power BI – Row Contexts
Here is the second blog in a series around learning DAX and Power BI. This post focuses on row contexts, which are used when iterating over the rows of a table when, for example, evaluating a calculated column. Row contexts along with filter contexts underpin the basis of the DAX language. Once you understand this underlying theory it is purely a case of learning the syntax for the different operations which are built on top of it.
Help for the new CTO: Getting to know your team
As part of my series on guidance for CTOs, I discuss using the Office of the CTO (OCTO) approach to management, its strengths and limitations.
Azure Analysis Services: Process an async model refresh from .NET
Learn to use Azure Analysis Services in custom apps via REST API in .NET for efficient async model refreshes.
Introducing Ais.Net - High-Performance Parsing in C#
Endjin's high-performance .NET AIS parser, built for OceanMind to track commercial ships — 2.6 million messages per second using ref structs and Span<T>.
Learning DAX and Power BI - Filter Contexts
Every DAX formula runs inside a filter context - the set of rows it can see. Row selection, column selection, slicers, and report filters all shape that context and change your results.
Power BI Data Type Mappings
Explore Power BI data types across mediums, learn their corresponding names, and simplify query conversions with this informative blog and report.
C# developers! Scoped components are more dangerous than you think
Discover the challenges and alternatives of managing scoped component lifetimes with dependency injection.